[
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nend_of_line = lf\ninsert_final_newline = true\n\n[*.{js}]\nindent_style = space\nindent_size = 2\nquote_type = single\nmax_line_length = 100\n"
  },
  {
    "path": ".gitignore",
    "content": ".vscode\r\n"
  },
  {
    "path": ".prettierrc",
    "content": "{\n  \"semi\": false,\n  \"printWidth\": 100,\n  \"singleQuote\": true,\n  \"trailingComma\": \"none\"\n}\n"
  },
  {
    "path": "README.md",
    "content": "# Scale Workshop\n\n![Scale Workshop screenshot](https://raw.githubusercontent.com/SeanArchibald/scale-workshop/master/src/assets/img/scale-workshop-og-image.png)\n\n\n## Description\n\n[Scale Workshop](http://sevish.com/scaleworkshop/) allows you to design microtonal scales and play them in your web browser. Export your scales for use with VST instruments. Convert Scala files to various tuning formats.\n\n\n## Frequently Asked Questions\n\n### What kinds of microtonal scales are possible with Scale Workshop?\n\nScale Workshop can play any kind of microtonal scale, such as equal temperaments, just intonation, historical and traditional scales, non-octave scales, and any arbitrary tunings. The application offers a few methods to generate scales automatically based on parameters you set, or otherwise you can enter your scale data manually.\n\n### Can I play and hear my scale?\n\nYes, the built-in synth allows you to play your scales within the web browser. If your browser supports web MIDI then you can use a connected MIDI device to play notes. Otherwise you can use your computer keyboard (e.g. a QWERTY keyboard) as an isomorphic keyboard controller to hear your scales. You can also play on a touch device using the 'Touch Keyboard' feature.\n\n### Can I use Scale Workshop to tune up other synths?\n\nScale Workshop supports any synth that uses Scala (.scl/.kbm) files or AnaMark TUN (.tun) files. It can also export Native Instruments Kontakt tuning scripts, Max/MSP coll tuning tables and Pure Data text tuning tables.\n\nThe Xen Wiki has a [list of microtonal software plugins](https://en.xen.wiki/w/List_of_Microtonal_Software_Plugins) that support Scala and AnaMark files.\n\n### How do I enter scale/tuning data manually?\n\nScale data should be entered in to the large text field labeled ‘Scale data’. Add each note on its own new line. Cents and ratios are both supported.\n\n* To specify a ratio, simply write it in the format e.g. `3/2`\n* To specify an interval in cents, include a . in the line e.g. `701.9` or `1200.`\n* To specify n steps out of m-EDO, write it in the format `n\\m`\n\nNo need to enter `0.` or `1/1` on the first line as your scale is automatically assumed to contain this interval.\n\nThe interval on the final line is assumed to be your interval of equivalence (i.e. your octave or pseudo-octave).\n\nDon't add any other weird data to a line. Don't try to mix decimals with ratios (e.g. `2/1.5`). Scale Workshop will try to gracefully ignore any rubbish that you put in, but it's very possible that weird stuff will happen.\n\n### Can I copy and paste the contents of a Scala file (.scl) directly into the 'Scale data' field?\n\nScala files contain non-tuning related comments at the top of the file, so Scale Workshop will throw an error if you try to paste them in directly. Instead you can use the ‘Load .scl’ function, which automatically removes those comments for you. Or you can paste the Scala file but remove the comments manually.\n\n### Can I convert a TUN file to another format?\n\nYes, start by clicking New > Import .TUN and then load your TUN file into Scale Workshop. Then click Export and select your desired output format. Note that Scale Workshop is not a fully compliant AnaMark TUN v2 parser, however it should be able to read TUN files exported by Scala and Scale Workshop.\n\n### How do I make my own keyboard mapping?\n\nKeyboard mappings are not currently supported. You can still export a Scala keyboard mapping file (.kbm) but it will assume a linear mapping.\nHowever you can always use duplicate lines in your tuning in order to skip any keys that you don't want to include, or write your .kbm file manually.\n\n### Can I undo/redo?\n\nUse your browser's Back/Forward navigation buttons to undo/redo changes to your tuning.\n\n### How can I share my tunings with a collaborator?\n\nUse Export > Share scale as URL. The given URL can be copied and pasted to another person. When they open the link they will see a Scale Workshop page with your scale already tuned in.\n\n### How can I save my work for later?\n\nYou can bookmark the current page to save your work for later. This works because your tuning data is stored within the bookmarked URL.\n\n### When I export a tuning, I get a weird filename, why?\n\nExporting a file with the correct filename is not supported in Safari (iOS and macOS). You can try to use Firefox, Chrome or Opera instead.\n\n### Can I run this software offline?\n\nYes, just download the project from GitHub as a zip file and run index.htm from your web browser.\n\n### Can you add a new feature to Scale Workshop?\n\nProbably! Just add your feature request to the [issue tracker](https://github.com/SeanArchibald/scale-workshop/issues) on GitHub.\n\n### I found a bug\n\nPlease [create a bug report](https://github.com/SeanArchibald/scale-workshop/issues) detailing the steps to reproduce the issue. You should also include which web browser and OS you are using.\n\n\n## Contributing\n\nPlease base any work on develop branch, and pull requests should also be made against develop branch not master.\n\n\n## Changelog\n\n### 1.5\n* Feature: output MIDI for real-time microtuning in MIDI synths that support multichannel pitch bend\n* Feature: added button for toggling velocity sensing for MIDI in\n* Improvement: Virtual Keyboard now works better on desktop, can be closed with the Esc key, keys are highlighted when pressed\n* Improvement: user guide documentation is updated\n* Improvement: better decimal precision\n* Bug fix: typo in Kraig Grady Centaura Harmonic preset scale\n* Bug fix: enumerate chord inversion\n* Bug fix: Rotate modifier now preserves nonlinear scale data\n\n### 1.4.2\n* New modifier: Rotate. This allows you to choose an interval from your scale to be the new 1/1. (Known issue: it doesn't work as expected for intervals with decimal notation e.g. `1,5`, `2,0`)\n* Bug fixed: synth notes stuck playing quietly in the background\n\n### 1.4.1\n* Bug fixed: lag on Subset option\n* Bug fixed: audio drop out\n* Improvement: Graphical ruler shows currently loaded scale\n\n### 1.4\n* New scale generator: Combination Product Set (CPS)\n* New scale modifier: Reduce\n* New scale modifier: Sort ascending\n* New keyboard keymap: Colemak DH\n* Bug fixed in TUN v1 file export (will improve compatibility with Serum, maybe others)\n* Improvement: More synth waveforms added\n* Improvement: More preset scales added\n* Improvement: Updates to the user guide\n* Improvement: Reaper Note Name Map provides more options\n* Improvement: Rank-2 scale generator will now preserve interval notation (e.g. it will return ratios if you input ratios, return cents if you input cents)\n\n### 1.3.2\n* Many more preset scales added. Happy exploring!\n\n### 1.3.1\n* AnaMark TUN export now supports a choice of v1 or v2 as different synths require a certain version.\n\n### 1.3\n* AnaMark TUN export now contains v1 data only. This should improve compatibility with synths (e.g. Omnisphere and Quanta)\n* New feature: Export Korg Minilogue & Monologue tuning formats (.mnlgtuns & .mnlgtuno)\n* New feature: Export Soniccouture tuning format (.nka)\n* New feature: Export Reaper Note Name Map (.txt)\n* Bug fix: AnaMark TUN export is now v1 compliant - fixes compatibility with Spectrasonics Omnisphere\n\n### 1.2\n* New feature: Approximate scale by harmonics of an arbitrary denominator\n* New feature: Approximate scale by subharmonics of an arbitrary numerator\n* New feature: Approximate scale to equal divisions\n* Improvement: 'Clear scale' function now moved into 'New' menu\n* Improvement: 'Mode' renamed to 'Subset'\n* Improvement: Various updates to the user guide\n* Bug fix: 'Stretch/compress' now works as it should\n* Bug fix: 'Tempo-sync beating' now works as it should\n\n### 1.1.1\n* Improvement: When sharing a Scale Workshop link (on Discord, Facebook, etc.) the site description is now much shorter so takes less space\n\n### 1.1\n* New feature: Export tuning files for Harmor and Sytrus synths (thanks to Azorlogh)\n* Improvement: 'Mode' feature now shows a counter while you input a subset\n* Improvement: Include scale URL in a comment within exported TUN, scl, Max/MSP txt and Kontakt script exports (issue #66)\n\n### 1.0.4\n* New feature: 'Approximate' method for modifying scales can produce rational approximations of your scale\n* Improvement: Enumerate Chord method of scale generation now allows for inverted chords (e.g. 4:5:6 inverted would give 10:12:15)\n* Improvement: site now automatically redirects to HTTPS on domains known to have valid HTTPS\n* Bug fix: changing the main volume before pressing the first note no longer gets ignored\n* Bug fix: exported TUN files now has a correct functional tuning section (https://github.com/SeanArchibald/scale-workshop/issues/82)\n\n### 1.0.3\n* New feature: generate scale from 'Enumerate chord' e.g. `4:5:6:7:8` will result in a scale containing intervals 1/1, 5/4, 3/2, 7/4, 2/1\n* New feature: specify an interval in decimal format e.g. `1,5` for a perfect fifth, `2,0` for an octave.\n* New feature: export your tuning as a list of Deflemask 'fine tune' effect parameters. The resulting text file is a reference you can use when manually inputting notes into Deflemask chip music tracker.\n* Improvement: Colemak keyboard layout support added\n* Improvement: when generating rank-2 temperaments, finding MOS scale sizes is now more efficient.\n* Bug fix: error when changing main volume before audio initialised\n\n### 1.0.2\n* MIDI now waits for user input before initializing (issues #56 #57)\n* Rank-2 temperament generator now assumes you want all positive/up generators by default (issue #58)\n\n### 1.0.1\n* Fix stuck notes during MIDI note input\n* Fix stuck notes when playing pad synth in Firefox/Safari\n\n### 1.0.0\n* Stable version\n* New modifier added: tempo-sync beating\n* Minor bug fixes\n\n### 0.9.9\n* Added a selection of preset scales\n* Fix issue using delay in some situations\n* Fix issue stretching/compressing scales in some situations\n* Minor interface and user guide improvements\n\n### 0.9.8\n* Fix .scl import bug\n\n### 0.9.7\n* Added user guide\n* Fix `n\\m` style data input\n\n### 0.9.6\n* Improved modal dialogs on mobile\n* Fix regression exporting .tun files\n\n### 0.9.5\n* Loading the synth is now delayed as much as possible\n* Better compatibility for exported Scala files (placeholder description will be used if user doesn't provide a tuning description)\n* Improved mode input - you can optionally enter a list of scale degrees from the base note (e.g. 2 4 5 7 9 11 12)\n* Stricter validation of tuning data input, improves security\n* More default/auto keyboard colour layouts added\n\n### 0.9.4\n* Import AnaMark .tun files (NOT compliant to the AnaMark v2 spec, but should import tun files generated by Scala and Scale Workshop)\n* Dvorak and Programmer Dvorak keyboard layouts are now supported\n* Code refactoring and improvements\n* Fix: Scale Workshop will no longer prevent keyboard shortcuts from being used\n\n### 0.9.3\n* Undo/redo function (via browser back/forward navigation)\n* Various UI improvements, mostly for phone-sized devices\n* Code refactoring and improvements (thanks Lajos)\n\n### 0.9.2\n* Added key colour customisation\n* Added 'About Scale Workshop' screen\n* When sharing scale by URL, key colour layout and synth options will now carry across\n* When using a menu option that opens a modal dialog, the first field will automatically be selected\n* Choice of regional keyboard layout is now remembered across sessions\n* Delay time control now shows milliseconds value\n\n### 0.9.1\n* Improved rank-2 temperament generator. You can now specify how many generators up or down from 1/1\n\n### 0.9\n* Added virtual keyboard for touch interfaces (experimental)\n\n### 0.8.9\n* Improved workflow ('Calculate' button removed as the app now responds to scale data changes automatically)\n* Improved no-javascript error message\n* Fix: Scala .scl file export now preserves ratios instead of converting them to cents\n\n### 0.8.8\n* Fix stuck notes in Mozilla Firefox (due to differing implementations of the Web Audio API between web browsers, the amplitude envelopes are going to sound slightly different in Firefox)\n* Fix blank option shown in 'Line endings format' when using Scale Workshop for the first time\n* Fix styling issue with light theme when hovering over top menu option\n\n### 0.8.7\n\n* Basic MIDI input support\n* General Settings are now automatically saved and restored across sessions\n* Added \"Night Mode\" dark theme for late night sessions in the workshop\n* Added user.js file where you can add your own custom script if needed\n\n### 0.8.6\n\n* Added info tooltips\n* URL fix for Xenharmonic Wiki\n\n### 0.8.5\n\n* Added amplitude envelope for synth notes (organ, pad, and percussive presets)\n* Added main volume control\n* Added keyboard layout setting for international keyboards (English and Hungarian supported)\n\n### 0.8.4\n\n* Added delay effect\n* Added 'auto' function for base frequency, which calculates the frequency for the specified MIDI note number assuming 12-EDO A440\n* Added option to choose between Microsoft/Unix line endings\n* Added indicator to show when Qwerty isomorphic keyboard is active (when typing in a text field, it is inactive)\n* Added 'Quiet' button in case things get noisy in the workshop\n* Added share scale as URL to email, twitter\n* Fix sharing scale as URL - isomorphic mapping\n* Removed debug option - debug messages will now be output to the JavaScript console by default. Use `debug = false;` in console to disable\n* Improved options menu - options instantly take effect when changed (removed Apply/Save button)\n\n### 0.8.3\n\n* Fix sharing scale as URL - now the qwerty isomorphic mapping is correctly shared\n\n### 0.8.2\n\n* Settings have been moved to the right-side column (desktop)\n* Added option to export a list of frequencies in text format readable by Pure Data's [text] object\n\n### 0.8.1\n\n* Choice of waveform for the synth: triangle, sawtooth, square, sine\n* Settings menus added - General, Synth and Note Input settings\n* Qwerty isomorphic keyboard mapping can be changed in the Note Input settings\n* Qwerty isomorphic keyboard mapping is saved when sharing scale by URL\n* Currently displayed notes are now highlighted in the tuning data table\n* Fix stuck note in FireFox when pressing `/` key\n* UI improvement (for large screens): tall columns are now contained within one window and individually scrollable\n* Tuning data table is now displayed more compactly to show more info at once\n\n### 0.8\n\n* Synth added: use the QWERTY keys to play current scale\n* Export a scale as a URL with the 'Share scale as URL' option\n\n### 0.7.1\n\n* Fix missing line breaks on Notepad and some other text editors\n* Improved readme formatting (thanks suhr!)\n\n### 0.7.0\n\n* Scale modifiers added: ‘stretch’, ‘random variance’, ‘mode’\n* Users can now input `n\\m` to specify n steps out of m-EDO\n* When generating a rank-2 temperament, display the scale sizes which are MOS\n* Improve UI for user input, using custom modals instead of JS prompts\n* Code refactored to reduce the amount of duplication\n* Code is now split up over various js files so it's easier to navigate\n* Change logo/favicon to square shape\n\n### 0.6\n\n* Generate rank-2 temperaments\n\n### 0.5\n\n* Fix incorrect base frequency when exporting TUN format and NI Kontakt format\n* Export Scala .kbm format\n\n### 0.4\n\n* All dependencies (Bootstrap, jQuery etc.) now included in scaleworkshop directory\n* Import Scala .scl format\n* Export Scala .scl format\n* Export AnaMark TUN format\n* Export Native Instruments Kontakt script format\n* Export Max/MSP coll format\n\n### 0.3\n\n* Generate equal-tempered tuning\n* Generate harmonic series segment tuning\n* Generate subharmonic series segment tuning\n\n### 0.2\n\n* Allow tuning data input to be parsed into a frequency table\n\n### 0.1\n\n* Initial version\n\n\n## Contributors\n\n* Sevish\n* Scott Thompson\n* Lajos Mészáros\n* Carl Lumma\n* Tobia\n* Vincenzo Sicurella\n* Azorlogh\n\n\n## License\n\nCopyright (c) 2017-2019 Sean Archibald\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "dev/docs/stack.md",
    "content": "# Stack\n\n## Client\n\n- Bootstrap 3.3.7 - https://getbootstrap.com/docs/3.3/\n- jQuery 3.2.1 - https://api.jquery.com/\n- jQuery UI 1.12.1 - https://jqueryui.com/\n- Ramda 0.27.1 - https://ramdajs.com/docs/\n- JSZip 3.2.1 - http://stuartk.com/jszip\n\n## Testing\n\n- Mocha - https://mochajs.org/\n- Expect - https://jestjs.io/docs/expect\n"
  },
  {
    "path": "dev/test/helpers.spec.js",
    "content": "/* global describe, it, expect */\n\ndescribe(\"helpers.js\", () => {\n  describe(\"roundToNDecimals\", () => {\n    it(\"takes 2 numbers and returns a number\", () => {\n      expect(typeof roundToNDecimals(1, 2)).toBe(\"number\");\n    });\n    it(\"rounds the second number to the precision of first number\", () => {\n      expect(roundToNDecimals(3, 5.256846549)).toBe(5.257);\n    });\n    it(\"returns NaN, when non-numeric parameters were given\", () => {\n      expect(roundToNDecimals(1, [\"foo\", 5, \"bar\"])).toBeNaN();\n      expect(roundToNDecimals(\"cat\", 1.25)).toBeNaN();\n    });\n  });\n\n  describe(\"logModulo\", () => {\n    it(\"takes 2 numbers and returns a number\", () => {\n      expect(typeof logModulo(3, 2)).toBe(\"number\");\n    });\n    it(\"returns the exponential modulus of the first number based in the second number\", () => {\n      expect(logModulo(2/3, 2)).toBe(4/3);\n      expect(logModulo(45/7, 1.5)).toBe(1.26984126984127);\n    });\n    it(\"returns NaN, when non-numeric parameters were given\", () => {\n      expect(logModulo(1, \"foo\")).toBeNaN();\n      expect(logModulo(\"cat\", 1.25)).toBeNaN();\n    });\n    it(\"returns NaN, when first number is 0\", () => {\n      expect(logModulo(0, 2)).toBeNaN();\n    });\n    it(\"returns NaN, when modulus is 0 or 1\", () => {\n      expect(logModulo(2, 0)).toBeNaN();\n      expect(logModulo(2, 1)).toBeNaN();\n    });\n  });\n\n  describe(\"isCent\", () => {\n    it(\"returns false, when given input is not a string\", () => {\n      expect(isCent(6.52)).toBe(false);\n      expect(isCent([1, 2, 3])).toBe(false);\n    });\n    it(\"returns true, when given string is a floating point number\", () => {\n      expect(isCent(\"127.052\")).toBe(true);\n    });\n    it(\"returns true, when given string has a dot, but doesn't have any decimals written\", () => {\n      expect(isCent(\"150.\")).toBe(true);\n    });\n    it(\"returns true when given string contains whitespace around the number\", () => {\n      expect(isCent(\"700.0     \")).toBe(true);\n      expect(isCent(\"         700.0\")).toBe(true);\n      expect(isCent(\"      700.0   \\t\")).toBe(true);\n    });\n    it(\"returns false, when given string contains multiple numbers\", () => {\n      expect(isCent(\"700. 500.\")).toBe(false);\n    });\n    it(\"returns false, when the float in the given string contains whitespaces\", () => {\n      expect(isCent(\"3.   141592\")).toBe(false);\n    });\n    it(\"returns false, when given string contains no numbers\", () => {\n      expect(isCent(\"hello\")).toBe(false);\n      expect(isCent(\"// this is a comment\")).toBe(false);\n      expect(isCent(\"\")).toBe(false);\n      expect(isCent(\"      \")).toBe(false);\n    });\n    it(\"returns true, when negative\", () => {\n      expect(isCent(\"-100.0\")).toBe(true);\n    });\n  });\n\n  describe(\"isCommaDecimal\", () => {\n    it(\"returns false, when given input is not a string\", () => {\n      expect(isCommaDecimal(6.52)).toBe(false);\n      expect(isCommaDecimal([1, 2, 3])).toBe(false);\n    });\n    it(\"returns false, when given string is a standard floating point number\", () => {\n      expect(isCommaDecimal(\"12.34\")).toBe(false);\n    });\n    it(\"returns true, when given string is a floating point number, but with a comma replacing a point\", () => {\n      expect(isCommaDecimal(\"127,052\")).toBe(true);\n    });\n    it(\"returns true, when given string has a comma, but doesn't have any decimals written\", () => {\n      expect(isCommaDecimal(\"150,\")).toBe(true);\n    });\n    it(\"returns true when given string contains whitespace around the number\", () => {\n      expect(isCommaDecimal(\"700,0     \")).toBe(true);\n      expect(isCommaDecimal(\"         700,0\")).toBe(true);\n      expect(isCommaDecimal(\"      700,0   \\t\")).toBe(true);\n    });\n    it(\"returns false, when given string contains multiple numbers\", () => {\n      expect(isCommaDecimal(\"700, 500,\")).toBe(false);\n    });\n    it(\"returns false, when the float in the given string contains whitespaces\", () => {\n      expect(isCommaDecimal(\"3,   141592\")).toBe(false);\n    });\n    it(\"returns false, when given string contains no numbers\", () => {\n      expect(isCommaDecimal(\"hello\")).toBe(false);\n      expect(isCommaDecimal(\"// this is a comment\")).toBe(false);\n      expect(isCommaDecimal(\"\")).toBe(false);\n      expect(isCommaDecimal(\"      \")).toBe(false);\n    });\n  });\n\n  describe(\"isNOfEdo\", () => {\n    it(\"returns true, when given input is negative\", () => {\n      expect(isNOfEdo(\"-10\\\\12\")).toBe(true);\n    });\n  });\n\n  describe(\"isNegativeInterval\", () => {\n    it(\"returns false if input is a nonnegative ratio or decimal\", () => {\n      expect(isNegativeInterval(\"3/2\")).toBe(false);\n      expect(isNegativeInterval(\"1,5\")).toBe(false);\n      expect(isNegativeInterval(\"1/2\")).toBe(false);\n      expect(isNegativeInterval(\"0,5\")).toBe(false);\n    });\n    it(\"returns false if cents or N of EDO is positive\", () => {\n      expect(isNegativeInterval(\"1200.0\")).toBe(false);\n      expect(isNegativeInterval(\"1\\\\12\")).toBe(false);\n    });\n    it(\"returns true if cents or N of EDO evaluates to a negative number\", () => {\n      expect(isNegativeInterval(\"-1200.0\")).toBe(true);\n      expect(isNegativeInterval(\"-1\\\\12\")).toBe(true);\n    });\n    it(\"returns LINE_TYPE.INVALID if ratio, decimal, or N of EDO denominator is negative\", () => {\n      expect(isNegativeInterval(\"-2/1\")).toBe(LINE_TYPE.INVALID);\n      expect(isNegativeInterval(\"2/-1\")).toBe(LINE_TYPE.INVALID);\n      expect(isNegativeInterval(\"-1,5\")).toBe(LINE_TYPE.INVALID);\n    });\n    it(\"returns LINE_TYPE.INVALID on invalid input\", () => {\n      expect(isNegativeInterval(\"1\\\\-12\")).toBe(LINE_TYPE.INVALID);\n      expect(isNegativeInterval(\"2-3\")).toBe(LINE_TYPE.INVALID);\n      expect(isNegativeInterval(\"foo\")).toBe(LINE_TYPE.INVALID);\n      expect(isNegativeInterval([1, 2, 3])).toBe(LINE_TYPE.INVALID);\n      expect(isNegativeInterval(NaN)).toBe(LINE_TYPE.INVALID);\n      expect(isNegativeInterval()).toBe(LINE_TYPE.INVALID);\n    });\n  })\n\n  describe(\"sum_array\", () => {\n    it(\"takes an array of numbers and returns a number\", () => {\n      expect(typeof sum_array([1, 2, 3, 4])).toBe(\"number\");\n    });\n    it(\"sums the numbers in an array\", () => {\n      expect(sum_array([1, 2, 3, 4])).toBe(10);\n    });\n    it(\"sums the numbers in an array up to a stopping index\", () => {\n      expect(sum_array([1, 2, 3, 4], 3)).toBe(6);\n    });\n    it(\"returns NaN, when array contains non-numeric values\", () => {\n      expect(sum_array([1, \"foo\"])).toBeNaN();\n    });\n  });\n\n  describe(\"rotate\", () => {\n    it(\"shifts the values of an array, with wrapping indicies\", () => {\n      expect(rotate([0, \"foo\", \"bar\", 1], 5)).toEqual([1, 0, \"foo\", \"bar\"]);\n      expect(rotate([0, \"foo\", \"bar\", 1], -5)).toEqual([\"foo\", \"bar\", 1, 0]);\n    });\n  });\n\n  describe(\"get_cf\", () => {\n    it(\"takes a number and calculates it's continued fraction representation\", () => {\n      expect(get_cf(1.25)).toEqual([1, 4]);\n      expect(get_cf(1 / 3)).toEqual([0, 3]);\n      expect(get_cf(Math.sqrt(2), 4)).toEqual([1, 2, 2, 2]);\n      expect(get_cf(Decimal.acos(-1))).toEqual([3, 7, 15, 1, 292, 1, 1, 1, 2, 1, 3, 1, 14, 2, 1]);\n    });\n    it(\"returns an array containing zero if set to 0 iterations\", () => {\n      expect(get_cf(1, 0)).toEqual([0]);\n    });\n    it(\"round significant digits down to 0 if they are below a given precision\", () => {\n      expect(get_cf(1 + 1e-7, 4, 6)).toEqual([1]);\n      expect(get_cf(Decimal.acos(-1), 15, 2)).toEqual([3, 7, 15, 1]);\n    });\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(get_cf(\"foo\")).toBeNaN();\n    });\n  });\n\n  describe(\"get_convergent\", () => {\n    it(\"takes an array of numbers representing a continued fraction and returns a ratio in its convergent series\", () => {\n      expect(get_convergent([3])).toEqual(\"3/1\");\n      expect(get_convergent([1, 1, 1])).toEqual(\"3/2\");\n      expect(get_convergent([1, 2, 10])).toEqual(\"31/21\");\n      expect(get_convergent(get_cf(Decimal.acos(-1)), 3)).toEqual(\"333/106\");\n    });\n    it (\"returns a whole number fraction if given a number instead of a continued fraction\", () => {\n      expect(get_convergent(2)).toBe(\"2/1\");\n      expect(get_convergent(0)).toBe(\"0/1\");\n    })\n    it(\"returns NaN if the given array contains a non-numerical value\", () => {\n      expect(get_convergent([1, \"foo\"])).toBeNaN();\n      expect(get_convergent(NaN)).toBeNaN();\n    });\n  })\n\n  describe(\"decimal_to_ratio\", () => {\n    it(\"takes a decimal value and returns a ratio\", () => { \n      // expect(decimal_to_ratio(0)).toBe(\"0/1\");\n      expect(decimal_to_ratio(\"1.5\")).toBe(\"3/2\");\n      expect(decimal_to_ratio(1 / 3)).toBe(\"1/3\");\n      expect(decimal_to_ratio(Decimal.acos(-1))).toBe(\"245850922/78256779\");\n    });\n    it (\"takes a commadecimal value and returns a ratio\", () => {\n      expect(decimal_to_ratio(\"1,3\")).toBe(\"13/10\");\n    });\n    it(\"parses the ratio with given a given depth\", () => {\n      expect(decimal_to_ratio(Decimal.acos(-1), 1)).toBe(\"3/1\");\n      expect(decimal_to_ratio(Decimal.acos(-1), 2)).toBe(\"22/7\");\n      expect(decimal_to_ratio(Decimal.acos(-1), 3)).toBe(\"333/106\");\n    });\n    it(\"returns false if the given value is not a valid LINE_TYPE.DECIMAL\", () => {\n      expect(decimal_to_ratio(\"foo\")).toBe(false);\n    });\n  });\n\n  describe(\"cents_to_ratio\", () => {\n    it(\"takes a cents value and returns its ratio representation as a string\", () => {\n      // expect(decimal_to_ratio(0)).toBe(\"0/1\");\n      expect(cents_to_ratio(\"1200.0\")).toBe(\"2/1\");\n      expect(cents_to_ratio(701.955)).toBe(\"3/2\");\n      expect(cents_to_ratio(0.0)).toBe(\"1/1\");\n      expect(cents_to_ratio(\"-498.045\")).toBe(\"3/4\");\n    });\n    it(\"parses the ratio with given a given depth\", () => {\n      expect(cents_to_ratio(700.0, 2)).toBe(\"3/2\");\n      expect(cents_to_ratio(550.0, 4)).toBe(\"11/8\");\n      expect(cents_to_ratio(833.0903, 6)).toBe(\"13/8\");\n    });\n    it(\"returns false if the given value is not a valid LINE_TYPE.CENTS\", () => {\n      expect(cents_to_ratio(\"foo\")).toBe(false);\n    });\n  });\n\n  describe(\"n_of_edo_to_ratio\", () => {\n    it(\"takes an N of EDO value and returns its ratio representation as a string\", () => {\n      expect(n_of_edo_to_ratio(\"0\\\\1\")).toBe(\"1/1\");\n      expect(n_of_edo_to_ratio(\"3\\\\3\")).toBe(\"2/1\");\n      expect(n_of_edo_to_ratio(\"13\\\\31\")).toBe(\"1940489/1451018\");\n      expect(n_of_edo_to_ratio(\"50\\\\72\")).toBe(\"5193/3209\");\n      //expect(n_of_edo_to_ratio(\"-24\\\\12\")).toBe(\"1/4\");\n    });\n    it(\"parses the ratio with given a given depth\", () => {\n      expect(n_of_edo_to_ratio(\"13\\\\31\", 2)).toBe(\"3/2\");\n      expect(n_of_edo_to_ratio(\"1\\\\2\", 3)).toBe(\"7/5\");\n      expect(n_of_edo_to_ratio(\"50\\\\72\", 6)).toBe(\"13/8\");\n    });\n    it(\"returns false if the given value is not a valid LINE_TYPE.N_OF_EDO\", () => {\n      expect(n_of_edo_to_ratio(\"foo\")).toBe(false);\n    });\n    //it(\"return NaN when divisor is 0\")\n  });\n\n  describe(\"getGCD\", () => {\n    it(\"returns the largest factor of both numbers given\", () => {\n      expect(getGCD(3, 12)).toBe(\"3\");\n      expect(getGCD(7, 19)).toBe(\"1\");\n      expect(getGCD(17, 51)).toBe(\"17\");\n      expect(getGCD(\"116825103759765625\", \"12971141321962887\")).toBe(\"7\")\n    });\n    it(\"returns NaN if a non-numerical value is given\", () => {\n      expect(getGCD(1, \"foo\")).toBeNaN();\n    });\n    it(\"returns the largest number if 0 is an argument\", () => {\n      expect(getGCD(0, 4)).toBe(\"4\");\n    });\n    it(\"returns a positive integer regardless of input signs\", () => {\n      expect(getGCD(-1, -1)).toBe(\"1\");\n      expect(getGCD(-21, 15)).toBe(\"3\");\n      expect(getGCD(-4, 20)).toBe(\"4\");\n    });\n  });\n\n  describe(\"ratioIsValid\", () => {\n    it(\"returns true with a well-formed positive or negative integer ratio\", () => {\n      expect(ratioIsValid(\"1/2\")).toBe(true);\n      expect(ratioIsValid(\"-1/2\")).toBe(true);\n      expect(ratioIsValid(\"1/2\")).toBe(true);\n      expect(ratioIsValid(\"116825103759765625/12971141321962887\")).toBe(true);\n    });\n    it('returns false if it contains a non-integer value', () => {\n      expect(ratioIsValid(\"foo\")).toBe(false);\n      expect(ratioIsValid(\"foo/5\")).toBe(false);\n      expect(ratioIsValid(\"5/bar\")).toBe(false);\n      expect(ratioIsValid(\"2.3/5.8\")).toBe(false);\n      expect(ratioIsValid(\"4\")).toBe(false);\n    });\n    it('returns false if the denominator is 0', () => {\n      expect(ratioIsValid(\"1/0\")).toBe(false);\n    });\n  });\n\n  describe(\"ratioIsSafe\", () => {\n    it(\"returns true if ratio integers are 20 digits or below\", () => {\n      expect(ratioIsSafe(\"3/2\")).toBe(true);\n      expect(ratioIsSafe(\"123456789012345678799/1\")).toBe(true);\n      expect(ratioIsSafe(\"100/123456789012345678799\")).toBe(true);\n    });\n    it(\"returns false if ratio integers are above 20 digits\", () => {\n      expect(ratioIsSafe(\"4722366482869645213696/1\")).toBe(false);\n      expect(ratioIsSafe(\"1/4722366482869645213696\")).toBe(false);\n    })\n  });\n\n  // Use different values from transposeSelf?\n  describe(\"powRatio\", () => {\n    it(\"returns a ratio to the given power\", () => {\n      expect(powRatio(\"3/2\", 3)).toBe(\"27/8\");\n      expect(powRatio(\"5/3\", 23)).toBe(\"11920928955078125/94143178827\");\n      expect(powRatio(\"2/1\", -2)).toBe(\"1/4\");\n      expect(powRatio(\"1/2\", -2)).toBe(\"4/1\");\n    });\n    it(\"returns cents if a ratio integer exceeds 20 places\", () => {\n      expect(powRatio(\"3/2\", 72)).toBe(\"50540.760062\");\n    });\n    it(\"returns unison if power is 0\", () => {\n      expect(powRatio(\"3/2\", 0)).toBe(\"1/1\");\n    });\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(powRatio(\"foo\", 1)).toBeNaN();\n      expect(powRatio(\"2/1\", \"foo\")).toBeNaN();\n    });\n  });\n\n  describe(\"simplifyRatio\", () => {\n    it(\"returns a reduced ratio string given a ratio string\", () => {\n      expect(simplifyRatio(\"2/4\")).toBe(\"1/2\");\n      expect(simplifyRatio(\"17/51\")).toBe(\"1/3\");\n      expect(simplifyRatio(\"0/100\")).toBe(\"0/1\");\n    });\n    it(\"returns a negative numerator if computed value is negative\", () => {\n      expect(simplifyRatio(\"4/-4\")).toBe(\"-1/1\");\n      expect(simplifyRatio(\"-4/4\")).toBe(\"-1/1\");\n    });\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(simplifyRatio(\"foo\")).toBeNaN();\n    });\n    it(\"returns NaN if given a denominator of 0\", () => {\n      expect(simplifyRatio(\"1/0\")).toBeNaN();\n    });\n  });\n\n  describe(\"periodReduceRatio\", () => {\n    it(\"takes two ratios, representing an interval and period, and returns the first ratio reduced between 1 and the second ratio\", () => {\n      expect(periodReduceRatio(\"1/1\", \"3/2\")).toBe(\"1/1\");\n      expect(periodReduceRatio(\"9/1\", \"2/1\")).toBe(\"9/8\");\n      expect(periodReduceRatio(\"3/2\", \"3/2\")).toBe(\"1/1\");\n      expect(periodReduceRatio(\"5/4\", \"16/15\")).toBe(\"16875/16384\");\n      expect(periodReduceRatio(\"3/4\", \"3/2\")).toBe(\"9/8\");\n      expect(periodReduceRatio(\"16677181699666569/17179869184\", \"2/1\")).toBe(\"16677181699666569/9007199254740992\");\n    });\n    it(\"returns cents if a ratio integer exceeds 20 places\", () => {\n      expect(periodReduceRatio(\"22528399544939174411840147874772641/4722366482869645213696\", \"2/1\")).toBe(\"140.760062\");\n      expect(periodReduceRatio(\"444141444444/222211123134124\", \"1770695989828143/1124948488149\")).toBe(\"1984.254914\")\n    })\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(periodReduceRatio(\"foo\", \"2/1\")).toBeNaN();\n      expect(periodReduceRatio(\"1/1\", \"foo\")).toBeNaN();\n    });\n    it(\"returns NaN if given a denominator of 0\", () => {\n      expect(periodReduceRatio(\"1/0\", \"2/1\")).toBeNaN();\n      expect(periodReduceRatio(\"1/1\", \"1/0\")).toBeNaN();\n    });\n    it(\"returns NaN if a ratio is 0\", () => {\n      expect(periodReduceRatio(\"0/1\", \"2/1\")).toBeNaN();\n      expect(periodReduceRatio(\"2/1\", \"0/1\")).toBeNaN();\n    });\n    it(\"returns NaN if the mod ratio is 0 or 1\", () => {\n      expect(periodReduceRatio(\"2/1\", \"0/1\")).toBeNaN();\n      expect(periodReduceRatio(\"2/1\", \"1/1\")).toBeNaN();\n    });\n  });\n\n  describe(\"transposeRatios\", () => {\n    it(\"takes two ratios and returns their simplified product\", () => {\n      expect(transposeRatios(\"1/1\", \"3/2\")).toBe(\"3/2\");\n      expect(transposeRatios(\"3/2\", \"3/2\")).toBe(\"9/4\");\n      expect(transposeRatios(\"5/4\", \"16/15\")).toBe(\"4/3\");\n      expect(transposeRatios(\"9008000000000001/8675309000000001\", \"17/16\")).toBe(\"51045333333333339/46268314666666672\");\n    });\n    it(\"returns cents if a ratio integer exceeds 20 places\", () => {\n      expect(transposeRatios(\"22528399544939174411840147874772641/4722366482869645213696\", \"5/191581231380566414401\")).toBe(\"-27524.747979\")\n      expect(transposeRatios(\"5/191581231380566414401\", \"22528399544939174411840147874772641/4722366482869645213696\")).toBe(\"-27524.747979\")\n    });\n    // it(\"returns a negative numerator if computed value is negative\", () => {\n    //   expect(simplifyRatioString(\"4/-4\")).toBe(\"-1/1\");\n    //   expect(simplifyRatioString(\"-4/4\")).toBe(\"-1/1\");\n    // });\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(transposeRatios(\"foo\")).toBeNaN();\n    });\n    it(\"returns NaN if given a denominator of 0\", () => {\n      expect(transposeRatios(\"1/0\")).toBeNaN();\n    });\n  });\n\n  describe(\"transposeNOfEdos\", () => {\n    it(\"takes two n-of-EDO values and returns their sum\", () => {\n      expect(transposeNOfEdos(\"1\\\\12\", \"1\\\\12\")).toBe(\"2\\\\12\");\n      expect(transposeNOfEdos(\"12\\\\22\", \"-3\\\\22\")).toBe(\"9\\\\22\");\n      expect(transposeNOfEdos(\"1\\\\5\", \"1\\\\7\")).toBe(\"12\\\\35\");\n      expect(transposeNOfEdos(\"3\\\\8\", \"5\\\\12\")).toBe(\"19\\\\24\");\n    });\n    // it(\"returns a negative numerator if computed value is negative\", () => {\n    //   expect(transposeNOfEdos(\"4/-4\")).toBe(\"-1/1\");\n    //   expect(transposeNOfEdos(\"-4/4\")).toBe(\"-1/1\");\n    // });\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(transposeNOfEdos(\"foo\")).toBeNaN();\n    });\n    it(\"returns NaN if given a denominator of 0\", () => {\n      expect(transposeNOfEdos(\"1/0\")).toBeNaN();\n    });\n  });\n\n  describe(\"transposeLine\", () => {\n    it(\"takes two generic interval values and returns their combination, preserving the first interval type when possible\", () => {\n      expect(transposeLine(\"100.0\", \"200.0\")).toBe(\"300.000000\");\n      expect(transposeLine(\"100.0\", \"7\\\\12\")).toBe(\"800.000000\");\n      expect(transposeLine(\"100.0\", \"4/3\")).toBe(\"598.044999\");\n      expect(transposeLine(\"100.0\", \"1,25\")).toBe(\"486.313714\");\n      expect(transposeLine(\"1\\\\12\", \"1\\\\6\")).toBe(\"3\\\\12\");\n      expect(transposeLine(\"12\\\\12\", \"2,0\")).toBe(\"24\\\\12\");\n      expect(transposeLine(\"1,25\", \"1,3\")).toBe(\"1,625000\");\n      expect(transposeLine(\"1,25\", \"13/10\")).toBe(\"1,625000\");\n      expect(transposeLine(\"1,25\", \"300.0\")).toBe(\"1,486509\");\n      expect(transposeLine(\"1,25\", \"1\\\\4\")).toBe(\"1,486509\");\n      expect(transposeLine(\"3/2\", \"4/3\")).toBe(\"2/1\");\n      expect(transposeLine(\"4/3\", \"1,5\")).toBe(\"2/1\");\n      expect(transposeLine(\"9008000000000001/8675309000000001\", \"5/2\")).toBe(\"15013333333333335/5783539333333334\");\n      expect(transposeLine(\"9008000000000001/8675309000000001\", \"1,5\")).toBe(\"9008000000000001/5783539333333334\");\n    });\n    it(\"transposes downward with a negative cents or N Of EDO transposer\", () => {\n      expect(transposeLine(\"300.0\", \"-100.0\")).toBe(\"200.000000\");\n      expect(transposeLine(\"1\\\\4\", \"-100.0\")).toBe(\"200.000000\");\n      expect(transposeLine(\"3/1\", \"-1200.0\")).toBe(\"3/2\");\n      expect(transposeLine(\"3,0\", \"-1200.0\")).toBe(\"1,500000\");\n      expect(transposeLine(\"300.0\", \"-1\\\\12\")).toBe(\"200.000000\");\n      expect(transposeLine(\"1\\\\4\", \"-1\\\\12\")).toBe(\"2\\\\12\");\n      expect(transposeLine(\"3/1\", \"-12\\\\12\")).toBe(\"3/2\");\n      expect(transposeLine(\"3,0\", \"-12\\\\12\")).toBe(\"1,500000\");\n    });\n    it(\"allows for negative cents & N Of Edos when transposed below unison\", () => {\n      expect(transposeLine(\"100.0\", \"1/2\")).toBe(\"-1100.000000\");\n      expect(transposeLine(\"100.0\", \"0,5\")).toBe(\"-1100.000000\");\n      expect(transposeLine(\"100.0\", \"-12\\\\12\")).toBe(\"-1100.000000\");\n      expect(transposeLine(\"100.0\", \"-1200.0\")).toBe(\"-1100.000000\");\n      expect(transposeLine(\"1\\\\12\", \"1/2\")).toBe(\"-11\\\\12\");\n      expect(transposeLine(\"1\\\\12\", \"0,5\")).toBe(\"-11\\\\12\");\n      expect(transposeLine(\"1\\\\12\", \"-12\\\\12\")).toBe(\"-11\\\\12\");\n      expect(transposeLine(\"1\\\\12\", \"-1200.0\")).toBe(\"-11\\\\12\");\n    });\n    it(\"preserves decimal if combined with N of EDO\", () => {\n      expect(transposeLine(\"12\\\\12\", \"1,5\")).toBe(\"3,000000\");\n      expect(transposeLine(\"1\\\\12\", \"1,5\")).toBe(\"1,589195\");\n    });\n    it(\"returns cents if N of EDO is combined with cents or ratio\", () => {\n      expect(transposeLine(\"1\\\\12\", \"3/2\")).toBe(\"801.955001\");\n      expect(transposeLine(\"1\\\\12\", \"700.0\")).toBe(\"800.000000\");\n    });\n    it (\"returns cents when a ratio is combined with N of EDO or cents\", () => {\n      expect(transposeLine(\"2/1\", \"1\\\\12\")).toBe(\"1300.000000\");\n      expect(transposeLine(\"2/1\", \"700.0\")).toBe(\"1900.000000\");\n      expect(transposeLine(\"9008000000000000/8675309000000001\", \"700.0\")).toBe(\"765.150019\");\n      expect(transposeLine(\"9008000000000000/8675309000000001\", \"7\\\\12\")).toBe(\"765.150019\");\n    });\n    it(\"returns cents if a ratio integer exceeds 20 places\", () => {\n      expect(transposeLine(\"22528399544939174411840147874772641/4722366482869645213696\", \"5/191581231380566414401\")).toBe(\"-27524.747979\");\n      expect(transposeLine(\"5/191581231380566414401\", \"22528399544939174411840147874772641/4722366482869645213696\")).toBe(\"-27524.747979\");\n      expect(transposeLine(\"22528399544939174411840147874772641/4722366482869645213696\", \"3,2\")).toBe(\"52554.446348\");\n      expect(transposeLine(\"22528399544939174411840147874772641/20769187434139310514121985316880384\", \"60.0\")).toBe(\"200.760062\");\n      expect(transposeLine(\"22528399544939174411840147874772641/4722366482869645213696\", \"7\\\\12\")).toBe(\"51240.760062\");\n    });\n    // it(\"returns a negative numerator if computed value is negative\", () => {\n    //   expect(transposeLine(\"4/-4\")).toBe(\"-1/1\");\n    //   expect(transposeLine(\"-4/4\")).toBe(\"-1/1\");\n    // });\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(transposeLine(\"foo\")).toBeNaN();\n    });\n    it(\"returns NaN if given a denominator of 0\", () => {\n      expect(transposeLine(\"1/0\")).toBeNaN();\n    });\n    it(\"returns 1,0 if transposing a commadecimal by its negation\", () => {\n      expect(transposeLine(\"2,0\", negateLine(\"2,0\"))).toBe(\"1,000000\");\n    });\n  });\n\n  describe(\"transposeSelf\", () => {\n    it(\"returns the interval produced from stacking itself a number of times \", () => {\n      expect(transposeSelf(\"100.0\", 3)).toBe(\"300.000000\");\n      expect(transposeSelf(\"3/2\", 3)).toBe(\"27/8\");\n      expect(transposeSelf(\"1,5\", 2)).toBe(\"2,250000\");\n      expect(transposeSelf(\"3\\\\31\", 2)).toBe(\"6\\\\31\");\n      expect(transposeSelf(\"5/3\", 23)).toBe(\"11920928955078125/94143178827\");\n    });\n    it(\"returns cents if a ratio integer exceeds 20 places\", () => {\n      expect(transposeSelf(\"3/2\", 72)).toBe(\"50540.760062\");\n    });\n    it(\"returns unison if stacked 0 times\", () => {\n      expect(transposeSelf(\"100.0\", 0)).toBe(\"0.000000\");\n      expect(transposeSelf(\"3/2\", 0)).toBe(\"1/1\");\n      expect(transposeSelf(\"1,5\", 0)).toBe(\"1,000000\");\n      expect(transposeSelf(\"3\\\\31\", 0)).toBe(\"0\\\\31\");\n    });\n    it(\"returns an inverted interval if transposed a negative amount of times\", () => {\n      expect(transposeSelf(\"123.4\", -2)).toBe(\"-246.800000\");\n      expect(transposeSelf(\"-100.0\", -2)).toBe(\"200.000000\");\n      expect(transposeSelf(\"2/1\", -2)).toBe(\"1/4\");\n      expect(transposeSelf(\"1/2\", -2)).toBe(\"4/1\");\n      expect(transposeSelf(\"1,25\", -2)).toBe(\"0,640000\");\n      expect(transposeSelf(\"0,5\", -2)).toBe(\"4,000000\");\n      expect(transposeSelf(\"19\\\\31\", -2)).toBe(\"-38\\\\31\");\n      expect(transposeSelf(\"-3\\\\31\", -2)).toBe(\"6\\\\31\");\n    })\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(transposeSelf(\"foo\", 1)).toBeNaN();\n      expect(transposeSelf(\"2/1\", \"foo\")).toBeNaN();\n    });\n  });\n\n  describe(\"moduloLine\", () => {\n    it(\"returns the remaining interval when multiples of the modulo value are removed from the line interval, retaining line's type if possible\", () => {\n      expect(moduloLine(\"100.0\", \"1200.0\")).toBe(\"100.000000\");\n      expect(moduloLine(\"1300.0\", \"1200.0\")).toBe(\"100.000000\");\n      expect(moduloLine(\"100.0\", \"7\\\\12\")).toBe(\"100.000000\");\n      expect(moduloLine(\"800.0\", \"7\\\\12\")).toBe(\"100.000000\");\n      expect(moduloLine(\"1300.0\", \"2/1\")).toBe(\"100.000000\");\n      expect(moduloLine(\"1300.0\", \"2,0\")).toBe(\"100.000000\");\n      expect(moduloLine(\"8\\\\12\", \"11\\\\12\")).toBe(\"8\\\\12\");\n      expect(moduloLine(\"61\\\\12\", \"1200.0\")).toBe(\"1\\\\12\");\n      expect(moduloLine(\"61\\\\12\", \"2/1\")).toBe(\"1\\\\12\");\n      expect(moduloLine(\"61\\\\12\", \"2,0\")).toBe(\"1\\\\12\");\n      expect(moduloLine(\"1,25\", \"1,3\")).toBe(\"1,250000\");\n      expect(moduloLine(\"1,5\", \"1,25\")).toBe(\"1,200000\");\n      expect(moduloLine(\"3,0\", \"1200.0\")).toBe(\"1,500000\");\n      expect(moduloLine(\"3,0\", \"12\\\\12\")).toBe(\"1,500000\");\n      expect(moduloLine(\"3,0\", \"2/1\")).toBe(\"1,500000\");\n      expect(moduloLine(\"1,7\", \"3/2\")).toBe(\"1,133333\");\n      expect(moduloLine(\"12/8\", \"4/3\")).toBe(\"9/8\");\n      expect(moduloLine(\"3/1\", \"2,0\")).toBe(\"3/2\");\n      expect(moduloLine(\"3/1\", \"1200.0\")).toBe(\"3/2\");\n      expect(moduloLine(\"3/1\", \"12\\\\12\")).toBe(\"3/2\");\n      expect(moduloLine(\"16677181699666569/17179869184\", \"2/1\")).toBe(\"16677181699666569/9007199254740992\");\n      expect(moduloLine(\"16677181699666569/17179869184\", \"2,0\")).toBe(\"16677181699666569/9007199254740992\");\n      expect(moduloLine(\"22528399544939174411840147874772641/4722366482869645213696\", \"1,5\")).toBe(\"1/1\");\n    });\n    it(\"returns an octave-based interval if number is below unison\", () => {\n      expect(moduloLine(\"0,5\", \"2/1\")).toBe(\"1,000000\");\n      expect(moduloLine(\"2/3\", \"2/1\")).toBe(\"4/3\");\n      expect(moduloLine(\"3/4\", \"3/2\")).toBe(\"9/8\");\n    });\n    it (\"returns a positive interval if the line is negative cents or N of EDO\", () => {\n      expect(moduloLine(\"-100.0\", \"2/1\")).toBe(\"1100.000000\");\n      expect(moduloLine(\"-3\\\\7\", \"2/1\")).toBe(\"4\\\\7\");\n    });\n    it(\"returns LCM EDO if two N of EDOs are combined\", () => {\n      expect(moduloLine(\"8\\\\12\", \"3\\\\6\")).toBe(\"2\\\\12\");\n      expect(moduloLine(\"4\\\\5\", \"3\\\\7\")).toBe(\"13\\\\35\");\n    });\n    it(\"returns decimal if combined with N of EDO\", () => {\n      expect(moduloLine(\"1\\\\12\", \"1,5\")).toBe(\"1,059463\");\n      expect(moduloLine(\"9\\\\12\", \"1,5\")).toBe(\"1,121195\");\n    });\n    it(\"returns cents if N of EDO is combined with cents or ratio\", () => {\n      expect(moduloLine(\"1\\\\12\", \"700.0\")).toBe(\"100.000000\");\n      expect(moduloLine(\"9\\\\12\", \"3/2\")).toBe(\"198.044999\");\n    });\n    it (\"returns cents when a ratio is combined with N of EDO or cents\", () => {\n      expect(moduloLine(\"2/1\", \"1\\\\12\")).toBe(\"0.000000\");\n      expect(moduloLine(\"2/1\", \"700.0\")).toBe(\"500.000000\");\n      expect(moduloLine(\"16677181699666569/17179869184\", \"7\\\\12\")).toBe(\"66.470029\");\n      expect(moduloLine(\"16677181699666569/17179869184\", \"700.0\")).toBe(\"66.470029\");\n    });\n    it(\"returns cents if a ratio integer exceeds 20 places\", () => {\n      expect(moduloLine(\"22528399544939174411840147874772641/4722366482869645213696\", \"2/1\")).toBe(\"140.760062\");\n      expect(moduloLine(\"22528399544939174411840147874772641/4722366482869645213696\", \"1,41421356237\")).toBe(\"140.760063\");\n      expect(moduloLine(\"22528399544939174411840147874772641/4722366482869645213696\", \"1000.0\")).toBe(\"540.760062\");\n      expect(moduloLine(\"22528399544939174411840147874772641/4722366482869645213696\", \"4\\\\31\")).toBe(\"63.340707\");\n    });\n    it(\"returns NaN if the modLine evaluates to a decimal below 1\", () => {\n      expect(moduloLine(\"3/2\", \"1/2\")).toBeNaN();\n      expect(moduloLine(\"3/2\", \"-100.0\")).toBeNaN();\n      expect(moduloLine(\"3/2\", \"-4\\\\7\")).toBeNaN();\n      expect(moduloLine(\"3/2\", \"0,5\")).toBeNaN();\n    });\n    it(\"returns NaN if given a non-numerical value\", () => {\n      expect(moduloLine(\"foo\", \"2/1\")).toBeNaN();\n      expect(moduloLine(\"2/1\", \"foo\")).toBeNaN();\n    });\n  });\n\n});\n"
  },
  {
    "path": "guide.htm",
    "content": "<!--\n  ____            _\n / ___|  ___ __ _| | ___\n \\___ \\ / __/ _` | |/ _ \\\n  ___) | (_| (_| | |  __/\n |____/ \\___\\__,_|_|\\___|\n __        __         _        _\n \\ \\      / /__  _ __| | _____| |__   ___  _ __\n  \\ \\ /\\ / / _ \\| '__| |/ / __| '_ \\ / _ \\| '_ \\\n   \\ V  V / (_) | |  |   <\\__ \\ | | | (_) | |_) |\n    \\_/\\_/ \\___/|_|  |_|\\_\\___/_| |_|\\___/| .__/\n                                          |_|\n-->\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <title>Scale Workshop User Guide</title>\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n  <!-- Open Graph -->\n  <meta property=\"og:title\" content=\"Scale Workshop User Guide\" />\n  <meta property=\"og:type\" content=\"website\" />\n  <meta property=\"og:url\" content=\"https://sevish.com/scaleworkshop/guide.htm\" />\n  <meta property=\"og:image\" content=\"https://sevish.com/scaleworkshop/src/assets/img/scale-workshop-og-image.png\" />\n  <meta property=\"og:description\"\n    content=\"Scale Workshop is a tool that allows you to create microtonal tunings within your web browser. You can export these tunings to your device and use them to tune various synthesizers.\" />\n  <meta property=\"og:site_name\" content=\"Sevish Music\" />\n\n  <!-- Styles -->\n  <link rel=\"stylesheet\" href=\"src/lib/bootstrap-3.3.7-dist/css/bootstrap.min.css\">\n  <link rel=\"stylesheet\" href=\"src/lib/jquery-ui-1.12.1/jquery-ui.min.css\">\n  <link rel=\"stylesheet\" href=\"src/lib/socicon/style.css\">\n\n  <!-- Scripts -->\n  <script src=\"src/lib/jquery-3.2.1.min.js\"></script>\n  <script src=\"src/lib/bootstrap-3.3.7-dist/js/bootstrap.min.js\"></script>\n\n  <!-- Favicon -->\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"src/assets/favicon/apple-touch-icon.png\">\n  <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"src/assets/favicon/favicon-32x32.png\">\n  <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"src/assets/favicon/favicon-16x16.png\">\n  <link rel=\"manifest\" href=\"src/assets/favicon/manifest.json\">\n  <link rel=\"mask-icon\" href=\"src/assets/favicon/safari-pinned-tab.svg\" color=\"#9bd03b\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n\n  <style>\n    body {\n      max-width: 1160px;\n      position: relative;\n    }\n\n    img {\n      max-width: 100%;\n    }\n\n    header,\n    article {\n      padding: 2em 15px;\n    }\n\n    nav {\n      margin-bottom: 2em;\n      padding: 0px 15px;\n    }\n\n    nav a:link {\n      color: unset;\n    }\n\n    nav ul {\n      padding-left: 0px;\n      list-style-type: none;\n      font-weight: bold;\n    }\n\n    nav ul li ul {\n      padding-left: 1em;\n    }\n\n    nav ul li ul li {\n      font-weight: normal;\n    }\n\n    nav .btn {\n      margin-top: 0.5em;\n      width: 100%;\n    }\n\n    h1 {\n      margin-top: 0px;\n      padding-top: 0.8em;\n    }\n\n    h2 {\n      margin-top: 2em;\n      padding-top: 1em;\n    }\n\n    h3 {\n      margin-top: 1em;\n      padding-top: 1em;\n    }\n\n    h4 {\n      margin-top: 1em;\n      padding-top: 1em;\n    }\n\n    header h1 {\n      padding-top: 0.6em;\n    }\n\n    header h2,\n    header h3,\n    header h4 {\n      padding: 0;\n      margin-top: 0;\n    }\n\n    p.lead {\n      clear: both;\n      font-weight: normal;\n    }\n\n    nav a:visited {\n      color: black;\n    }\n\n    #logo {\n      width: 9.5em;\n      max-width: 100%;\n      height: auto;\n      text-align: center;\n      display: block;\n      margin: auto;\n    }\n\n    /* Non-smartphone devices (tablet size and up) */\n    @media (min-width: 768px) {\n\n      header,\n      article {\n        width: calc(100% - 300px);\n        margin-left: 300px;\n      }\n\n      nav {\n        position: fixed !important;\n        width: 300px;\n        height: 100vh;\n        overflow-y: scroll;\n        top: 0px;\n        left: 0px;\n        padding: 2em 15px;\n      }\n\n      img {\n        max-width: 340px;\n        /*margin-left: auto;\n          margin-right: auto;\n          display: block;*/\n      }\n\n      p.lead {\n        font-weight: 300;\n      }\n\n      #logo {\n        float: left;\n        margin: auto 1.5em 1.5em 0px;\n      }\n    }\n  </style>\n\n</head>\n\n<body>\n  <header>\n    <p><img src=\"src/assets/favicon/apple-touch-icon.png\" alt=\"Scale Workshop logo\" id=\"logo\" /></p>\n    <h1>Scale Workshop</h1>\n    <h4>User guide 1.5</h4>\n    <p class=\"lead\">Scale Workshop allows you to design microtonal scales and play them in your web browser. Export your\n      scales for use with VST instruments. Convert Scala files to various tuning formats.</p>\n    <a href=\"#overview\" class=\"sr-only\">Skip to main content</a>\n  </header>\n  <nav id=\"main-nav\">\n    <ul>\n      <li style=\"font-size:1.2em;\"><a href=\"#\">Scale Workshop User Guide</a></li>\n      <li><a href=\"#overview\">Overview</a></li>\n      <li><a href=\"#import-export-tunings\">Import/export tunings</a>\n        <ul>\n          <li><a href=\"#import\">Import</a></li>\n          <li><a href=\"#convert\">Convert</a></li>\n          <li><a href=\"#export\">Export</a>\n            <ul>\n              <li><a href=\"#anamark-tun\">Anamark TUN (.tun)</a></li>\n              <li><a href=\"#scala-scl\">Scala scale (.scl)</a></li>\n              <li><a href=\"#scala-kbm\">Scala keyboard mapping (.kbm)</a></li>\n              <li><a href=\"#maxmsp\">Max/MSP coll (.txt)</a></li>\n              <li><a href=\"#puredata\">PureData text (.txt)</a></li>\n              <li><a href=\"#kontakt\">Kontakt script (.txt)</a></li>\n              <li><a href=\"#soniccouture\">Soniccouture tuning file (.nka)</a></li>\n              <li><a href=\"#harmor\">Harmor Pitch Map (.fnv)</a></li>\n              <li><a href=\"#sytrus\">Sytrus Pitch Map (.fnv)</a></li>\n              <li><a href=\"#korg-logue\">Korg Sound Librarian Scale/Octave (.mnlgtuns/mnlgtuno)</a></li>\n              <li><a href=\"#deflemask\">Deflemask 'fine tune' reference</a></li>\n              <li><a href=\"#reaper-note-names\">Reaper Note Name Map (.txt)</a></li>\n            </ul>\n          </li>\n          <li><a href=\"#presets\">Presets</a></li>\n        </ul>\n      </li>\n      <li><a href=\"#scale-design\">Scale design</a>\n        <ul>\n          <li><a href=\"#equal-temperaments\">Equal temperaments</a></li>\n          <li><a href=\"#rank-2-temperaments\">Rank-2 temperaments</a></li>\n          <li><a href=\"#harmonic-series-segments\">Harmonic series segments</a></li>\n          <li><a href=\"#subharmonic-series-segments\">Subharmonic series segments</a></li>\n          <li><a href=\"#enumerate-chord\">Enumerate chord</a></li>\n          <li><a href=\"#cps\">Combination product set</a></li>\n          <li><a href=\"#manual-data-entry\">Manual data entry</a>\n            <ul>\n              <li><a href=\"#just-intonation\">Just intonation</a></li>\n              <li><a href=\"#equal-temperament\">Equal temperament</a></li>\n              <li><a href=\"#misc\">Misc</a></li>\n            </ul>\n          </li>\n          <li><a href=\"#modify-scales\">Modify scales</a>\n            <ul>\n              <li><a href=\"#sort-ascending\">Sort ascending</a></li>\n              <li><a href=\"#reduce\">Reduce</a></li>\n              <li><a href=\"#rotate\">Rotate</a></li>\n              <li><a href=\"#subset\">Subset</a></li>\n              <li><a href=\"#stretch-compress\">Stretch/compress</a></li>\n              <li><a href=\"#random-variance\">Random variance</a></li>\n              <li><a href=\"#tempo-sync-beating\">Tempo-sync beating</a></li>\n              <li><a href=\"#approximate-by-ratios\">Approximate by ratios</a></li>\n              <li><a href=\"#approximate-by-harmonics\">Approximate by harmonics</a></li>\n              <li><a href=\"#approximate-by-subharmonics\">Approximate by subharmonics</a></li>\n              <li><a href=\"#equalize\">Equalize</a></li>\n            </ul>\n          </li>\n        </ul>\n      </li>\n      <li><a href=\"#synthesizer\">Synthesizer</a>\n        <ul>\n          <li><a href=\"#playing-with-midi\">Playing with a MIDI controller</a></li>\n          <li><a href=\"#playing-with-qwerty\">Playing with QWERTY</a></li>\n          <li><a href=\"#playing-with-touch-screen\">Playing with mouse / touch screen</a></li>\n          <li><a href=\"#isomorphic-mapping\">Isomorphic mapping</a></li>\n          <li><a href=\"#changing-the-sound-of-the-synth\">Changing the sound of the synth</a></li>\n        </ul>\n      </li>\n      <li><a href=\"#midi\">MIDI I/O</a></li>\n      <li><a href=\"#misc-tips\">Misc. tips</a></li>\n    </ul>\n    <a class=\"btn btn-default\" href=\"index.htm\" target=\"_blank\">Launch Scale Workshop</a>\n  </nav>\n\n  <article>\n    <h2 id=\"overview\">Overview</h2>\n    <p class=\"text-center\"><a href=\"src/assets/img/scale-workshop-og-image.png\" target=\"_blank\"><img\n          src=\"src/assets/img/scale-workshop-og-image.png\" style=\"width:100%; max-width:100%;\" /></a></p>\n    <p>The interface is split in to 4 sections.</p>\n    <ul>\n      <li>Top bar: access the main functions of the software</li>\n      <li>Left column: manual entry of scale data</li>\n      <li>Center column: table of tuning data</li>\n      <li>Right column: options and configuration</li>\n    </ul>\n\n    <p>The top bar provides many useful functions.</p>\n    <ul>\n      <li>New: generate a new scale or load one from a file</li>\n      <li>Modify: apply some transformation to a scale that is currently loaded</li>\n      <li>Export: save your work in one of many formats</li>\n      <li>About: about Scale Workshop</li>\n    </ul>\n\n\n    <h2 id=\"import-export-tunings\">Import/export tunings</h2>\n    <h3 id=\"import\">Import</h3>\n    <p>Scale Workshop supports import of <strong>Scala .scl</strong> files, <strong>AnaMark .tun</strong> files and Korg 'logue .mnlgtuns/.mnlgtuno'.\n      Click 'New' on the top menu bar and then click 'Import .scl' or 'Import .tun'</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/menu-new.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/menu-new.png\" /></a></p>\n    <p><strong>Note:</strong> AnaMark .tun import is incomplete, but it should be able to import .tun V2.00 files exported by\n      Scale Workshop and Scala.</p>\n\n    <h3 id=\"convert\">Convert</h3>\n    <p>Convert .scl or convert .tun tunings by importing them and then exporting.</p>\n\n    <h3 id=\"export\">Export</h3>\n    <p>Many synthesizers support microtonal scales. Usually they will require some format of tuning file. Scale Workshop\n      supports many of the popular formats.</p>\n    <p>To see a list of synths that support microtonal scales, see the <a\n        href=\"https://en.xen.wiki/w/List_of_Microtonal_Software_Plugins\" target=\"_blank\">List of Microtonal Software\n        Plugins</a> on the Xenharmonic Wiki.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/menu-export.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/menu-export.png\" /></a></p>\n\n    <h4 id=\"anamark-tun\">AnaMark TUN (.tun)</h4>\n    <p>If your synth supports .tun format, then please refer to its manual to find how to load the .tun file.</p>\n\n    <h4 id=\"scala-scl\">Scala scale (.scl)</h4>\n    <p>If your synth supports .scl format, then please refer to its manual to find how to load the .scl file.</p>\n\n    <h4 id=\"scala-kbm\">Scala keyboard mapping (.kbm)</h4>\n    <p>Scale Workshop does not support arbitrary keyboard mappings, however it can output a .kbm file with linear\n      mapping that has your chosen base MIDI note and base frequency.</p>\n\n    <h4 id=\"maxmsp\">Max/MSP coll (.txt)</h4>\n    <p>When building synths in Max/MSP try using a coll object rather than an mtof object. Coll can load a\n      specially-formatted text file containing a list of frequencies. Scale Workshop exports this kind of text file for\n      you. Set up your coll object as below, and click the 'read' button to bring up a load file dialog.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/maxmsp-coll.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/maxmsp-coll.png\" /></a></p>\n    <p>Then when you input MIDI note numbers to the coll object, it will output the desired frequency.</p>\n\n    <h4 id=\"puredata\">PureData text (.txt)</h4>\n    <p>When building synths in PureData try using a text object rather than an mtof object. The text object can load a\n      specially-formatted text file containing a list of frequencies. Scale Workshop exports this kind of text file for\n      you. Then when you input MIDI note numbers to the text object, it will output the desired frequency.</p>\n\n    <h4 id=\"kontakt\">Kontakt script (.txt)</h4>\n    <p>Kontakt's scripting environment allows you to retune each key to any pitch. Scale Workshop can export this script\n      for you automatically. Once exported, copy and paste the contents of the script into the script editor of your\n      Kontakt instrument.</p>\n\n    <h4 id=\"soniccouture\">Soniccouture tuning file (.nka)</h4>\n    <p>Tuning format for Soniccouture's sampled instruments for Kontakt.</p>\n\n    <h4 id=\"harmor\">Harmor Pitch Map (.fnv)</h4>\n    <p>Harmor allows retuning keys from C0 to C10 for up to 5 octaves up or down from 12 EDO.\n      To do so, go to the \"Pitch\" tab, then \"Keyboard mapping\".\n      Click the small arrow at the bottom left and select \"Open State File...\".\n      From there, open the file that you exported from Scale Workshop.\n      You will have to do this for every part that you use (A and/or B).</p>\n\n    <h4 id=\"sytrus\">Sytrus Pitch Map (.fnv)</h4>\n    <p>Sytrus allows retuning keys from C0 to C10 for up to 4 octaves up or down from 12 EDO.\n      <b>Warning: You won't be able to slide notes. If you do, the pitch will be incorrect.</b>\n      To do so, go to operator you want to retune, select the \"Pitch\" tab, then \"Keyboard mapping\".\n      Click the small arrow at the bottom left and select \"Open State File...\".\n      From there, open the file that you exported from Scale Workshop.\n      Then, turn PE (Pitch Envelope) knob to the maximum value.</p>\n\n    <h4 id=\"korg-logue\">Korg Sound Librarian Scale/Octave (.mnlgtuns/.mnlgtuno)</h4>\n    <p>These are for the Sound Librarian software associated with Korg's Monologue, Minilogue, and Prologue synths, \n      and can be loaded with the \"File > Load Single Scale\" menu option. The \"Scale\" format follows the MIDI 1.0 \n      \"Bulk Tuning Dump\" specification that allows for a 128-note table defined in semitones plus .0061 cents \n      of precision with a supported frequency range of 8.1758 Hz to 12543.875 Hz. The \"Octave\" format follows \n      the \"Scale/Octave Tuning Dump\" MIDI specification and only allows for 12  defined notes that will automatically \n      repeat at the octave. Scales with more than 12 notes will be cut off, and pitches can only deviate from standard \n      tuning by -64/+63 cents.</p>\n    \n    <h4 id=\"deflemask\">Deflemask 'fine tune' reference (.txt)</h4>\n    <p>Exports a reference sheet to help you make microtonal music using the Deflemask tracker. Notes in Deflemask can have a 'fine tune' property. This reference sheet will show you the data you need to input.</p>\n\n    <h4 id=\"reaper-note-names\">Reaper Note Name Map (.txt)</h4>\n    <p>Reaper allows all 128 rows in its piano roll MIDI editor to have a custom label. This export option gives\n      each note a label based on its pitch, with some other properties depending on the selected options.\n      \"Scala Data\" will preserve the notes' notation, keeping ratios when possible and allowing for mixed notations. \n      For \"Cents\", \"Frequencies\", and \"Decimals\", each interval will be converted to the chosen format. \"Degrees\" \n      will simply use \"N\\D\" notation where N is the scale degree and D is the number of notes \n      the scale has.</br>\n      <b>Show Period Number</b> will put the octave/period number of the interval after the pitch label.</br>\n      <b>Calculate Period in Pitch</b> will transpose each interval by the number of periods it is from the base note.\n      It will try to preserve the notation of the interval, but will fallback to cents if it's not possible.</br>\n      <b>Base Period Number</b> will shift the base note from unison by this many periods. For example if you want your\n      the base note & frequency to be note 48 at 256 Hz, but want unison to be an octave higher with note 60 at 512 Hz,\n      you can set this to -1 period, meaning the base note & frequency is shifted one period below unison.</br>\n      <b>Base Cents Value</b> and <b>Base Degree Number</b> allow you to set a different value for the base note in \n      cents or degrees respectively, similar to the \"Base Period Number\" option. In most cases this should be 0.</p>\n    <p>Reaper will look for these files by default in:<ul>\n        <li>Windows - C:\\Users\\[username]\\AppData\\Roaming\\REAPER\\MIDINoteNames</li>\n        <li>macOS - /Users/[username]/Library/Application Support/REAPER/MIDINoteNames</li></ul>\n      A shortcut to the REAPER folder is in Reaper's Option menu, \"Show REAPER resource folder in explorer/finder\".</br>\n      To use a note name map, select the \"Named notes\" view in the MIDI editor (the option next to the piano icon \n      in the toolbar) and load the file with \"File > Note/CC names > Load Note/CC names from file\".</br>\n      <i>Note: These are only labels - you must retune the synth to hear the displayed notes in the piano roll.</i></p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/reaper-named-notes.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/reaper-named-notes.png\"></a></p>\n\n    <h3 id=\"presets\">Presets</h3>\n    <p>A selection of preset scales are provided as examples.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/preset-scales.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/preset-scales.png\" /></a></p>\n\n\n    <h2 id=\"scale-design\">Scale design</h2>\n    <p>Scale Workshop allows you to create musical scales either by manual data input or by selecting menu options.\n      We'll cover the menu options first.</p>\n    <p>Start by clicking the <strong>New</strong> option on the top menu bar. Select from equal temperament, rank-2\n      temperament, etc.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/menu-new.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/menu-new.png\" /></a></p>\n\n    <h3 id=\"equal-temperaments\">Equal temperaments</h3>\n    <p><a href=\"https://en.xen.wiki/w/Equal-step_tuning\" target=\"_blank\">Equal temperaments</a> are scales where every\n      step is of equal size. The most well-known example perhaps is 12-tone equal temperament (12edo) which divides an\n      octave into 12 equal parts and is the standard tuning in the West. Other well known equal tempered scales include\n      24edo (quartertones), 19edo and 31edo.</p>\n    <p>To create a new equal temperament scale click <strong>New &gt; Equal temperament</strong> and then enter values\n      to create the scale.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/equal-temperament.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/equal-temperament.png\" /></a></p>\n    <p>Number of divisions refers to the number of notes in your scale. Interval to divide will usually be 2/1 (octave)\n      but could be a different value, for example to make Bohlen-Pierce you would have 13 divisions of 3/1.</p>\n\n    <h3 id=\"rank-2-temperaments\">Rank-2 temperaments</h3>\n    <p>Create a rank-2 temperament using a generator and period.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/rank-2-temperament.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/rank-2-temperament.png\" /></a></p>\n\n    <h3 id=\"harmonic-series-segments\">Harmonic series segments</h3>\n    <p>Generate a segment of the harmonic series by specifying the lowest and highest harmonics to be part of the scale.\n      If the highest harmonic is double that of the lowest harmonic then the scale will repeat at the octave.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/harmonic-series.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/harmonic-series.png\" /></a></p>\n\n    <h3 id=\"subharmonic-series-segments\">Subharmonic series segments</h3>\n    <p>Generate a segment of the subharmonic series by specifying the lowest and highest subharmonics to be part of the\n      scale. If the highest subharmonic is double that of the lowest subharmonic then the scale will repeat at the\n      octave.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/subharmonic-series.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/subharmonic-series.png\" /></a></p>\n\n    <h3 id=\"enumerate-chord\">Enumerate chord</h3>\n    <p>Create a scale from a list of harmonics separated by colons.<br/>E.g. 4:5:6:7:8</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/enumerate-chord.png\" target=\"_blank\"><img src=\"src/assets/img/guide/enumerate-chord.png\" /></a></p>\n\n    <h3 id=\"cps\">Combination product set</h3>\n    <p>Create a scale by multiplying harmonics in different combinations. Optionally, the resulting scale can be reduced by 2/1 and sorted in ascending order.</p>\n    <p><a href=\"https://en.xen.wiki/w/Combination_product_set\" target=\"_blank\">Combination product set (Xenharmonic Wiki)</a></p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/cps.png\" target=\"_blank\"><img src=\"src/assets/img/guide/cps.png\" /></a></p>\n\n    <h3 id=\"manual-data-entry\">Manual data entry</h3>\n    <p>Scales can be written manually by typing them in to the <strong>Scale data</strong> text field. Enter one\n      interval per line. Do not enter 1/1 on the first line as it is already assumed that the first note is 1/1.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/scale-entry.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/scale-entry.png\" /></a></p>\n    <p>Values with a . are cents values: e.g. 701.955<br />\n      Values with slash (/) are ratios: e.g. 3/2<br />\n      Values with a backslash (n\\m) are n degrees of m-EDO: e.g. 7\\12<br />\n      Values with comma (,) are decimals: e.g. 1,5<br />\n      The final value is your octave or pseudo-octave: e.g. 2/1</p>\n\n    <h4 id=\"just-intonation\">Just intonation examples</h4>\n    <p>5-limit just major:</p>\n    <pre>9/8\n5/4\n4/3\n3/2\n5/3\n15/8\n2/1</pre>\n    <p>Harmonics 8-16:</p>\n    <pre>9/8\n10/8\n11/8\n12/8\n13/8\n14/8\n15/8\n16/8</pre>\n\n    <h4 id=\"equal-temperament\">Equal temperament examples</h4>\n    <p>Blackwood[10] in 15edo:</p>\n    <pre>2\\15\n3\\15\n5\\15\n6\\15\n8\\15\n9\\15\n11\\15\n12\\15\n14\\15\n15\\15</pre>\n    <p>8edo in cents:</p>\n    <pre>150.\n300.\n450.\n600.\n750.\n900.\n1050.\n1200.</pre>\n\n    <h4 id=\"misc\">Misc examples</h4>\n    <p>You can combine any of the above styles in the same scale if needed:</p>\n    <pre>1,2\n3\\9\n700.1\n2/1</pre>\n\n\n    <h3 id=\"modify-scales\">Modify scales</h3>\n    <p>There are menu options to help you modify your current scale. Note you must have some scale data loaded already\n      in order to modify it. Click 'Modify' on the top menu bar to see the options.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/menu-modify.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/menu-modify.png\" /></a></p>\n\n    <h3 id=\"sort-ascending\">Sort ascending</h3>\n    <p>Sorts your scale ascendingly.</p>\n    \n    <h3 id=\"reduce\">Reduce</h3>\n    <p>Makes your entire scale fit within a desired 'modulus' interval, typically 2/1. Intervals in your scale which are larger than the modulus will wrap around, leaving only a remainder.</p>\n\n    <h3 id=\"rotate\">Rotate</h3>\n    <p>Allows you to choose an interval of your scale to become 1/1.</p>\n\n    <h3 id=\"subset\">Subset</h3>\n    <p>Takes a subset of the current scale. Subsets are entered numerically.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/subset.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/subset.png\" /></a></p>\n\n    <h3 id=\"stretch-compress\">Stretch/compress</h3>\n    <p>Applies a linear stretch across the current scale. Enter a stretch factor, where 1 is no stretch at all.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/stretch-compress.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/stretch-compress.png\" /></a></p>\n\n    <h3 id=\"random-variance\">Random variance</h3>\n    <p>Applies a random detuning of each note in the scale. If the checkbox is ticked, this will also detune the octave.\n      If unticked, the octave will remain unchanged.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/random-variance.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/random-variance.png\" /></a></p>\n\n    <h3 id=\"tempo-sync-beating\">Tempo-sync beating</h3>\n    <p>This retunes each note of your scale to the nearest harmonic and then tunes the base frequency to match the BPM.\n      This can result in LFO-like pulsations when playing chords.</p>\n    <p>The effect is most effective when using \"rich\" harmonic sounds (e.g. sawtooth waves) on a synth with excellent\n      intonation accuracy (e.g. almost all digital synths).</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/tempo-sync-beating.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/tempo-sync-beating.png\" /></a></p>\n    <p>Resolution allows you to control how much retuning is applied. Low values will result in a more drastic retuning\n      of your original scale; in some cases this will result in notes converging on the same note, resulting in\n      duplicates. For more obvious tempo-synced effects, choose a resolution that is a power of 2, e.g. 32, 64, or 128.\n    </p>\n\n    <h3 id=\"approximate-by-ratios\">Approximate by ratios</h3>\n    <p>This steps you through each interval of your scale, shows you a selection of ratios that are close to your interval, and allows you to choose the ratio for each.</p>\n\n    <h3 id=\"approximate-by-harmonics\">Approximate by harmonics</h3>\n    <p>This retunes each interval in your scale to the nearest harmonic. You select the denominator.</p>\n\n    <h3 id=\"approximate-by-subharmonics\">Approximate by subharmonics</h3>\n    <p>This retunes each interval in your scale to the nearest subharmonic. You select the numerator.</p>\n\n    <h3 id=\"equalize\">Equalize</h3>\n    <p>This retunes each interval in your scale to the nearest equal step. You select the number of steps to equally divide the interval of equivalence.</p>    \n\n    <h2 id=\"synthesizer\">Synthesizer</h2>\n    <p>Scale Workshop has a built-in synth so that you can play and hear your scales. This is useful for auditioning the\n      scale you're working on, however it is very simple and isn't recommended for live performance.</p>\n\n    <h3 id=\"playing-with-midi\">Playing with a MIDI controller</h3>\n    <p>Play notes on any connected MIDI device in order to hear your current scale. This requires you to use a web-MIDI capable browser. Must be enabled first by clicking\n      the 'MIDI I/O' menu option then clicking the 'MIDI on' button while your controller is connected.</p>\n\n    <h3 id=\"playing-with-qwerty\">Playing with QWERTY</h3>\n    <p>Use your computer keyboard to play your current scale, much like an isomorphic keyboard.</p>\n    <p><strong>Note:</strong> QWERTY note input is disabled any time that a text or input field has focus. An indicator\n      can be seen at the top-right of the screen to show you if you are able to play the QWERTY keyboard currently:</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/qwerty-enabled.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/qwerty-enabled.png\" /></a></p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/qwerty-disabled.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/qwerty-disabled.png\" /></a></p>\n    <p>Not all international keyboard layouts are supported. Users who wish to see their keyboard layout supported are\n      encouraged to contribute to the project by adding their own layout to keymap.js in the project source.</p>\n\n    <h3 id=\"playing-with-touch-screen\">Playing with mouse / touch screen</h3>\n    <p>On the top menu, click Virtual Kbd to display a grid overlay. Click / Touch the grid to hear your scale. The mapping on the\n      grid is the same as the mapping on the QWERTY keys.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/virtual-keyboard.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/virtual-keyboard.png\" /></a></p>\n\n    <h3 id=\"isomorphic-mapping\">Isomorphic mapping</h3>\n    <p>When using the QWERTY or the Virtual keyboard, by default each note along a horizontal axis is 1 scale degree\n      apart and each note along vertical axis is 5 scale degrees apart. This can be changed by using the\n      <strong>Isomorphic keyboard settings</strong> shown on the right column of the Scale Workshop interface.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/isomorphic-settings.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/isomorphic-settings.png\" /></a></p>\n\n    <h3 id=\"changing-the-sound-of-the-synth\">Changing the sound of the synth</h3>\n    <p>The synth has the following options:</p>\n    <ul>\n      <li><strong>Main Volume</strong></li>\n      <li><strong>Waveform</strong>: Semisine (default), Octaver, Triangle, Square, Sawtooth, Brightness, Harmonic Bell, Warm, Sine</li>\n      <li><strong>Amplitude envelope</strong>: Organ, Pad, Percussive (Short, Medium and Long)</li>\n      <li><strong>Delay effect</strong>: feedback delay echo</li>\n      <li><strong>Max polyphony</strong>: maximum number of voices that can be played at one time. Use a low value if you're on a low powered device. Many devices will be capable of 64 or more simultaneous voices. Must refresh the page for changes to take effect.</li>\n    </ul>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/synth-settings.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/synth-settings.png\" /></a></p>\n    \n    <h2 id=\"midi\">MIDI I/O</h2>\n    <p>Scale Workshop can behave like a MIDI tuning box, allowing for MIDI input into the app and then outputting MIDI notes plus multichannel pitch bend messages, thereby allowing you to hear your scale on a supported MIDI synth.</p>\n    <p>Before getting started, make sure that your web browser is web-MIDI compatible. Not all browsers support MIDI I/O.</p>\n    <p>On your MIDI synth device, you should set pitch bend range to +/- 1 octave.</p>\n    <p>Connect your MIDI device(s) to your computer, then click the MIDI I/O option in the top menu. Then click the red 'MIDI on' button. If this was successful, the button will turn green and you will see a list of your MIDI devices below.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/midi-io-settings.png\" target=\"_blank\"><img src=\"src/assets/img/guide/midi-io-settings.png\" /></a></p>\n    <p>MIDI devices can be enabled or disabled by selecting the check boxes next to each device. Each individual channel can also be enabled or disabled by the check boxes.</p>\n\n    <h2 id=\"misc-tips\">Misc. tips</h2>\n    <p><strong>General settings</strong> can be found on the right side of the Scale Workshop interface.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/general-settings.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/general-settings.png\" /></a></p>\n    <p>If an exported tuning file doesn't seem to load into a softsynth properly, then try changing the value of\n      <strong>Line endings format</strong> and re-saving the file. If you're using a Windows computer it's recommended\n      to set this to Microsoft, otherwise set this to Unix.</p>\n    <p><strong>Dark mode</strong> makes the Scale Workshop interface dark.</p>\n    <p class=\"text-center\"><a href=\"src/assets/img/guide/dark-mode.png\" target=\"_blank\"><img\n          src=\"src/assets/img/guide/dark-mode.png\" /></a></p>\n    <p>Undo/redo your tuning changes by using the back/forward browser navigation buttons.</p>\n    <p>If the synth gets too noisy, you can kill all sound by clicking the <strong>Quiet</strong> button.</p>\n  </article>\n</body>\n</html>"
  },
  {
    "path": "index.htm",
    "content": "﻿<!--\n  ____            _\n / ___|  ___ __ _| | ___\n \\___ \\ / __/ _` | |/ _ \\\n  ___) | (_| (_| | |  __/\n |____/ \\___\\__,_|_|\\___|\n __        __         _        _\n \\ \\      / /__  _ __| | _____| |__   ___  _ __\n  \\ \\ /\\ / / _ \\| '__| |/ / __| '_ \\ / _ \\| '_ \\\n   \\ V  V / (_) | |  |   <\\__ \\ | | | (_) | |_) |\n    \\_/\\_/ \\___/|_|  |_|\\_\\___/_| |_|\\___/| .__/\n                                          |_|\n-->\n<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n  <title>Scale Workshop</title>\n  <meta name=\"description\" content=\"Scale Workshop is a tool that allows you to create microtonal tunings within your web browser. You can export these tunings to your device and use them to tune various synthesizers.\" />\n  <meta charset=\"utf-8\">\n  <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n  <!-- Open Graph -->\n  <meta property=\"og:title\" content=\"Scale Workshop\" />\n  <meta property=\"og:type\" content=\"website\" />\n  <meta property=\"og:url\" content=\"https://sevish.com/scaleworkshop/\" />\n  <meta property=\"og:image\" content=\"https://sevish.com/scaleworkshop/src/assets/img/scale-workshop-og-image.png\" />\n  <meta property=\"og:description\"\n    content=\"Create microtonal tunings in your web browser.\" />\n  <meta property=\"og:site_name\" content=\"Sevish Music\" />\n\n  <!-- Styles -->\n  <link rel=\"stylesheet\" href=\"src/lib/bootstrap-3.3.7-dist/css/bootstrap.min.css\">\n  <link rel=\"stylesheet\" href=\"src/lib/jquery-ui-1.12.1/jquery-ui.min.css\">\n  <link rel=\"stylesheet\" href=\"src/lib/socicon/style.css\">\n  <link rel=\"stylesheet\" href=\"src/css/style.css?v=1.5\">\n  <link rel=\"stylesheet\" href=\"src/css/style-dark.css?v=1.5\">\n\n  <!-- Favicon -->\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"src/assets/favicon/apple-touch-icon.png\">\n  <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"src/assets/favicon/favicon-32x32.png\">\n  <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"src/assets/favicon/favicon-16x16.png\">\n  <link rel=\"manifest\" href=\"src/assets/favicon/manifest.json\">\n  <link rel=\"mask-icon\" href=\"src/assets/favicon/safari-pinned-tab.svg\" color=\"#9bd03b\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n</head>\n\n<body>\n  <div id=\"splash\">\n    <div id=\"splash-center\">\n      <noscript>\n        <img src=\"src/assets/img/scale-workshop-og-image.png\" />\n        <p class=\"lead\" style=\"padding:1em;\">JavaScript is disabled in your browser. Please enable JavaScript to use\n          Scale Workshop.</p>\n      </noscript>\n    </div>\n  </div>\n\n  <div id=\"header-mobile\" class=\"visible-xs-block\">\n    <h1 style=\"line-height:0.6em;text-align:center;\">\n      <span style=\"font-size:1em;\">Scale</span><br/>\n      <span style=\"font-size:0.7em;\">Workshop</span>\n    </h1>\n  </div>\n\n  <nav class=\"navbar navbar-inverse bg-inverse\">\n    <div class=\"container-fluid\">\n      <div class=\"navbar-header\">\n        <button type=\"button\" class=\"navbar-toggle collapsed pull-right\">\n          <span class=\"sr-only\">Toggle navigation</span>\n          <span class=\"icon-bar\"></span>\n          <span class=\"icon-bar\"></span>\n          <span class=\"icon-bar\"></span>\n        </button>\n        <span class=\"navbar-brand\" style=\"line-height:0.6em;text-align:right;\">\n          <span style=\"font-size:1em;\">Scale</span><br/>\n          <span style=\"font-size:0.7em;\">Workshop</span>\n        </span>\n      </div>\n\n      <div class=\"collapse navbar-collapse\" id=\"mobile-menu\">\n        <ul class=\"nav navbar-nav\">\n          <li class=\"dropdown\">\n            <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"><span class=\"glyphicon glyphicon-asterisk\"\n                aria-hidden=\"true\"></span> New <span class=\"caret\"></span></a>\n            <ul class=\"dropdown-menu\">\n              <li><a href=\"#\" id=\"generate_equal_temperament\"><span class=\"glyphicon glyphicon-stats\"\n                    aria-hidden=\"true\"></span> Equal temperament</a></li>\n              <li><a href=\"#\" id=\"generate_rank_2_temperament\"><span class=\"glyphicon glyphicon-stats\"\n                    aria-hidden=\"true\"></span> Rank-2 temperament</a></li>\n              <li><a href=\"#\" id=\"generate_harmonic_series_segment\"><span class=\"glyphicon glyphicon-stats\"\n                    aria-hidden=\"true\"></span> Harmonic series segment</a></li>\n              <li><a href=\"#\" id=\"generate_subharmonic_series_segment\"><span class=\"glyphicon glyphicon-stats\"\n                    aria-hidden=\"true\"></span> Subharmonic series segment</a></li>\n              <li><a href=\"#\" id=\"enumerate_chord\"><span class=\"glyphicon glyphicon-stats\" aria-hidden=\"true\"></span>\n                  Enumerate chord</a></li>\n              <li><a href=\"#\" id=\"generate_cps\"><span class=\"glyphicon glyphicon-stats\" aria-hidden=\"true\"></span> Combination product set</a></li>\n              <li class=\"divider\"></li>\n              <li><a href=\"#\" id=\"import-scala-scl\"><span class=\"glyphicon glyphicon-log-in\" aria-hidden=\"true\"></span>\n                  Import .scl</a></li>\n              <li><a href=\"#\" id=\"import-anamark-tun\"><span class=\"glyphicon glyphicon-log-in\"\n                    aria-hidden=\"true\"></span> Import .tun</a></li>\n              <li><a href=\"#\" id=\"import-mnlgtun-file\"><span class=\"glyphicon glyphicon-log-in\" \n                    aria-hidden=\"true\"></span> Import .mnlgtuns / .mnlgtuno</a></li>\n              <li class=\"divider\"></li>\n              <li><a href=\"#\" id=\"clear-scale\"><span class=\"glyphicon glyphicon-trash\" aria-hidden=\"true\"></span> Clear scale</a></li>\n              <li><a href=\"#\" id=\"load-preset\"><span class=\"glyphicon glyphicon-cd\" aria-hidden=\"true\"></span> Load\n                  preset scale</a></li>\n            </ul>\n          </li>\n          <li class=\"dropdown\">\n            <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"><span class=\"glyphicon glyphicon-adjust\"\n                aria-hidden=\"true\"></span> Modify <span class=\"caret\"></span></a>\n            <ul class=\"dropdown-menu\" id=\"modify-buttons\">\n              <li><a href=\"#\" id=\"modify_sort_ascending\"><span class=\"glyphicon glyphicon-sort-by-attributes\" aria-hidden=\"true\"></span> Sort ascending</a></li>\n              <li><a href=\"#\" id=\"modify_octave_reduce\"><span class=\"glyphicon glyphicon-resize-small\" aria-hidden=\"true\"></span> Reduce</a></li>\n              <li><a href=\"#\" id=\"modify_rotate\"><span class=\"glyphicon glyphicon-repeat\" aria-hidden=\"true\"></span> Rotate</a></li>\n              <li><a href=\"#\" id=\"modify_mode\"><span class=\"glyphicon glyphicon-equalizer\" aria-hidden=\"true\"></span> Subset</a></li>\n              <li><a href=\"#\" id=\"modify_stretch\"><span class=\"glyphicon glyphicon-compressed\"\n                    aria-hidden=\"true\"></span> Stretch/compress</a></li>\n              <li><a href=\"#\" id=\"modify_random_variance\"><span class=\"glyphicon glyphicon-random\"\n                    aria-hidden=\"true\"></span> Random variance</a></li>\n              <li><a href=\"#\" id=\"modify_sync_beating\"><span class=\"glyphicon glyphicon-magnet\"\n                    aria-hidden=\"true\"></span> Tempo-sync beating</a></li>\n              <li><a href=\"#\" id=\"modify_approximate\"><span class=\"glyphicon glyphicon-list-alt\"\n                    aria-hidden=\"true\"></span> Approximate by ratios</a></li>\n              <li><a href=\"#\" id=\"modify_approximate_harmonics\"><span class=\"glyphicon glyphicon-list-alt\"\n                    aria-hidden=\"true\"></span> Approximate by harmonics</a></li>\n              <li><a href=\"#\" id=\"modify_approximate_subharmonics\"><span class=\"glyphicon glyphicon-list-alt\"\n                    aria-hidden=\"true\"></span> Approximate by subharmonics</a></li>\n              <li><a href=\"#\" id=\"modify_equalize\"><span class=\"glyphicon glyphicon-th\"\n                    aria-hidden=\"true\"></span> Equalize</a></li>\n            </ul>\n          </li>\n          <li><a href=\"#\" id=\"nav_play\"><span class=\"glyphicon glyphicon-music\" aria-hidden=\"true\"></span> Virtual Kbd</a>\n          </li>\n          <li class=\"dropdown\">\n            <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"><span class=\"glyphicon glyphicon-download-alt\"\n                aria-hidden=\"true\"></span> Export <span class=\"caret\"></span></a>\n            <ul class=\"dropdown-menu\" id=\"export-buttons\">\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_anamark_tun(100);\"><span\n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download AnaMark v1 tuning (.tun)</a>\n              </li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_anamark_tun(200);\"><span\n                class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download AnaMark v2 tuning (.tun)</a>\n              </li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_scala_scl();\"><span\n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download Scala scale (.scl)</a></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_scala_kbm();\"><span\n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download Scala keyboard mapping (.kbm)</a>\n              </li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_maxmsp_coll();\"><span\n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download Max/MSP coll tuning\n                  (.txt)</a></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_pd_text();\"><span\n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download PureData text tuning\n                  (.txt)</a></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_kontakt_script();\"><span\n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download Kontakt tuning script\n                  (.txt)</a></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_soniccouture_nka();\"><span\n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download Soniccouture tuning file\n                  (.nka)</a></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); exportHarmorPitchMap();\"><span class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download\n                  Harmor pitch map (.fnv)</a></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); exportSytrusPitchMap();\"><span class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download\n                  Sytrus Pitch Map (.fnv)</a></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); exportMnlgtun(true);\"><span class=\"glyphicon glyphicon-download\"\n                    aria-hidden=\"true\"></span> Download Korg 'logue Sound Librarian Scale (.mnlgtuns)</a></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); exportMnlgtun(false);\"><span class=\"glyphicon glyphicon-download\"\n                    aria-hidden=\"true\"></span> Download Korg 'logue Sound Librarian Octave (.mnlgtuno)</a></li>\n              <li class=\"divider\"></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_reference_deflemask();\"><span\n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download Deflemask 'fine tune'\n                  reference (.txt)</a></li>\n              <li><a href=\"#\" id=\"export_reaper_note_name_map\"><span \n                    class=\"glyphicon glyphicon-download\" aria-hidden=\"true\"></span> Download Reaper Note Name Map (.txt)\n                  </a></li>\n              <li class=\"divider\"></li>\n              <li><a href=\"#\" onclick=\"event.preventDefault(); export_url();\"><span\n                    class=\"glyphicon glyphicon-share-alt\" aria-hidden=\"true\"></span> Share scale as URL</a></li>\n            </ul>\n          </li>\n          <li><a href=\"#\" id=\"nav_midi\"><span class=\"glyphicon glyphicon-wrench\" aria-hidden=\"true\"></span> MIDI I/O</a>\n          <li class=\"dropdown\">\n            <a class=\"dropdown-toggle\" data-toggle=\"dropdown\" href=\"#\"><span class=\"glyphicon glyphicon-info-sign\"\n                aria-hidden=\"true\"></span> About <span class=\"caret\"></span></a>\n            <ul class=\"dropdown-menu\">\n              <li><a href=\"#\" id=\"about_scale_workshop\"><img src=\"src/assets/favicon/android-chrome-192x192.png\"\n                    style=\"height:1em; width:auto;\" /> About Scale Workshop</a></li>\n              <li><a href=\"https://github.com/SeanArchibald/scale-workshop\" target=\"_blank\"><span\n                    class=\"glyphicon glyphicon-book\" aria-hidden=\"true\"></span> GitHub</a></li>\n              <li><a href=\"https://github.com/SeanArchibald/scale-workshop/issues\" target=\"_blank\"><span\n                    class=\"glyphicon glyphicon-send\" aria-hidden=\"true\"></span> Report issue</a></li>\n              <li><a href=\"http://sevish.com\" target=\"_blank\"><span class=\"glyphicon glyphicon-heart-empty\"\n                    aria-hidden=\"true\"></span> Made by Sevish</a></li>\n            </ul>\n          </li>\n          <li><a href=\"guide.htm\" target=\"_blank\"><span class=\"glyphicon glyphicon-question-sign\"\n                aria-hidden=\"true\"></span> User guide</a></li>\n        </ul>\n      </div>\n    </div>\n  </nav>\n  <div class=\"container-fluid\">\n\n    <div class=\"row\">\n      <div class=\"col-sm-6 col-md-4 col-lg-4 col-main\">\n        <form>\n          <div class=\"form-group\">\n            <textarea id=\"txt_name\" name=\"name\" placeholder=\"Untitled scale\" class=\"form-control\" rows=\"1\"></textarea>\n          </div>\n\n          <label>Scale data <a href=\"guide.htm#manual-data-entry\" target=\"_blank\"><span\n                class=\"glyphicon glyphicon-question-sign\" aria-hidden=\"true\"></span></a></label>\n          <div class=\"form-group\">\n            <textarea id=\"txt_tuning_data\" class=\"form-control\" rows=\"12\"\n              title=\"Enter one interval per line. Values with a . will be calculated as cents. Values with a backslash (n\\m) are n degrees of m-EDO. Values with forward slash (/) are calculated as ratios. See the user guide for examples (About > User Guide)\"\n              placeholder=\" \"></textarea>\n          </div>\n\n          <canvas id=\"graphic-scale-rule\" width=\"1000px\" height=\"100px\"></canvas>\n\n          <div class=\"form-group\">\n            <label>Base frequency (note 1/1)</label>\n            <div class=\"input-group\">\n              <input id=\"txt_base_frequency\" name=\"base_frequency\" type=\"number\" min=\"0.0001\" max=\"999999\"\n                class=\"form-control\" value=\"440\" title=\"Set the frequency (in Hz) of note 1/1\" />\n              <div class=\"input-group-addon\">Hz</div>\n            </div>\n            <input name=\"Auto\" id=\"btn_frequency_auto\" type=\"button\" value=\"Auto\" class=\"btn btn-default pull-right\"\n              title=\"Automatically set base frequency from the MIDI note, assuming 12-EDO A440Hz\" />\n          </div>\n\n          <div class=\"form-group\">\n            <label>Base MIDI note (note 1/1)</label>\n            <div class=\"input-group\"\n              title=\"Set the MIDI note number to be note 1/1. By default this is 69 (A above middle C).\">\n              <input id=\"txt_base_midi_note\" name=\"base_midi_note\" type=\"number\" min=\"0\" max=\"127\" step=\"1\"\n                class=\"form-control\" value=\"69\" />\n              <div id=\"base_midi_note_name\" class=\"input-group-addon\" style=\"min-width:5em;\">A5</div>\n            </div>\n          </div>\n        </form>\n      </div>\n\n      <div class=\"col-sm-6 col-md-8 col-lg-8 col-main\">\n        <div class=\"row\">\n\n          <!-- Settings column -->\n          <div class=\"col-sm-12 col-md-6 col-md-push-6 col-lg-6 col-sub\">\n\n            <a id=\"btn_panic\" href=\"#\" class=\"btn btn-link\" style=\"float:right;margin-top:1em;\"\n              title=\"Stops all currently playing notes and also turns down the Delay feedback gain.\">Quiet</a>\n\n            <div id=\"qwerty-indicator\"></div>\n\n            <div id=\"settings-accordion\">\n\n              <!-- general settings -->\n              <div id=\"settings_general\" class=\"group\">\n                <h3>General settings</h3>\n                <div>\n                  <form>\n                    <div class=\"form-group\">\n                      <label>Line endings format</label>\n                      <select id=\"input_select_newlines\" class=\"form-control\"\n                        title=\"If your exported tuning files didn't work right on macOS synths, try changing this option to Unix.\">\n                        <option value=\"windows\">Microsoft (Windows/MS-DOS)</option>\n                        <option value=\"unix\">Unix (Mac/Linux)</option>\n                      </select>\n                    </div>\n                    <div class=\"form-group\">\n\n                      <div class=\"checkbox\">\n                        <label>\n                          <input id=\"input_checkbox_night_mode\" type=\"checkbox\" /> <label for=\"input_checkbox_night_mode\">Dark mode</label>\n                        </label>\n                      </div>\n                    </div>\n                  </form>\n                </div>\n              </div>\n\n              <!-- synth settings -->\n              <div id=\"settings_synth\" class=\"group\">\n                <h3>Synth settings</h3>\n                <div>\n                  <form>\n                    <div class=\"form-group\">\n                      <label for=\"input_range_main_vol\">Main Volume</label>\n                      <input type=\"range\" class=\"form-control-range\" id=\"input_range_main_vol\" min=\"0\" max=\"1\"\n                        step=\"0.005\" value=\"0.8\">\n                    </div>\n                    <div class=\"form-group\">\n                      <label>Waveform</label>\n                      <select id=\"input_select_synth_waveform\" class=\"form-control\">\n                        <option value=\"semisine\">Semisine</option>\n                        <option value=\"octaver\">Octaver</option>\n                        <option value=\"triangle\">Triangle</option>\n                        <option value=\"square\">Square</option>\n                        <option value=\"sawtooth\">Sawtooth</option>\n                        <option value=\"brightness\">Brightness</option>\n                        <option value=\"harmonicbell\">Harmonic Bell</option>\n                        <option value=\"warm1\">Warm 1</option>\n                        <option value=\"warm2\">Warm 2</option>\n                        <option value=\"warm3\">Warm 3</option>\n                        <option value=\"warm4\">Warm 4</option>\n                        <option value=\"sine\">Sine</option>\n                      </select>\n                    </div>\n                    <div class=\"form-group\">\n                      <label>Amplitude Envelope</label>\n                      <select id=\"input_select_synth_amp_env\" class=\"form-control\">\n                        <option value=\"organ\">Organ</option>\n                        <option value=\"pad\">Pad</option>\n                        <option value=\"perc-short\">Percussive (Short)</option>\n                        <option value=\"perc-medium\">Percussive (Medium)</option>\n                        <option value=\"perc-long\">Percussive (Long)</option>\n                      </select>\n                    </div>\n                    <hr />\n                    <div class=\"form-group\">\n                      <label>Delay effect</label>\n                      <div class=\"checkbox\">\n                        <label>\n                          <input id=\"input_checkbox_delay_on\" type=\"checkbox\" /> On\n                        </label>\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label for=\"input_range_feedback_gain\">Feedback gain</label>\n                      <input type=\"range\" class=\"form-control-range\" id=\"input_range_feedback_gain\" min=\"0\" max=\"0.99\"\n                        step=\"0.005\" value=\"0.3\">\n                    </div>\n                    <div class=\"form-group\">\n                      <label for=\"input_range_delay_time\">Delay Time (<span id=\"delay_time_ms\">400</span> ms)</label>\n                      <input type=\"range\" class=\"form-control-range\" id=\"input_range_delay_time\" min=\"10\" max=\"5000\"\n                        value=\"400\">\n                    </div>\n                    <hr/>\n                    <div class=\"form-group\">\n                      <label>Max polyphony</label>\n                      <p>Refresh page for changes to take effect.</p>\n                      <input title=\"Maximum number of notes that can be played at the same time (default 16). More system resources are required for greater polyphony. Changes will take effect next time the page is refreshed.\" id=\"input_number_max_polyphony\" type=\"number\" class=\"form-control\" value=\"16\" min=\"1\" max=\"64\" placeholder=\"16\" />\n                    </div>\n                  </form>\n                </div>\n              </div>\n\n              <!-- Isomorphic keyboard settings -->\n              <div id=\"settings_note_input\" class=\"group\">\n                <h3>Isomorphic keyboard settings</h3>\n                <div>\n                  <p>Play your scale using your computer keyboard or the virtual keyboard.</p>\n                  <form>\n\n                    <div class=\"form-group\">\n                      <label>Computer keyboard layout</label>\n                      <select id=\"input_select_keyboard_layout\" class=\"form-control\"\n                        title=\"Select your regional keyboard layout.\">\n                        <option value=\"EN\">English (QWERTY)</option>\n                        <option value=\"HU\">Hungarian (QWERTZ)</option>\n                        <option value=\"DK\">Dvorak</option>\n                        <option value=\"PK\">Programmer Dvorak</option>\n                        <option value=\"CO\">Colemak</option>\n                        <option value=\"CO_DH\">Colemak DH</option>\n                      </select>\n                    </div>\n                    <div class=\"form-group\">\n                      <label>Isomorphic key mapping</label>\n                      <p>Distance (in scale degrees) between adjacent keys on the horizontal/vertical axes.</p>\n                      <div class=\"input-group\">\n                        <div class=\"input-group-addon\">V</div>\n                        <input id=\"input_number_isomorphicmapping_vert\" type=\"number\" class=\"form-control\" value=\"5\"\n                          min=\"-100\" max=\"100\" />\n                        <div class=\"input-group-addon\">default 5</div>\n                      </div>\n                      <div class=\"input-group\">\n                        <div class=\"input-group-addon\">H</div>\n                        <input id=\"input_number_isomorphicmapping_horiz\" type=\"number\" class=\"form-control\" value=\"1\"\n                          min=\"-100\" max=\"100\" />\n                        <div class=\"input-group-addon\">default 1</div>\n                      </div>\n                    </div>\n                    <div class=\"form-group\">\n                      <label>Key colours</label>\n                      <p>A list of key colours, ascending from 1/1. Key colours are purely cosmetic and do not affect\n                        mapping.</p>\n                      <textarea id=\"input_key_colors\" class=\"form-control\"\n                        placeholder=\"white black white white black white black white white black white black\"\n                        title=\"Examples: black grey white red green blue palevioletred antiquewhite steelblue olive\">white black white white black white black white white black white black</textarea>\n                      <input name=\"Auto\" id=\"btn_key_colors_auto\" type=\"button\" value=\"Auto\"\n                        class=\"btn btn-default pull-right\"\n                        title=\"Automatically colour keys based on your scale size. Auto colouring is not optimal but a good starting point.\" />\n                    </div>\n                  </form>\n                </div>\n              </div>\n            </div>\n          </div>\n\n          <!-- tuning table column -->\n          <div id=\"col-tuning-table\" class=\"col-sm-12 col-md-6 col-md-pull-6 col-lg-6 col-sub\">\n            <table id=\"tuning-table\" class=\"table table-condensed table-hover\">\n            </table>\n          </div>\n\n        </div><!-- /.row -->\n      </div><!-- /col -->\n    </div><!-- /.row -->\n  </div><!-- /.container-fluid -->\n\n  <!-- Hidden by default -->\n  <input type=\"file\" id=\"scala-file\" accept=\".scl\" style=\"display:none;\" onchange=\"parse_imported_scala_scl(event)\" />\n  <input type=\"file\" id=\"anamark-tun-file\" accept=\".tun\" style=\"display:none;\"\n    onchange=\"parse_imported_anamark_tun(event)\" />\n  <input type=\"file\" id=\"mnlgtun-file\" accept=\".mnlgtuns,.mnlgtuno\" style=\"display:none;\" \n    onchange=\"parseImportedMnlgtun(event)\" />\n\n\n\n  <!-- Generator Modals -->\n  <div id=\"modal_generate_equal_temperament\" class=\"modal\" title=\"Generate equal temperament\">\n    <a href=\"guide.htm#equal-temperaments\" target=\"_blank\"><span class=\"glyphicon glyphicon-question-sign\"\n        aria-hidden=\"true\" style=\"float:right;\"></span></a>\n    <form>\n      <label>Number of divisions</label>\n      <div class=\"form-group\">\n        <input id=\"input_number_of_divisions\" name=\"\" type=\"number\" min=\"1\" max=\"999999\" class=\"form-control\"\n          value=\"5\" />\n      </div>\n\n      <label>Interval to divide</label>\n      <div class=\"form-group\">\n        <input id=\"input_interval_to_divide\" name=\"\" type=\"text\" class=\"form-control\" value=\"2/1\" />\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_generate_rank_2_temperament\" class=\"modal\" title=\"Generate rank-2 temperament\">\n    <form>\n      <label>Generator</label>\n      <div class=\"form-group\">\n        <input id=\"input_rank-2_generator\" name=\"\" type=\"text\" class=\"form-control\" value=\"3/2\" />\n      </div>\n\n      <label>Period</label>\n      <div class=\"form-group\">\n        <input id=\"input_rank-2_period\" name=\"\" type=\"text\" class=\"form-control\" value=\"2/1\" />\n      </div>\n\n      <label>Scale size</label>\n      <div class=\"form-group\">\n        <input id=\"input_rank-2_size\" name=\"\" type=\"number\" min=\"2\" max=\"99999\" step=\"1\" class=\"form-control\"\n          value=\"7\" />\n      </div>\n\n      <label>Generators up/down from 1/1</label>\n      <div class=\"form-group form-inline\">\n        <div class=\"input-group\">\n          <input id=\"input_rank-2_up\" name=\"\" type=\"number\" min=\"0\" max=\"6\" step=\"1\" class=\"form-control\" value=\"6\"\n            title=\"Number of generators up\" style=\"min-width:5em;\" />\n          <div class=\"input-group-addon\">Up</div>\n        </div>\n        <div class=\"input-group\">\n          <input id=\"input_rank-2_down\" name=\"\" type=\"number\" min=\"0\" max=\"99999\" step=\"1\" class=\"form-control\"\n            value=\"0\" disabled />\n          <div class=\"input-group-addon\">Down</div>\n        </div>\n      </div>\n    </form>\n    <hr />\n    <button class=\"btn btn-default\"\n      onclick=\"show_mos_cf( jQuery('#input_rank-2_period').val(), jQuery('#input_rank-2_generator').val(), jQuery('#input_rank-2_size').val(), jQuery('#input_rank-2_mos_threshold').val() );\"\n      style=\"float:left;\">Show MOS</button>\n    <p style=\"text-align:right;\">(ignore MOS with steps smaller than <input id=\"input_rank-2_mos_threshold\" name=\"\"\n        type=\"number\" min=\"0.1\" max=\"600\" value=\"2.5\" style=\"width:4em;\" /> cents)</p>\n    <span id=\"info_rank_2_mos\" style=\"display:block;margin-top:10px;\"></span>\n    <hr />\n    <label>Output type:</label>\n      <select id=\"input_rank-2_type\" name=\"\" class=\"form-control\" value=\"preserve\">\n        <option value=\"preserve\">Preserve types</option>\n        <option value=\"cents\">Cents</option>\n        <option value=\"decimals\">Decimals</option>\n      </select>\n  </div>\n\n  <div id=\"modal_generate_harmonic_series_segment\" class=\"modal\" title=\"Generate harmonic series segment\">\n    <form>\n      <label>Lowest harmonic</label>\n      <div class=\"form-group\">\n        <input id=\"input_lowest_harmonic\" name=\"\" type=\"number\" min=\"1\" max=\"999999\" step=\"1\" class=\"form-control\"\n          value=\"8\" />\n      </div>\n\n      <label>Highest harmonic</label>\n      <div class=\"form-group\">\n        <input id=\"input_highest_harmonic\" name=\"\" type=\"number\" min=\"1\" max=\"999999\" step=\"1\" class=\"form-control\"\n          value=\"16\" />\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_generate_subharmonic_series_segment\" class=\"modal\" title=\"Generate subharmonic series segment\">\n    <form>\n      <label>Lowest subharmonic</label>\n      <div class=\"form-group\">\n        <input id=\"input_lowest_subharmonic\" name=\"\" type=\"number\" min=\"1\" max=\"999999\" step=\"1\" class=\"form-control\"\n          value=\"8\" />\n      </div>\n\n      <label>Highest subharmonic</label>\n      <div class=\"form-group\">\n        <input id=\"input_highest_subharmonic\" name=\"\" type=\"number\" min=\"1\" max=\"999999\" step=\"1\" class=\"form-control\"\n          value=\"16\" />\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_enumerate_chord\" class=\"modal\" title=\"Enumerate chord\">\n    <form>\n      <label>Chord</label>\n      <div class=\"form-group\">\n        <input id=\"input_chord\" name=\"\" type=\"text\" class=\"form-control\" value=\"4:5:6:7:8\" />\n      </div>\n      <div class=\"form-group\">\n        <label>\n          <input id=\"input_invert_chord\" type=\"checkbox\" /> Invert chord\n        </label>\n      </div>\n      <label>\n        <input id=\"input_convert_to_ratios\" type=\"checkbox\" /> Convert all to ratios\n      </label>\n    </form>\n  </div>\n\n  <div id=\"modal_generate_cps\" class=\"modal\" title=\"Generate combination product set\">\n    <form>\n      <label>Factors</label>\n      <div class=\"form-group\">\n        <input id=\"input_cps_factors\" name=\"\" type=\"text\" min=\"1\" max=\"999999\" step=\"1\" class=\"form-control\"\n          placeholder=\"1 3 5 7\" list=\"input_cps_factors_list\" />\n        <datalist id=\"input_cps_factors_list\">\n          <option value=\"1 3 5 7\" />\n          <option value=\"1 3 7 9\" />\n          <option value=\"3 5 7 9\" />\n          <option value=\"7 9 11 15\" />\n          <option value=\"1 3 5 121\" />\n          <option value=\"1 3 5 7 9\" />\n          <option value=\"2 3 5 7 11\" />\n          <option value=\"1 3 5 7 9 11\" />\n          <option value=\"2 3 5 7 11 13\" />\n        </datalist>   \n      </div>\n\n      <label>Combination count</label>\n      <div class=\"form-group\">\n        <input id=\"input_cps_combination_count\" name=\"\" type=\"number\" pattern=\"[0-9]\" min=\"2\" max=\"9\" step=\"1\" class=\"form-control\"\n          value=\"2\" />\n      </div>\n\n      <div class=\"form-group\">\n        <label>\n          <input id=\"input_cps_remove_1\" type=\"checkbox\" checked=\"checked\" /> Remove 1/1 from scale\n        </label>\n      </div>\n\n      <div class=\"form-group\">\n        <label>\n          <input id=\"input_cps_reduce\" type=\"checkbox\" checked=\"checked\" /> Reduce resulting scale by 2/1\n        </label>\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_load_preset_scale\" class=\"modal\" title=\"Load preset scale\">\n    <form>\n      <div class=\"form-group\">\n        <select id=\"select_preset_scale\" name=\"\" size=\"10\" class=\"form-control\">\n          <optgroup label=\"Traditional scales\">\n            <option value=\"pelog\">Pelog</option>\n            <option value=\"slendro\">Slendro</option>\n            <option value=\"ragabageshri\">Raga Bageshri</option>\n            <option value=\"ragabhairavi\">Raga Bhairavi</option>\n            <option value=\"ragakafi\">Raga Kafi</option>\n            <option value=\"ragatodi\">Raga Todi</option>\n            <option value=\"ragayaman\">Raga Yaman</option>\n            <option value=\"22shruti\">22 Shruti</option>\n            <option value=\"hirajoshi\">Hirajoshi</option>\n            <option value=\"balafon\">Balafon 1</option>\n            <option value=\"balafon2\">Balafon 2</option>\n            <option value=\"balafon3\">Balafon 3</option>\n            <option value=\"balafon4\">Balafon 4</option>\n            <option value=\"balafon5\">Balafon 5</option>\n            <option value=\"balafon6\">Balafon 6</option>\n            <option value=\"balafon7\">Balafon 7</option>\n            <option value=\"5edo\">Equal pentatonic</option>\n            <option value=\"7edo\">Equal heptatonic</option>\n            <option value=\"archytasdiatonic\">Archytas Diatonic</option>\n            <option value=\"archytasenharmonic\">Archytas Enharmonic</option>\n            <option value=\"didymuschromatic\">Didymus Chromatic</option>\n            <option value=\"ptolemydiatonicditoniaion\">Ptolemy Diatonic Ditoniaion</option>\n            <option value=\"ptolemydiatonichemiolion\">Ptolemy Diatonic Hemiolion</option>\n            <option value=\"pythagorean\">Pythagorean</option>\n            <option value=\"werckmeisteriii\">Werckmeister III (1691)</option>\n            <option value=\"young1799\">Young (1799)</option>\n            <option value=\"12edo\">12-tone equal temperament</option>\n          </optgroup>\n          <optgroup label=\"Just intonation scales\">\n            <option value=\"partch43\">Harry Partch 43-tone</option>\n            <option value=\"carlossuperjust\">Wendy Carlos Super Just</option>\n            <option value=\"gradycentaur\">Kraig Grady Centaur (7-limit)</option>\n            <option value=\"gradycentauras\">Kraig Grady Centaura Subharmonic (11-limit)</option>\n            <option value=\"gradycentaurah\">Kraig Grady Centaura Harmonic (11-limit)</option>\n          </optgroup>\n          <optgroup label=\"Equal temperament subsets\">\n            <option value=\"11machine6\">11edo machine[6]</option>\n            <option value=\"13glacial7\">13edo glacial[7]</option>\n            <option value=\"13father8\">13edo father[8]</option>\n            <option value=\"15blackwood10\">15edo blackwood[10]</option>\n            <option value=\"16mavila7\">16edo mavila[7]</option>\n            <option value=\"17superpyth12\">17edo superpyth[12]</option>\n            <option value=\"17rast\">17edo Rast</option>\n            <option value=\"22porcupine8\">22edo porcupine[8]</option>\n            <option value=\"22orwell9\">22edo orwell[9]</option>\n            <option value=\"22pajara12\">22edo pajara[12]</option>\n            <option value=\"26lemba10\">26edo lemba[10]</option>\n            <option value=\"26flattone12\">26edo flattone[12]</option>\n            <option value=\"31meantone19\">31edo meantone[19]</option>\n            <option value=\"46sensi11\">46edo sensi[11]</option>\n            <option value=\"313island9\">313edo island[9]</option>\n          </optgroup>\n          <optgroup label=\"Non-octave scales\">\n            <option value=\"bohlenpierceeq\">Bohlen-Pierce equal (13ed3)</option>\n            <option value=\"bohlenpierceji\">Bohlen-Pierce just</option>\n            <option value=\"carlosalpha\">Wendy Carlos Alpha</option>\n            <option value=\"carlosbeta\">Wendy Carlos Beta</option>\n            <option value=\"carlosgamma\">Wendy Carlos Gamma</option>\n            <option value=\"65cet\">65 cent Equal Temperament</option>\n            <option value=\"88cet\">88 cent Equal Temperament</option>\n          </optgroup>\n        </select>\n      </div>\n    </form>\n  </div>\n\n  <!-- Modify Modals -->\n  <div id=\"modal_modify_stretch\" class=\"modal\" title=\"Stretch/compress tuning\">\n    <p>This applies a stretching or compression evenly across the whole scale.<br />Entering 1 will cause no change;\n      entering 2 will make every interval twice as large.</p>\n    <form>\n      <label>Stretch ratio</label>\n      <div class=\"form-group\">\n        <input id=\"input_stretch_ratio\" name=\"\" type=\"number\" class=\"form-control\" value=\"1.005\" min=\"0.0001\"\n          max=\"99999\" />\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_modify_random_variance\" class=\"modal\" title=\"Random variance\">\n    <p>This will add a random amount of detuning to each note of the scale.</p>\n    <form>\n      <label>Maximum variance in cents</label>\n      <div class=\"form-group\">\n        <input id=\"input_cents_max_variance\" name=\"\" type=\"number\" class=\"form-control\" value=\"10\" min=\"0\"\n          max=\"99999\" />\n      </div>\n\n      <div class=\"checkbox\"\n        title=\"By default, the 'octave' won't be detuned. This prevents the scale sound progressively more out-of-tune as you go up/down by octaves. Check this box option to over-ride this.\">\n        <label>\n          <input id=\"input_checkbox_vary_period\" type=\"checkbox\" /> Vary the octave\n        </label>\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_modify_mode\" class=\"modal\" title=\"Subset\">\n    <p>Select a subset from the current scale.</p>\n    <form>\n      <label>Mode</label>\n      <div class=\"form-group\">\n        <div class=\"input-group\">\n          <input id=\"input_modify_mode\" name=\"\" type=\"text\" class=\"form-control\" value=\"\" placeholder=\"2 2 1 2 2 2 1\" />\n          <div class=\"input-group-addon\">\n            <span id=\"input_modify_mode_counter\"></span>\n          </div>\n        </div>\n        <div class=\"form-row\">\n          <button class=\"btn btn-default\" id=\"input_mode_step_left\" type=\"button\">&laquo</button>\n          <button class=\"btn btn-default\" id=\"input_mode_step_right\" type=\"button\">&raquo</button>\n        </div>\n        <div class=\"radio\">\n          <label><input type=\"radio\" name=\"mode_type\" value=\"intervals\" checked>Intervals (e.g. 2 2 1 2 2 2 1)</label>\n        </div>\n        <div class=\"radio\">\n          <label><input type=\"radio\" name=\"mode_type\" value=\"frombase\">From base note (e.g. 2 4 5 7 9 11 12)</label>\n        </div>\n        <div class=\"radio\">\n          <label><input type=\"radio\" name=\"mode_type\" value=\"mos\">MOS Mode (select a degree to stack)</label>\n        </div>\n        <div id=\"mos_mode_options\">\n          <div class=\"form-row\">\n            <div class=\"form-group col-md-6\">\n              <label> Degree </label>\n              <select class=\"form-control\" id=\"modal_modify_mos_degree\"></select>\n            </div>\n            <div class=\"form-group col-md-6\">\n              <label> Size </label>\n              <select class=\"form-control\" id=\"modal_modify_mos_size\"></select>\n            </div>\n          </div>\n        </div>\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_modify_sync_beating\" class=\"modal\" title=\"Tempo-sync beating\">\n    <a href=\"guide.htm#tempo-sync-beating\" target=\"_blank\"><span class=\"glyphicon glyphicon-question-sign\"\n        aria-hidden=\"true\" style=\"float:right;\"></span></a>\n    <form>\n      <label>BPM</label>\n      <div class=\"form-group\">\n        <input id=\"input_modify_sync_beating_bpm\" name=\"\" type=\"number\" class=\"form-control\" value=\"100\"\n          placeholder=\"100\" />\n      </div>\n\n      <label>Resolution</label>\n      <div class=\"form-group\">\n        <select id=\"select_sync_beating_resolution\" name=\"\" class=\"form-control\">\n          <option value=\"16\">16 (2^4)</option>\n          <option value=\"24\">24 (2^3 . 3)</option>\n          <option value=\"27\">27 (3^3)</option>\n          <option value=\"30\">30 (2 . 3 . 5)</option>\n          <option value=\"32\">32 (2^5)</option>\n          <option value=\"48\">48 (2^4 . 3)</option>\n          <option value=\"64\" selected>64 (2^6)</option>\n          <option value=\"96\">96 (2^5 . 3)</option>\n          <option value=\"128\">128 (2^7)</option>\n          <option value=\"144\">144 (2^4 . 3^2)</option>\n          <option value=\"192\">192 (2^6 . 3)</option>\n          <option value=\"256\">256 (2^8)</option>\n          <option value=\"512\">512 (2^9)</option>\n          <option value=\"1024\">1024 (2^10)</option>\n          <option value=\"2048\">2048 (2^11)</option>\n          <option value=\"2310\">2310 (2 . 3 . 5 . 7 . 11)</option>\n        </select>\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_approximate_intervals\" class=\"modal\" title=\"Approximate by ratios\">\n    <p>Select a ratio that approximates the interval.</p>\n    <form>\n      <label>Scale Degree</label>\n      <div class=\"form-group\">\n        <input id=\"input_scale_degree\" name=\"\" type=\"number\" class=\"form-control\" value=\"1\" min=\"1\" max=\"128\" />\n      </div>\n      <label>Interval</label>\n      <div class=\"form-group\">\n        <input id=\"input_interval_to_approximate\" name=\"\" tyep=\"number\" class=\"form-control\" value=\"\" />\n      </div>\n      <div class=\"form-group\">\n        <label>Approximation</label>\n        <select class=\"form-control\" id=\"approximation_selection\"></select>\n      </div>\n      <div class=\"form-group\">\n        <label>\n          <input id=\"input_show_convergents\" type=\"checkbox\"> Only show convergents</input>\n        </label>\n      </div>\n      <div class=\"form-row\">\n        <div class=\"form-group col-md-6\">\n          <label>Min Error</label>\n          <input id=\"input_min_error\" name=\"\" type=\"number\" class=\"form-control\" value=\"0.0\" min=\"0\"\n            max=\"200.0\">cents</input>\n        </div>\n        <div class=\"form-group col-md-6\">\n          <label>Max Error</label>\n          <input id=\"input_max_error\" name=\"\" type=\"number\" class=\"form-control\" value=\"15.0\" min=\"1.0\"\n            max=\"200.0\">cents</input>\n        </div>\n      </div>\n      <div class=\"form-row\">\n        <div class=\"form-group col-md-6\">\n          <label>Min Prime Limit</label>\n          <input id=\"input_approx_min_prime\" name=\"\" type=\"number\" class=\"form-control\" value=\"2\" min=\"0\"\n            max=\"7919\" />\n        </div>\n        <div class=\"form-group col-md-6\">\n          <label>Max Prime Limit</label>\n          <input id=\"input_approx_max_prime\" name=\"\" type=\"number\" class=\"form-control\" value=\"31\" min=\"0\"\n            max=\"7919\" />\n        </div>\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_approximate_harmonics\" class=\"modal\" title=\"Approximate by harmonics\">\n    <form>\n      <label>Denonimator</label>\n      <div class=\"form-group\">\n        <input id=\"input_approx_harm_denominator\" name=\"\" type=\"number\" class=\"form-control\" value=\"128\" min=\"1\" max=\"1000000\" />\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_approximate_subharmonics\" class=\"modal\" title=\"Approximate by subharmonics\">\n    <p>Note: if you enter an odd number, the interval of equivalence will change (e.g. mistuned octaves)</p>\n    <form>\n      <label>Numerator</label>\n      <div class=\"form-group\">\n        <input id=\"input_approx_subharm_numerator\" name=\"\" type=\"number\" class=\"form-control\" value=\"128\" min=\"1\" max=\"1000000\" />\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_equalize\" class=\"modal\" title=\"Equalize\">\n    <p>Divides your interval of equivalence into an equal number of steps, then rounds each interval in your scale to the nearest equal step.</p>\n    <form>\n      <label>Equal divisions</label>\n      <div class=\"form-group\">\n        <input id=\"input_equalize_divisions\" name=\"\" type=\"number\" class=\"form-control\" value=\"\" min=\"1\" max=\"1000000\" />\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_modify_octave_reduce\" class=\"modal\" title=\"Reduce\">\n    <p>Makes your entire scale fit within a desired 'modulus' interval, typically 2/1. Intervals in your scale which are larger than the modulus will wrap around, leaving only a remainder.</p>\n    <form>\n      <label>Modulus</label>\n      <div class=\"form-group\">\n        <input id=\"input_reduce_octave\" name=\"\" type=\"text\" class=\"form-control\" value=\"2/1\" placeholder=\"2/1\" />\n      </div>\n      <div class=\"form-group\">\n        <label>\n          <input id=\"input_reduce_also_sort\" type=\"checkbox\" checked=\"checked\" /> Sort resulting scale ascendingly\n        </label>\n      </div>\n    </form>\n  </div>\n\n  <div id=\"modal_modify_rotate\" class=\"modal\" title=\"Rotate\">\n    <p>Rotates the mode of your scale.</p>\n    <p>The resulting scale will be sorted ascendingly.</p>\n    <form>\n      <label>New 1/1</label>\n      <div class=\"form-group\">\n        <select id=\"input_rotate_new_1_1\" class=\"form-control\">\n        </select>\n      </div>\n    </form>\n  </div>\n\n  <!-- Export Modals -->\n  <div id=\"modal_share_url\" class=\"modal\" title=\"Share scale as URL\">\n    <p>Share your scale using the sharing link.</p>\n    <form>\n      <div class=\"form-group\">\n        <input id=\"input_share_url\" name=\"\" type=\"text\" class=\"form-control\" value=\"\" readonly />\n      </div>\n    </form>\n    <p class=\"social-icons\">\n      <a class=\"social-icons-email\" href=\"#\" title=\"Send scale via email\"><span class=\"socicon-mail\"></span></a>\n      <a class=\"social-icons-twitter\" href=\"#\" title=\"Tweet this scale\"><span class=\"socicon-twitter\"></span></a>\n    </p>\n  </div>\n  <div id=\"modal_reaper_named_notes\" class=\"modal\" title=\"Reaper Note Name Map\">\n    <p>Select the options for the note map.</p>\n    <form>\n        <div class=\"form-group\">\n            <label>Pitch Format:</label> \n            <select id=\"input_reaper_pitch_format\" class=\"form-control\">\n                <option value=\"scale data\">Scale Data</option>\n                <option value=\"cents\">Cents</option>    \n                <option value=\"freq\">Frequencies</option>\n                <option value=\"decimal\">Decimal Ratio</option>\n                <option value=\"degree\">Scale Degree</option>\n            </select>\n        </div>\n        <div class=\"form-group\">\n            <label>Period options:</label>\n            <div class=\"checkbox\">\n              <label title=\"Show the number of periods away from the base note next to the pitch\">\n                <input id=\"input_reaper_show_period_numbers\" type=\"checkbox\" name=\"period-format\" checked> Show period number</input>\n              </label>\n            </div>\n            <div class=\"checkbox\">\n              <label title=\"Transpose the scale intervals by the period across the whole range of notes\">\n                <input id=\"input_reaper_calculate_periods\" type=\"checkbox\" name=\"period-format\"> Calculate period in pitch</input>\n              </label>\n            </div>\n        </div>\n        <div id=\"modal_reaper_root_period_group\" class=\"form-group\">\n            <label title=\"The number of periods from which the base note is offset\">Base Period Number: </label>\n            <input id=\"input_reaper_root_period\" type=\"number\" class=\"form-control\" value=\"0\"></input>\n        </div>\n        <div id=\"modal_reaper_root_cents_group\" class=\"form-group\">\n            <label title=\"An offset of cents at which the base note set\">Base Cents Value: </label>\n            <input id=\"input_reaper_root_cents\" type=\"number\" class=\"form-control\" value=\"0.0\"></input>\n        </div>\n        <div id=\"modal_reaper_root_degree_group\" class=\"form-group\">\n            <label title=\"An offset of degrees at which the base note is set\">Base Degree Value: </label>\n            <input id=\"input_reaper_root_degree\" type=\"number\" class=\"form-control\" value=\"0\"></input>\n        </div>\n    </form>\n  </div>\n\n  <!-- MIDI Settings modal -->\n  <div id=\"modal_midi_settings\" class=\"modal\" title=\"MIDI settings\">\n    <div style=\"display:flex\">\n      <div class=\"form-group\" style=\"flex-grow:1\">\n        <label for=\"midi-enabler\">MIDI</label>\n        <button type=\"button\" class=\"btn btn-danger\" id=\"midi-enabler\">off</button>\n      </div>\n      <div class=\"form-group\">\n        <button type=\"button\" class=\"btn btn-success\" id=\"velocity-toggler\">velocity: on</button>\n      </div>\n    </div>\n    <form>\n      <div class=\"form-group\">\n        <label>Input device ports</label>\n      </div>\n      <div class=\"inputs\"></div>\n\n      <div class=\"form-group\">\n        <label>Output device ports</label>\n      </div>\n      <div class=\"outputs\"></div>\n\n      <div class=\"form-group\">\n        <label>Other settings</label>\n      </div>\n      <div class=\"settings\">\n        <div class=\"row\">\n          <div class=\"checkbox-wrapper\">\n            <input id=\"input_midi_whitemode\" type=\"checkbox\" />\n          </div>\n          <label for=\"input_midi_whitemode\">Map to white keys only</label>\n        </div>\n      </div>\n    </form>\n  </div>\n\n  <!-- About Scale Workshop modal -->\n  <div id=\"modal_about_scale_workshop\" class=\"modal text-center\" title=\"About Scale Workshop\">\n    <img src=\"src/assets/favicon/android-chrome-192x192.png\" style=\"margin-top: 2em;\" />\n    <h2 id=\"about_version\"></h2>\n    <p><em>Because there are more than 12 notes</em></p>\n    <hr />\n    <p>Sevish, Lajos Mészáros, Vincenzo Sicurella, Lumi Pakkanen, Scott Thompson, Carl Lumma, Tobia, Azorlogh</p>\n  </div>\n\n  <!-- Play virtual keyboard -->\n  <table id=\"virtual-keyboard\">\n    <tr class=\"hidden-xs hidden-sm\">\n      <td data-coord=\"[3,0]\"></td>\n      <td data-coord=\"[3,1]\"></td>\n      <td data-coord=\"[3,2]\"></td>\n      <td data-coord=\"[3,3]\"></td>\n      <td data-coord=\"[3,4]\"></td>\n      <td data-coord=\"[3,5]\"></td>\n      <td data-coord=\"[3,6]\"></td>\n      <td data-coord=\"[3,7]\"></td>\n      <td data-coord=\"[3,8]\"></td>\n      <td data-coord=\"[3,9]\"></td>\n      <td data-coord=\"[3,10]\"></td>\n      <td data-coord=\"[3,11]\"></td>\n      <td data-coord=\"[3,12]\"></td>\n    </tr>\n    <tr>\n      <td data-coord=\"[2,0]\"></td>\n      <td data-coord=\"[2,1]\"></td>\n      <td data-coord=\"[2,2]\"></td>\n      <td data-coord=\"[2,3]\"></td>\n      <td data-coord=\"[2,4]\"></td>\n      <td data-coord=\"[2,5]\"></td>\n      <td data-coord=\"[2,6]\"></td>\n      <td data-coord=\"[2,7]\"></td>\n      <td data-coord=\"[2,8]\"></td>\n      <td data-coord=\"[2,9]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[2,10]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[2,11]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[2,12]\" class=\"hidden-xs hidden-sm\"></td>\n    </tr>\n    <tr>\n      <td data-coord=\"[1,0]\"></td>\n      <td data-coord=\"[1,1]\"></td>\n      <td data-coord=\"[1,2]\"></td>\n      <td data-coord=\"[1,3]\"></td>\n      <td data-coord=\"[1,4]\"></td>\n      <td data-coord=\"[1,5]\"></td>\n      <td data-coord=\"[1,6]\"></td>\n      <td data-coord=\"[1,7]\"></td>\n      <td data-coord=\"[1,8]\"></td>\n      <td data-coord=\"[1,9]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[1,10]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[1,11]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[1,12]\" class=\"hidden-xs hidden-sm\"></td>\n    </tr>\n    <tr>\n      <td data-coord=\"[0,0]\"></td>\n      <td data-coord=\"[0,1]\"></td>\n      <td data-coord=\"[0,2]\"></td>\n      <td data-coord=\"[0,3]\"></td>\n      <td data-coord=\"[0,4]\"></td>\n      <td data-coord=\"[0,5]\"></td>\n      <td data-coord=\"[0,6]\"></td>\n      <td data-coord=\"[0,7]\"></td>\n      <td data-coord=\"[0,8]\"></td>\n      <td data-coord=\"[0,9]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[0,10]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[0,11]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[0,12]\" class=\"hidden-xs hidden-sm\"></td>\n    </tr>\n    <tr>\n      <td data-coord=\"[-1,0]\"></td>\n      <td data-coord=\"[-1,1]\"></td>\n      <td data-coord=\"[-1,2]\"></td>\n      <td data-coord=\"[-1,3]\"></td>\n      <td data-coord=\"[-1,4]\"></td>\n      <td data-coord=\"[-1,5]\"></td>\n      <td data-coord=\"[-1,6]\"></td>\n      <td data-coord=\"[-1,7]\"></td>\n      <td data-coord=\"[-1,8]\"></td>\n      <td data-coord=\"[-1,9]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[-1,10]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[-1,11]\" class=\"hidden-xs hidden-sm\"></td>\n      <td data-coord=\"[-1,12]\" class=\"hidden-xs hidden-sm\"></td>\n    </tr>\n    <tr class=\"hidden-xs hidden-sm\">\n      <td data-coord=\"[-2,0]\"></td>\n      <td data-coord=\"[-2,1]\"></td>\n      <td data-coord=\"[-2,2]\"></td>\n      <td data-coord=\"[-2,3]\"></td>\n      <td data-coord=\"[-2,4]\"></td>\n      <td data-coord=\"[-2,5]\"></td>\n      <td data-coord=\"[-2,6]\"></td>\n      <td data-coord=\"[-2,7]\"></td>\n      <td data-coord=\"[-2,8]\"></td>\n      <td data-coord=\"[-2,9]\"></td>\n      <td data-coord=\"[-2,10]\"></td>\n      <td data-coord=\"[-2,11]\"></td>\n      <td data-coord=\"[-2,12]\"></td>\n    </tr>\n  </table>\n\n  <!-- Dependencies -->\n  <script src=\"src/lib/jquery-3.2.1.min.js\"></script>\n  <script src=\"src/lib/bootstrap-3.3.7-dist/js/bootstrap.min.js\"></script>\n  <script src=\"src/lib/jquery-ui-1.12.1/external/jquery/jquery.js\"></script>\n  <script src=\"src/lib/jquery-ui-1.12.1/jquery-ui.min.js\"></script>\n  <script src=\"src/lib/eventemitter3.js\"></script>\n  <script src=\"src/lib/ramda-0.27.1.min.js\"></script>\n  <script src=\"src/lib/jszip.min.js\"></script>\n  <script src=\"src/lib/decimal.js\"></script>\n  <script src=\"src/lib/webmidi-3.0.19.iife.min.js\"></script>\n\n  <!-- Scale Workshop scripts -->\n  <script src=\"src/js/state/state.js?v=1.5\"></script>\n  <script src=\"src/js/constants.js?v=1.5\"></script>\n  <script src=\"src/js/helpers.js?v=1.5\"></script>\n  <script src=\"src/js/scaleworkshop.js?v=1.5\"></script>\n  <script src=\"src/js/ui.js?v=1.5\"></script>\n  <script src=\"src/js/generators.js?v=1.5\"></script>\n  <script src=\"src/js/modifiers.js?v=1.5\"></script>\n  <script src=\"src/js/exporters.js?v=1.5\"></script>\n  <script src=\"src/js/graphics.js?v=1.5\"></script>\n  <script src=\"src/js/keymap.js?v=1.5\"></script>\n  <script src=\"src/js/synth/Voice.js?v=1.5\"></script>\n  <script src=\"src/js/synth/Delay.js?v=1.5\"></script>\n  <script src=\"src/js/synth/Synth.js?v=1.5\"></script>\n  <script src=\"src/js/synth.js?v=1.5\"></script>\n\n  <script src=\"src/js/midi/constants.js\"></script>\n  <script src=\"src/js/midi/commands.js?v=1.5\"></script>\n  <script src=\"src/js/midi/math.js?v=1.5\"></script>\n  <script src=\"src/js/midi/ui.js?v=1.5\"></script>\n  <script src=\"src/js/midi/midi.js?v=1.5\"></script>\n\n  <script src=\"src/js/events.js?v=1.5\"></script>\n  <script src=\"src/js/state/reactions.js?v=1.5\"></script>\n  <script src=\"src/js/state/reactions-dom.js?v=1.5\"></script>\n  <script src=\"src/js/state/actions.js?v=1.5\"></script>\n  <script src=\"src/js/state/actions-dom.js?v=1.5\"></script>\n  <script src=\"src/js/state/on-ready.js?v=1.5\"></script>\n  <script src=\"src/js/user.js?v=1.5\"></script>\n</body>\n</html>"
  },
  {
    "path": "src/assets/favicon/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig>\n    <msapplication>\n        <tile>\n            <square150x150logo src=\"/mstile-150x150.png\"/>\n            <TileColor>#00a300</TileColor>\n        </tile>\n    </msapplication>\n</browserconfig>\n"
  },
  {
    "path": "src/assets/favicon/manifest.json",
    "content": "{\n    \"name\": \"\",\n    \"icons\": [\n        {\n            \"src\": \"/android-chrome-192x192.png\",\n            \"sizes\": \"192x192\",\n            \"type\": \"image/png\"\n        },\n        {\n            \"src\": \"/android-chrome-512x512.png\",\n            \"sizes\": \"512x512\",\n            \"type\": \"image/png\"\n        }\n    ],\n    \"theme_color\": \"#ffffff\",\n    \"background_color\": \"#ffffff\",\n    \"display\": \"standalone\"\n}"
  },
  {
    "path": "src/css/style-dark.css",
    "content": "/* \"Night Mode\" dark theme styles */\n\nbody.dark {\n  background-color: #000;\n  color: #bbb;\n}\n\n.dark p, .dark label {\n  color: #bbb;\n}\n\n.dark hr {\n  border-color: #222;\n}\n\n.dark .ui-tooltip {\n  background-color: #000;\n}\n\n.dark #header-mobile {\n  background-color: #111;\n}\n\n.dark canvas {\n  filter: invert(1);\n}\n\n/* Interactable elements */\n\n.dark .navbar button, .dark .navbar-inverse .navbar-toggle:focus, .dark .navbar-inverse .navbar-toggle:hover, .dark .navbar-collapse {\n  background-color: #111;\n}\n\n.dark input:not(.btn), .dark textarea, .dark select {\n  background-color: #222;\n  color: #bbb;\n  border-color: #888;\n}\n\n.dark .input-group-addon {\n  background-color: #000;\n  color: #bbb;\n}\n\n.dark .btn-default, .dark .ui-button {\n  background-color: #222;\n  color: #bbb;\n}\n\n/* Accordion menu */\n\n.dark .ui-accordion-header {\n  background-color: #222;\n  color: #bbb;\n}\n\n.dark .ui-accordion-content {\n  background-color: #000;\n  color: #bbb;\n}\n\n/* Navbar menu */\n\n.dark ul.dropdown-menu {\n  background-color: #000;\n  border: 1px solid #444;\n  border-top: none;\n}\n\n.dark .dropdown-menu > li > a {\n  color: #bbb;\n}\n\n.dark .dropdown-menu>li>a:focus, .dark .dropdown-menu>li>a:hover {\n  background-color: #222;\n}\n\n.dark .dropdown-menu .divider {\n  background-color: #222;\n}\n\n.dark .ui-widget-overlay {\n  background: black;\n}\n\n/* Modal dialogs */\n\n.dark .ui-widget-content {\n  color: #bbb;\n}\n\n.dark .ui-dialog a {\n  color: #ddd;\n}\n\n.dark .ui-dialog {\n  box-shadow: #444 0px 0px 70px;\n}\n\n.dark .ui-dialog, .dark .ui-dialog-titlebar {\n  background-color: #000;\n  color: #bbb;\n  border: none;\n  border-radius: 0px;\n}\n\n.dark .ui-dialog-titlebar {\n  border-bottom: 1px solid #888;\n}\n\n.dark button.ui-button.ui-corner-all.ui-widget.ui-button-icon-only.ui-dialog-titlebar-close { /* modal close buttons */\n  background: #000;\n  border: none;\n}\n\n.dark .ui-dialog-buttonpane {\n  background: #000;\n  border: none;\n}\n\n.dark .socicon-mail {\n  color: #bbb;\n}\n\n/* Virtual Keyboard */\n\n.dark #virtual-keyboard {\n  background-color: black;\n}\n.dark #virtual-keyboard td {\n  border: 1px solid grey;\n}\n\n/* Tuning Table */\n\n.dark #tuning-table th, .dark #tuning-table td {\n  border-color: #333;\n}\n\n.dark #tuning-table th:hover, .dark #tuning-table tr:hover {\n  background-color: #222;\n}\n\n.dark #tuning-table tr.warning td {\n  background-color: #192d37; /*#fcf8e3*/\n}\n\n.dark #tuning-table tr.info td {\n  background-color: #4c4823; /*#d9edf7*/\n}\n\n.dark tr.bg-playnote td {\n  background-color: #1f4018 !important; /*#dff0d8*/\n}\n\n/*\n * NON-MOBILE\n */\n@media (min-width: 768px) {\n\n  .dark .navbar {\n    background-color: #111;\n  }\n\n}\n@media (min-width: 992px) {\n\n\n\n}\n@media (max-width: 991px) {\n\n\n\n}\n"
  },
  {
    "path": "src/css/style.css",
    "content": "img,\ncanvas {\n  max-width: 100%;\n}\n\n.helpicon {\n  color: #999;\n  font-size: 0.9em;\n}\n\n.hidden {\n  display: none;\n}\n\n.ui-widget-overlay {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  background: white;\n  opacity: 0.5;\n}\n\n/* Make jQuery UI colors match with Bootstrap */\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n  color: black;\n  background-color: #eee;\n  border-color: #ccc;\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n  color: black;\n  background-color: #eee;\n  border-color: #ccc;\n}\n\nh3.ui-accordion-header {\n  font-weight: bold;\n}\n\ntextarea {\n  resize: vertical;\n}\n\n/* normal cursor when hovering over navbar */\n.navbar a {\n  cursor: default;\n}\n\n.navbar {\n  z-index: 4;\n  position: fixed;\n  left: 0px;\n  top: 0px;\n  border: none;\n  width: 100%;\n}\n\n.navbar button {\n  margin: 0px;\n  border-radius: unset;\n  border: none;\n  background-color: #333;\n  width: 50px;\n}\n\n.navbar-toggle .icon-bar {\n  width: 30px;\n}\n\n.navbar-inverse {\n  background-color: unset;\n}\n\n.navbar-toggle {\n  padding: 10px;\n}\n\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 12px;\n}\n\n.navbar-header {\n  padding-left: 0px !important;\n}\n\n.navbar-collapse {\n  background-color: #333;\n  border: none;\n  width: calc(100vw - 50px);\n  position: fixed;\n  top: 0px;\n  max-height: 100vh;\n}\n\n.navbar-brand {\n  display: none;\n  cursor: default;\n}\n\n.nav > li {\n  width: 49%;\n  display: inline-block;\n}\n\n.nav > li:hover,\n.navbar-brand:hover {\n  background-color: #222;\n}\n\n.nav > li.open {\n  width: 100%;\n}\n\n#header-mobile {\n  background-color: #333;\n  width: 100%;\n  height: 50px;\n  margin-top: -20px;\n}\n\n#header-mobile h1 {\n  font-size: 12pt;\n  font-weight: normal;\n  color: white;\n  padding: 17px;\n}\n\nbody > .container-fluid > .row {\n  margin-top: 20px;\n}\n\ninput#btn_frequency_auto,\ninput#btn_key_colors_auto {\n  margin-top: 3px;\n}\n\n#txt_name {\n  font-size: 1.4em;\n  background-color: unset;\n}\n\n#col-tuning-table {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n#tuning-table {\n  margin-bottom: 4px;\n}\n\n.table-condensed > tbody > tr > td,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > td,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > thead > tr > th {\n  padding: 3px 5px;\n}\n\ntr.bg-playnote td {\n  background-color: #dff0d8 !important;\n}\n\n#tuning-table td,\n#tuning-table th {\n  text-align: center;\n}\n\np.social-icons {\n  text-align: center;\n  font-size: 1.5em;\n}\n.social-icons .socicon-twitter {\n  color: #4da7de;\n}\n\ndiv#qwerty-indicator {\n  padding: 1em;\n  display: none;\n}\n\n#btn_panic {\n  display: none;\n}\n\ndiv#splash {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100vw;\n  height: 100vh;\n  background-color: white;\n  z-index: 10;\n  display: table;\n}\n\ndiv#splash-center {\n  display: table-cell;\n  vertical-align: middle;\n  text-align: center;\n}\ndiv#splash-center img {\n  max-width: 70vw;\n  height: auto;\n  box-shadow: #aaa 0px 0px 40px;\n}\n\n#modal_load_preset_scale optgroup + optgroup {\n  margin-top: 1em;\n}\n\n/* Virtual keyboard */\n\n#virtual-keyboard {\n  background-color: white;\n  position: fixed;\n  top: 50px;\n  left: 0;\n  width: 100vw;\n  min-width: 500px; /* this stops the keys getting too close together for portrait mobile users */\n  height: calc(100vh - 50px);\n  display: none;\n  z-index: 2;\n}\n#virtual-keyboard td {\n  text-align: center;\n  vertical-align: middle;\n  border: 1px solid grey;\n  font-size: 0.6em;\n  user-select: none;\n  cursor: pointer;\n}\n#virtual-keyboard td p {\n  pointer-events: none;\n  word-break: break-word;\n  line-height: 1.1em;\n  color: #888;\n}\n\n#virtual-keyboard .key:hover {\n  background: linear-gradient(\n    0deg,\n    rgba(255, 255, 255, 0) 0%,\n    rgba(255, 0, 0, 0.5) 50%,\n    rgba(255, 255, 255, 0) 100%\n  );\n}\n#virtual-keyboard .key.active {\n  background: linear-gradient(\n    0deg,\n    rgba(0, 0, 0, 0) 0%,\n    rgba(0, 255, 0, 0.5) 50%,\n    rgba(0, 0, 0, 0) 100%\n  );\n}\n\n/*\n * Fullscreen variant for jQueryUI modal widget\n */\n.fullscreen-modal {\n  top: 0px !important;\n  left: 0px !important;\n  width: 100vw !important;\n  height: 100vh !important;\n  position: fixed;\n}\n.fullscreen-modal .ui-dialog-buttonpane {\n}\n\n/*\n * JQUERY MODAL UI MOBILE-ONLY FIXES\n */\n@media (max-width: 420px), /* OR */ (max-height: 420px) {\n  .ui-dialog {\n    top: 0px !important;\n    left: 0px !important;\n    width: 100vw !important;\n    max-height: 100vh !important;\n    position: fixed;\n    overflow-x: scroll;\n  }\n}\n\n/*\n * NON-MOBILE\n */\n@media (min-width: 768px) {\n  body > .container-fluid > .row {\n    margin-top: 0px;\n  }\n\n  div#qwerty-indicator {\n    display: block;\n  }\n\n  .col-main {\n    /* main columns of the Scale Workshop UI */\n    height: calc(100vh - 70px);\n    overflow-y: auto;\n  }\n\n  #btn_panic {\n    display: unset;\n  }\n\n  #virtual-keyboard {\n    font-size: 0.9em;\n    height: calc(100vh - 50px);\n  }\n\n  #tuning-table td.key-color,\n  #tuning-table th.key-color {\n    border-left: 1px solid #ddd;\n  }\n\n  .navbar {\n    border-radius: 0px;\n  }\n\n  .navbar {\n    z-index: 4;\n    position: relative;\n    left: unset;\n    top: unset;\n    background-color: #222;\n    border: none;\n  }\n\n  .navbar-header {\n    padding-left: 0px !important;\n  }\n\n  .navbar-collapse {\n    background-color: unset;\n    position: unset;\n  }\n\n  .navbar-brand {\n    display: block;\n  }\n\n  .nav > li {\n    width: unset;\n    display: block;\n  }\n\n  .nav > li.open {\n    width: unset;\n  }\n}\n@media (min-width: 992px) {\n  .col-sub {\n    /* main columns of the Scale Workshop UI */\n    height: calc(100vh - 70px);\n    overflow-y: auto;\n  }\n\n  .navbar {\n    border-radius: 0px;\n  }\n}\n@media (max-width: 991px) {\n  #col-tuning-table {\n    margin-top: 1em;\n    padding-left: 0px;\n    padding-right: 0px;\n  }\n}\n\n#modal_midi_settings {\n  user-select: none;\n}\n#modal_midi_settings .form-group {\n  margin-top: 20px;\n}\n#modal_midi_settings .settings .row {\n  display: flex;\n  margin: 0;\n}\n#modal_midi_settings .device {\n  display: flex;\n  align-items: center;\n}\n#modal_midi_settings .checkbox-wrapper {\n  padding: 0 10px;\n}\n#modal_midi_settings .device input[type='checkbox'] {\n  margin: 0;\n}\n#modal_midi_settings .device h4 {\n  flex-grow: 1;\n  font-size: unset;\n}\n#modal_midi_settings .device h4 label {\n  margin: 0;\n  font-weight: unset;\n}\n#modal_midi_settings .channels {\n  display: flex;\n  flex-wrap: wrap;\n}\n#modal_midi_settings .channels label, #modal_midi_settings .settings label {\n  font-weight: unset;\n}\n#modal_midi_settings .device + .device {\n  margin-top: 2em;\n}\n#modal_midi_settings .channel {\n  display: flex;\n  flex-direction: column;\n  padding: 0 10px;\n  align-items: center;\n}\n#modal_midi_settings .channel input[type='checkbox'] {\n  margin: 0;\n}\n"
  },
  {
    "path": "src/js/constants.js",
    "content": "const LINE_TYPE = {\n  CENTS: 'cents',\n  DECIMAL: 'decimal',\n  RATIO: 'ratio',\n  N_OF_EDO: 'n of edo',\n  INVALID: 'invalid'\n}\n\nconst SEMITONE_RATIO_IN_12_EDO = Math.pow(2, 1 / 12)\n\nconst MNLG_OCTAVESIZE = 12\nconst MNLG_SCALESIZE = 128\nconst MNLG_MAXCENTS = 12800\nconst MNLG_A_REF = { val: 6900, ind: 69, freq: 440.0 }\nconst MNLG_C_REF = { val: 6000, ind: 60, freq: 261.6255653 }\n\n// prettier-ignore\nconst PRIMES = [\n  2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,\n  101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,\n  211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293,\n  307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397,\n  401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499,\n  503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599,\n  601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691,\n  701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797,\n  809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887,\n  907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997,\n  1009, 1013, 1019, 1021, 1031, 1033, 1039, 1049, 1051, 1061, 1063, 1069, 1087, 1091, 1093, 1097,\n  1103, 1109, 1117, 1123, 1129, 1151, 1153, 1163, 1171, 1181, 1187, 1193,\n  1201, 1213, 1217, 1223, 1229, 1231, 1237, 1249, 1259, 1277, 1279, 1283, 1289, 1291, 1297,\n  1301, 1303, 1307, 1319, 1321, 1327, 1361, 1367, 1373, 1381, 1399,\n  1409, 1423, 1427, 1429, 1433, 1439, 1447, 1451, 1453, 1459, 1471, 1481, 1483, 1487, 1489, 1493, 1499,\n  1511, 1523, 1531, 1543, 1549, 1553, 1559, 1567, 1571, 1579, 1583, 1597,\n  1601, 1607, 1609, 1613, 1619, 1621, 1627, 1637, 1657, 1663, 1667, 1669, 1693, 1697, 1699,\n  1709, 1721, 1723, 1733, 1741, 1747, 1753, 1759, 1777, 1783, 1787, 1789,\n  1801, 1811, 1823, 1831, 1847, 1861, 1867, 1871, 1873, 1877, 1879, 1889,\n  1901, 1907, 1913, 1931, 1933, 1949, 1951, 1973, 1979, 1987, 1993, 1997, 1999,\n  2003, 2011, 2017, 2027, 2029, 2039, 2053, 2063, 2069, 2081, 2083, 2087, 2089, 2099,\n  2111, 2113, 2129, 2131, 2137, 2141, 2143, 2153, 2161, 2179,\n  2203, 2207, 2213, 2221, 2237, 2239, 2243, 2251, 2267, 2269, 2273, 2281, 2287, 2293, 2297,\n  2309, 2311, 2333, 2339, 2341, 2347, 2351, 2357, 2371, 2377, 2381, 2383, 2389, 2393, 2399,\n  2411, 2417, 2423, 2437, 2441, 2447, 2459, 2467, 2473, 2477,\n  2503, 2521, 2531, 2539, 2543, 2549, 2551, 2557, 2579, 2591, 2593,\n  2609, 2617, 2621, 2633, 2647, 2657, 2659, 2663, 2671, 2677, 2683, 2687, 2689, 2693, 2699,\n  2707, 2711, 2713, 2719, 2729, 2731, 2741, 2749, 2753, 2767, 2777, 2789, 2791, 2797,\n  2801, 2803, 2819, 2833, 2837, 2843, 2851, 2857, 2861, 2879, 2887, 2897,\n  2903, 2909, 2917, 2927, 2939, 2953, 2957, 2963, 2969, 2971, 2999,\n  3001, 3011, 3019, 3023, 3037, 3041, 3049, 3061, 3067, 3079, 3083, 3089,\n  3109, 3119, 3121, 3137, 3163, 3167, 3169, 3181, 3187, 3191,\n  3203, 3209, 3217, 3221, 3229, 3251, 3253, 3257, 3259, 3271, 3299,\n  3301, 3307, 3313, 3319, 3323, 3329, 3331, 3343, 3347, 3359, 3361, 3371, 3373, 3389, 3391,\n  3407, 3413, 3433, 3449, 3457, 3461, 3463, 3467, 3469, 3491, 3499,\n  3511, 3517, 3527, 3529, 3533, 3539, 3541, 3547, 3557, 3559, 3571, 3581, 3583, 3593,\n  3607, 3613, 3617, 3623, 3631, 3637, 3643, 3659, 3671, 3673, 3677, 3691, 3697,\n  3701, 3709, 3719, 3727, 3733, 3739, 3761, 3767, 3769, 3779, 3793, 3797,\n  3803, 3821, 3823, 3833, 3847, 3851, 3853, 3863, 3877, 3881, 3889,\n  3907, 3911, 3917, 3919, 3923, 3929, 3931, 3943, 3947, 3967, 3989,\n  4001, 4003, 4007, 4013, 4019, 4021, 4027, 4049, 4051, 4057, 4073, 4079, 4091, 4093, 4099,\n  4111, 4127, 4129, 4133, 4139, 4153, 4157, 4159, 4177,\n  4201, 4211, 4217, 4219, 4229, 4231, 4241, 4243, 4253, 4259, 4261, 4271, 4273, 4283, 4289, 4297,\n  4327, 4337, 4339, 4349, 4357, 4363, 4373, 4391, 4397,\n  4409, 4421, 4423, 4441, 4447, 4451, 4457, 4463, 4481, 4483, 4493,\n  4507, 4513, 4517, 4519, 4523, 4547, 4549, 4561, 4567, 4583, 4591, 4597,\n  4603, 4621, 4637, 4639, 4643, 4649, 4651, 4657, 4663, 4673, 4679, 4691,\n  4703, 4721, 4723, 4729, 4733, 4751, 4759, 4783, 4787, 4789, 4793, 4799,\n  4801, 4813, 4817, 4831, 4861, 4871, 4877, 4889,\n  4903, 4909, 4919, 4931, 4933, 4937, 4943, 4951, 4957, 4967, 4969, 4973, 4987, 4993, 4999,\n  5003, 5009, 5011, 5021, 5023, 5039, 5051, 5059, 5077, 5081, 5087, 5099,\n  5101, 5107, 5113, 5119, 5147, 5153, 5167, 5171, 5179, 5189, 5197,\n  5209, 5227, 5231, 5233, 5237, 5261, 5273, 5279, 5281, 5297,\n  5303, 5309, 5323, 5333, 5347, 5351, 5381, 5387, 5393, 5399,\n  5407, 5413, 5417, 5419, 5431, 5437, 5441, 5443, 5449, 5471, 5477, 5479, 5483,\n  5501, 5503, 5507, 5519, 5521, 5527, 5531, 5557, 5563, 5569, 5573, 5581, 5591,\n  5623, 5639, 5641, 5647, 5651, 5653, 5657, 5659, 5669, 5683, 5689, 5693,\n  5701, 5711, 5717, 5737, 5741, 5743, 5749, 5779, 5783, 5791,\n  5801, 5807, 5813, 5821, 5827, 5839, 5843, 5849, 5851, 5857, 5861, 5867, 5869, 5879, 5881, 5897,\n  5903, 5923, 5927, 5939, 5953, 5981, 5987,\n  6007, 6011, 6029, 6037, 6043, 6047, 6053, 6067, 6073, 6079, 6089, 6091,\n  6101, 6113, 6121, 6131, 6133, 6143, 6151, 6163, 6173, 6197, 6199,\n  6203, 6211, 6217, 6221, 6229, 6247, 6257, 6263, 6269, 6271, 6277, 6287, 6299,\n  6301, 6311, 6317, 6323, 6329, 6337, 6343, 6353, 6359, 6361, 6367, 6373, 6379, 6389, 6397,\n  6421, 6427, 6449, 6451, 6469, 6473, 6481, 6491,\n  6521, 6529, 6547, 6551, 6553, 6563, 6569, 6571, 6577, 6581, 6599,\n  6607, 6619, 6637, 6653, 6659, 6661, 6673, 6679, 6689, 6691,\n  6701, 6703, 6709, 6719, 6733, 6737, 6761, 6763, 6779, 6781, 6791, 6793,\n  6803, 6823, 6827, 6829, 6833, 6841, 6857, 6863, 6869, 6871, 6883, 6899,\n  6907, 6911, 6917, 6947, 6949, 6959, 6961, 6967, 6971, 6977, 6983, 6991, 6997,\n  7001, 7013, 7019, 7027, 7039, 7043, 7057, 7069, 7079,\n  7103, 7109, 7121, 7127, 7129, 7151, 7159, 7177, 7187, 7193,\n  7207, 7211, 7213, 7219, 7229, 7237, 7243, 7247, 7253, 7283, 7297,\n  7307, 7309, 7321, 7331, 7333, 7349, 7351, 7369, 7393,\n  7411, 7417, 7433, 7451, 7457, 7459, 7477, 7481, 7487, 7489, 7499,\n  7507, 7517, 7523, 7529, 7537, 7541, 7547, 7549, 7559, 7561, 7573, 7577, 7583, 7589, 7591,\n  7603, 7607, 7621, 7639, 7643, 7649, 7669, 7673, 7681, 7687, 7691, 7699,\n  7703, 7717, 7723, 7727, 7741, 7753, 7757, 7759, 7789, 7793,\n  7817, 7823, 7829, 7841, 7853, 7867, 7873, 7877, 7879, 7883,\n  7901, 7907, 7919\n]\n"
  },
  {
    "path": "src/js/events.js",
    "content": "/*\n * EVENT HANDLERS AND OTHER DOCUMENT READY STUFF\n */\n\njQuery(document).ready(function () {\n  // automatically load generatal options saved in localStorage (if available)\n  if (!R.isNil(Storage)) {\n    // recall newline format\n    if (!R.isNil(localStorage.getItem('newline'))) {\n      jQuery('#input_select_newlines').val(localStorage.getItem('newline'))\n    } else {\n      console.log('localStorage: assuming default of windows')\n      jQuery('#input_select_newlines').val('windows')\n    }\n\n    // recall dark UI preference\n    if (\n      localStorage.getItem('night_mode') === 'true' ||\n      (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches)\n    ) {\n      jQuery('#input_checkbox_night_mode').trigger('click')\n      jQuery('body').addClass('dark')\n    }\n\n    // recall computer keyboard layout\n    if (!R.isNil(localStorage.getItem('keybd_region'))) {\n      jQuery('#input_select_keyboard_layout').val(localStorage.getItem('keybd_region'))\n      synth.keymap = Keymap[localStorage.getItem('keybd_region')]\n    }\n\n    // recall max polyphony\n    if (!R.isNil(localStorage.getItem('max_polyphony'))) {\n      jQuery('#input_number_max_polyphony').val(localStorage.getItem('max_polyphony'))\n    }\n  } else {\n    console.log(\n      'localStorage not supported in your browser. Please check your browser settings. If using Safari, you may need to disable private browsing mode.'\n    )\n  }\n\n  // get data encoded in url\n  parse_url()\n\n  // base MIDI note changed\n  jQuery('#txt_base_midi_note').change(function () {\n    // update MIDI note name\n    jQuery('#base_midi_note_name').text(\n      midi_note_number_to_name(jQuery('#txt_base_midi_note').val())\n    )\n  })\n\n  // clear button clicked\n  jQuery('#clear-scale').click(function (event) {\n    event.preventDefault()\n\n    var r = confirm('Are you sure you want to clear the current tuning data?')\n\n    if (r) {\n      clear_all()\n    }\n  })\n\n  // auto frequency button clicked\n  jQuery('#btn_frequency_auto').click(function (event) {\n    event.preventDefault()\n    jQuery('#txt_base_frequency').val(mtof(jQuery('#txt_base_midi_note').val()).toFixed(6))\n    parse_tuning_data()\n  })\n\n  // import scala option clicked\n  jQuery('#import-scala-scl').click(function (event) {\n    event.preventDefault()\n    import_scala_scl()\n  })\n\n  // import anamark tun option clicked\n  jQuery('#import-anamark-tun').click(function (event) {\n    event.preventDefault()\n    import_anamark_tun()\n  })\n\n  // import mnlgtun option clicked\n  jQuery('#import-mnlgtun-file').on('click', function (event) {\n    event.preventDefault()\n    importMnlgtun()\n  })\n\n  // generate_equal_temperament option clicked\n  jQuery('#generate_equal_temperament').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_number_of_divisions').select()\n    openDialog('#modal_generate_equal_temperament', generate_equal_temperament)\n  })\n\n  // generate_rank_2_temperament option clicked\n  jQuery('#generate_rank_2_temperament').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_rank-2_generator').select()\n    openDialog('#modal_generate_rank_2_temperament', generate_rank_2_temperament)\n  })\n\n  // rank-2 temperament generator - generators up changed\n  jQuery('#input_rank-2_up').change(function () {\n    jQuery('#input_rank-2_down').val(\n      jQuery('#input_rank-2_size').val() - jQuery('#input_rank-2_up').val() - 1\n    )\n  })\n\n  // rank-2 temperament generator - scale size changed\n  jQuery('#input_rank-2_size').change(function () {\n    var size = parseInt(jQuery('#input_rank-2_size').val())\n    // set generators up to be one less than scale size\n    jQuery('#input_rank-2_up').val(size - 1)\n    // set generators up input maximum\n    jQuery('#input_rank-2_up').attr({ max: size - 1 })\n    // zero generators down\n    jQuery('#input_rank-2_down').val(0)\n  })\n\n  // generate_harmonic_series_segment option clicked\n  jQuery('#generate_harmonic_series_segment').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_lowest_harmonic').select()\n    openDialog('#modal_generate_harmonic_series_segment', generate_harmonic_series_segment)\n  })\n\n  // generate_subharmonic_series_segment option clicked\n  jQuery('#generate_subharmonic_series_segment').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_lowest_subharmonic').select()\n    openDialog('#modal_generate_subharmonic_series_segment', generate_subharmonic_series_segment)\n  })\n\n  // enumerate_chord option clicked\n  jQuery('#enumerate_chord').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_chord').select()\n    jQuery('#modal_enumerate_chord').dialog({\n      modal: true,\n      buttons: {\n        OK: function () {\n          generate_enumerate_chord()\n        },\n        Cancel: function () {\n          jQuery(this).dialog('close')\n        }\n      }\n    })\n  })\n\n  // generate_cps option clicked\n  jQuery('#generate_cps').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_cps_factors').select()\n    openDialog('#modal_generate_cps', generate_cps)\n  })\n\n  // load-preset option clicked\n  jQuery('#load-preset').click(function (event) {\n    event.preventDefault()\n    jQuery('#select_preset_scale').select()\n    openDialog('#modal_load_preset_scale', function () {\n      load_preset_scale(jQuery('#select_preset_scale')[0].value)\n    })\n  })\n\n  // modify_mode option clicked\n  jQuery('#modify_mode').click(function (event) {\n    event.preventDefault()\n    // setup MOS options, and hide\n    update_modify_mode_mos_generators()\n    show_modify_mode_mos_options(document.querySelector('input[name=\"mode_type\"]:checked').value)\n    jQuery('#modal_modify_mos_degree').change() // make sizes available\n\n    jQuery('#input_modify_mode').select()\n    openDialog('#modal_modify_mode', modify_mode)\n  })\n\n  // modify_stretch option clicked\n  jQuery('#modify_stretch').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_stretch_ratio').select()\n    openDialog('#modal_modify_stretch', modify_stretch)\n  })\n\n  // modify_random_variance option clicked\n  jQuery('#modify_random_variance').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_cents_max_variance').select()\n    openDialog('#modal_modify_random_variance', modify_random_variance)\n  })\n\n  // modify_sync_beating option clicked\n  jQuery('#modify_sync_beating').click(function (event) {\n    event.preventDefault()\n    openDialog('#modal_modify_sync_beating', modify_sync_beating)\n  })\n\n  // approximate option clicked\n  jQuery('#modify_approximate').click(function (event) {\n    event.preventDefault()\n\n    // this needs to be here because a tuning data line needs to be\n    // inserted into the #input_interval_to_approximate field\n\n    jQuery('#txt_tuning_data').val(jQuery('#txt_tuning_data').val().trim())\n\n    if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n      alert('No tuning data to modify.')\n      return false\n    }\n\n    jQuery('#input_scale_degree').val(1)\n    jQuery('#input_scale_degree').attr({ min: 1, max: tuning_table.note_count - 1 })\n\n    jQuery('#input_scale_degree').select()\n    jQuery('#input_scale_degree').trigger('change')\n\n    jQuery('#modal_approximate_intervals').dialog({\n      modal: true,\n      buttons: {\n        Apply: function () {\n          modify_replace_with_approximation()\n        },\n        Close: function () {\n          jQuery(this).dialog('close')\n        }\n      }\n    })\n  })\n\n  // modify_approximate_harmonics option clicked\n  jQuery('#modify_approximate_harmonics').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_approx_harm_denominator').select()\n    openDialog('#modal_approximate_harmonics', modify_approximate_harmonics)\n  })\n\n  // modify_approximate_subharmonics option clicked\n  jQuery('#modify_approximate_subharmonics').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_approx_subharm_numerator').select()\n    openDialog('#modal_approximate_subharmonics', modify_approximate_subharmonics)\n  })\n\n  // modify_equalize option clicked\n  jQuery('#modify_equalize').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_equalize_divisions').select()\n    openDialog('#modal_equalize', modify_equalize)\n  })\n\n  // modify_octave_reduce option clicked\n  jQuery('#modify_octave_reduce').click(function (event) {\n    event.preventDefault()\n    openDialog('#modal_modify_octave_reduce', modify_octave_reduce)\n  })\n\n  // modify_sort_ascending option clicked\n  jQuery('#modify_sort_ascending').click(function (event) {\n    event.preventDefault()\n    var scale = jQuery('#txt_tuning_data').val().trim().split(unix_newline)\n    scale = scaleSort(scale).join(unix_newline).trim()\n    jQuery('#txt_tuning_data').val(scale)\n    parse_tuning_data()\n  })\n\n  // modify_rotate option clicked\n  jQuery('#modify_rotate').click(function (event) {\n    event.preventDefault()\n    // get scale intervals\n    let scale = jQuery('#txt_tuning_data').val().trim().split(unix_newline)\n    // remove any options from drop-down\n    jQuery('#input_rotate_new_1_1').empty()\n    // loop through intervals and populate drop-down options\n    for (i = 0; i < scale.length - 1; i++) {\n      jQuery('#input_rotate_new_1_1').append('<option value=\"' + i + '\">' + scale[i] + '</option>')\n    }\n    // show modal\n    openDialog('#modal_modify_rotate', modify_rotate)\n    parse_tuning_data()\n  })\n\n  // calculate and list rational approximations within user parameters\n  jQuery('#input_interval_to_approximate').change(function () {\n    var interval = line_to_decimal(jQuery('#input_interval_to_approximate').val())\n\n    current_approximations.convergent_indicies = []\n    current_approximations.numerators = []\n    current_approximations.denominators = []\n    current_approximations.ratios = []\n    current_approximations.numerator_limits = []\n    current_approximations.denominator_limits = []\n    current_approximations.ratio_limits = []\n\n    get_rational_approximations(\n      interval,\n      current_approximations.numerators,\n      current_approximations.denominators,\n      999999,\n      current_approximations.convergent_indicies,\n      current_approximations.ratios,\n      current_approximations.numerator_limits,\n      current_approximations.denominator_limits,\n      current_approximations.ratio_limits\n    )\n    modify_update_approximations()\n  })\n\n  // recalculate approximations when scale degree changes\n  jQuery('#input_scale_degree').change(function () {\n    jQuery('#txt_tuning_data').val(jQuery('#txt_tuning_data').val().trim())\n\n    if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n      alert('No tuning data to modify.')\n      return false\n    }\n\n    var index = parseInt(jQuery('#input_scale_degree').val()) - 1\n    var lines = document.getElementById('txt_tuning_data').value.split(newlineTest)\n    jQuery('#input_interval_to_approximate').val(lines[index])\n    jQuery('#input_interval_to_approximate').trigger('change')\n  })\n\n  // refilter approximations when error amount changes\n  jQuery('#input_min_error').change(function () {\n    modify_update_approximations()\n  })\n\n  // refilter approximations when error amount changes\n  jQuery('#input_max_error').change(function () {\n    modify_update_approximations()\n  })\n\n  // refilter approximations when \"show semiconvergents\" changes\n  jQuery('#input_show_convergents').change(function () {\n    modify_update_approximations()\n  })\n\n  // refilter approximations when prime limit changes\n  // can be improved, but it's a bit tricky!\n  jQuery('#input_approx_min_prime').change(function () {\n    var num = parseInt(jQuery('#input_approx_min_prime').val())\n    var dif = num - PRIMES[prime_counter[0]]\n    if (Math.abs(dif) == 1) {\n      if (num < PRIMES[prime_counter[0]]) {\n        prime_counter[0]--\n      } else {\n        prime_counter[0]++\n      }\n    } else {\n      prime_counter[0] = PRIMES.indexOf(closestPrime(num))\n    }\n\n    jQuery('#input_approx_min_prime').val(PRIMES[prime_counter[0]])\n    modify_update_approximations()\n  })\n\n  // refilter approximations when prime limit changes\n  jQuery('#input_approx_max_prime').change(function () {\n    var num = parseInt(jQuery('#input_approx_max_prime').val())\n    var dif = num - PRIMES[prime_counter[1]]\n    if (Math.abs(dif) == 1) {\n      if (num < PRIMES[prime_counter[1]]) {\n        prime_counter[1]--\n      } else {\n        prime_counter[1]++\n      }\n    } else {\n      prime_counter[1] = PRIMES.indexOf(closestPrime(num))\n    }\n\n    jQuery('#input_approx_max_prime').val(PRIMES[prime_counter[1]])\n    modify_update_approximations()\n  })\n\n  // shows or hides MOS mode selection boxes\n  function show_modify_mode_mos_options(showOptions) {\n    document.getElementById('mos_mode_options').style.display =\n      showOptions == 'mos' ? 'block' : 'none'\n  }\n\n  jQuery('#modal_modify_mode').change(function () {\n    show_modify_mode_mos_options(document.querySelector('input[name=\"mode_type\"]:checked').value)\n  })\n\n  // repopulates the available degrees for selection\n  function update_modify_mode_mos_generators() {\n    show_modify_mode_mos_options(document.querySelector('input[name=\"mode_type\"]:checked').value)\n    let coprimes = get_coprimes(tuning_table.note_count - 1)\n    jQuery('#modal_modify_mos_degree').empty()\n    for (var d = 1; d < coprimes.length - 1; d++) {\n      var num = coprimes[d]\n      var cents = Math.round(decimal_to_cents(tuning_table.tuning_data[num]) * 10e6) / 10.0e6\n      var text = num + ' (' + cents + 'c)'\n      jQuery('#modal_modify_mos_degree').append('<option value=\"' + num + '\">' + text + '</option>')\n    }\n  }\n\n  // calculate the MOS mode and insert it in the mode input box\n  function modify_mode_update_mos_scale() {\n    var p = tuning_table.note_count - 1\n    var g = parseInt(jQuery('#modal_modify_mos_degree').val())\n    var s = parseInt(jQuery('#modal_modify_mos_size').val())\n    let mode = get_rank2_mode(p, g, s)\n    jQuery('#input_modify_mode').val(mode.join(' '))\n  }\n\n  // update the available sizes for selection\n  jQuery('#modal_modify_mos_degree').change(function () {\n    let p = tuning_table.note_count - 1\n    let nn = []\n    let dd = []\n    var gp = jQuery('#modal_modify_mos_degree').val() / p\n    get_rational_approximations(gp, nn, dd, p)\n    jQuery('#modal_modify_mos_size').empty()\n\n    let size = 0\n    let i = 2\n    while (i < dd.length - 1) {\n      size = dd[i++]\n      jQuery('#modal_modify_mos_size').append('<option value=\"' + size + '\">' + size + '</option>')\n    }\n  })\n\n  // update mode when size is selected\n  jQuery('#modal_modify_mos_size').change(function () {\n    modify_mode_update_mos_scale()\n  })\n\n  // move the mode steps back one\n  jQuery('#input_mode_step_left').click(function () {\n    var mode = jQuery('#input_modify_mode').val().split(' ')\n    mode = rotate(mode, -1)\n    jQuery('#input_modify_mode').val(mode.join(' '))\n  })\n\n  // move the mode steps forward one\n  jQuery('#input_mode_step_right').click(function () {\n    var mode = jQuery('#input_modify_mode').val().split(' ')\n    mode = rotate(mode, 1)\n    jQuery('#input_modify_mode').val(mode.join(' '))\n  })\n\n  // open dialog for Reaper named notes exporter and call with selected parameters\n  jQuery('#export_reaper_note_name_map').click(function (event) {\n    event.preventDefault()\n    jQuery('#input_reaper_pitch_format').trigger('change')\n    openDialog('#modal_reaper_named_notes', (event) => {\n      const pitchFormat = jQuery('#input_reaper_pitch_format').val()\n      const showPeriodNumbers = jQuery('#input_reaper_show_period_numbers').is(':checked')\n      const calculatePeriodInPitch = jQuery('#input_reaper_calculate_periods').is(':checked')\n      const rootPeriodNumber = parseInt(jQuery('#input_reaper_root_period').val())\n      const rootCentsValue = parseFloat(jQuery('#input_reaper_root_cents').val())\n      const rootDegreeValue = parseInt(jQuery('#input_reaper_root_degree').val())\n\n      exportReaperNamedNotes(\n        pitchFormat,\n        showPeriodNumbers,\n        calculatePeriodInPitch,\n        rootPeriodNumber,\n        rootCentsValue,\n        rootDegreeValue\n      )\n    })\n  })\n\n  /*\n    // rank-2 temperament generator - scale size changed\n  jQuery( '#input_rank-2_size' ).change( function() {\n\n    var size = parseInt( jQuery( '#input_rank-2_size' ).val() );\n    // set generators up to be one less than scale size\n    jQuery( '#input_rank-2_up' ).val( size - 1 );\n    // set generators up input maximum\n    jQuery( '#input_rank-2_up' ).attr({ \"max\" : size - 1 });\n    // zero generators down\n    jQuery( '#input_rank-2_down' ).val( 0 );\n  } );\n  */\n\n  // Reaper Exporter interactions\n  // Disable 'Root Cents Value' if not using cents, and 'Root Degree Value' if not using scale degrees\n  jQuery('#input_reaper_pitch_format').on('change', function (event) {\n    jQuery('#modal_reaper_root_cents_group').css(\n      'display',\n      event.target.value === 'cents' ? 'block' : 'none'\n    )\n    jQuery('#modal_reaper_root_degree_group').css(\n      'display',\n      event.target.value === 'degree' ? 'block' : 'none'\n    )\n  })\n\n  // Disable 'Root Period Number' if not showing period numbers\n  jQuery('#input_reaper_show_period_numbers').on('click', function (event) {\n    jQuery('#input_reaper_root_period').prop('disabled', !event.target.checked)\n  })\n\n  // MIDI nav item clicked\n  jQuery('#nav_midi').click(function (event) {\n    event.preventDefault()\n    jQuery('#modal_midi_settings').dialog({\n      modal: true,\n      dialogClass: 'fullscreen-modal',\n      resizable: false,\n      draggable: false,\n      buttons: {\n        OK: function () {\n          jQuery(this).dialog('close')\n          state.set('midi modal visible', false)\n        }\n      }\n    })\n    state.set('midi modal visible', true)\n  })\n\n  // About Scale Workshop option clicked\n  jQuery('#about_scale_workshop').click(function (event) {\n    event.preventDefault()\n    jQuery('#about_version').text(APP_TITLE)\n    jQuery('#modal_about_scale_workshop').dialog({\n      modal: true,\n      width: 500,\n      buttons: {\n        OK: function () {\n          jQuery(this).dialog('close')\n        }\n      }\n    })\n  })\n\n  // Panic button\n  jQuery('#btn_panic').click(function (event) {\n    event.preventDefault()\n    synth.panic() // turns off all playing synth notes\n  })\n\n  // General Settings - Line ending format (newlines)\n  jQuery('#input_select_newlines').change(function (event) {\n    if (jQuery('#input_select_newlines').val() == 'windows') {\n      newline = '\\r\\n' // windows\n      localStorage.setItem('newline', 'windows')\n    } else {\n      newline = '\\n' // unix\n      localStorage.setItem('newline', 'unix')\n    }\n    console.log(jQuery('#input_select_newlines').val() + ' line endings selected')\n  })\n\n  // General Settings - Night mode\n  jQuery('#input_checkbox_night_mode').change(function (event) {\n    if (jQuery('#input_checkbox_night_mode').is(':checked')) {\n      jQuery('body').addClass('dark')\n      localStorage.setItem('night_mode', true)\n    } else {\n      jQuery('body').removeClass('dark')\n      localStorage.setItem('night_mode', false)\n    }\n  })\n\n  // Synth Settings - Waveform\n  jQuery('#input_select_synth_waveform').change(function (event) {\n    synth.waveform = jQuery('#input_select_synth_waveform').val()\n    update_page_url()\n  })\n\n  // Synth Settings - Amplitude Envelope\n  jQuery('#input_select_synth_amp_env').change(function (event) {\n    update_page_url()\n  })\n\n  // Synth Settings - Delay\n  jQuery('#input_checkbox_delay_on').change(function () {\n    if (jQuery(this).is(':checked')) {\n      synth.delay.enable()\n    } else {\n      synth.delay.disable()\n    }\n  })\n\n  jQuery(document).on('input', '#input_range_feedback_gain', function () {\n    synth.delay.gain = jQuery(this).val()\n    console.log(synth.delay.gain)\n    const now = synth.now()\n    synth.delay.gainL.gain.setValueAtTime(synth.delay.gain, now)\n    synth.delay.gainR.gain.setValueAtTime(synth.delay.gain, now)\n  })\n\n  jQuery(document).on('change', '#input_range_delay_time', function () {\n    synth.delay.time = jQuery(this).val() * 0.001\n    const now = synth.now()\n    synth.delay.channelL.delayTime.setValueAtTime(synth.delay.time, now)\n    synth.delay.channelR.delayTime.setValueAtTime(synth.delay.time, now)\n  })\n  jQuery(document).on('input', '#input_range_delay_time', function () {\n    jQuery('#delay_time_ms').text(jQuery(this).val())\n  })\n\n  // Synth Settings - Max polyphony\n  jQuery('#input_number_max_polyphony').change(function (event) {\n    let value = jQuery('#input_number_max_polyphony').val()\n\n    // only save if input is not empty\n    if (!R.isEmpty(value)) {\n      localStorage.setItem('max_polyphony', value)\n    }\n  })\n\n  // Isomorphic Settings - Keyboard Layout\n  jQuery('#input_select_keyboard_layout').change(function (event) {\n    var id = jQuery('#input_select_keyboard_layout').val()\n    synth.keymap = Keymap[id]\n    localStorage.setItem('keybd_region', id)\n  })\n\n  // Isomorphic Settings - Isomorphic Mapping\n  jQuery('#input_number_isomorphicmapping_vert').change(function (event) {\n    synth.isomorphicMapping.vertical = jQuery('#input_number_isomorphicmapping_vert').val()\n  })\n  jQuery('#input_number_isomorphicmapping_horiz').change(function (event) {\n    synth.isomorphicMapping.horizontal = jQuery('#input_number_isomorphicmapping_horiz').val()\n  })\n\n  // Isomorphic Settings - Key colors\n  jQuery('#input_key_colors').change(function (event) {\n    set_key_colors(jQuery('#input_key_colors').val())\n    // update this change in the browser's Back/Forward navigation\n    update_page_url()\n  })\n  // initialise key colors. defaults to Halberstadt layout on A\n  set_key_colors(jQuery('#input_key_colors').val())\n\n  // Isomorphic Settings - Key colors Auto button clicked\n  jQuery('#btn_key_colors_auto').click(function (event) {\n    event.preventDefault()\n    var size = tuning_table['note_count'] - 1\n    var colors = ''\n\n    // fall back in some situations\n    if (size < 2) {\n      if (R.isEmpty(jQuery('#input_key_colors').val())) {\n        // field is empty so we'll apply a sensible default key colouring\n        jQuery('#input_key_colors').val(\n          'white black white white black white black white white black white black'\n        )\n        set_key_colors(jQuery('#input_key_colors').val())\n        return true\n      }\n\n      // field already has content so we'll do nothing\n      return false\n    }\n\n    switch (size.toString()) {\n      case '9':\n        colors = 'white white black black white white black black white'\n        break\n\n      case '10':\n        colors = 'white black white white white black white white black white'\n        break\n\n      case '11':\n        colors = 'white black white black white black white black white black white'\n        break\n\n      case '12':\n        colors = 'white black white white black white black white white black white black'\n        break\n\n      case '13':\n        colors =\n          'antiquewhite white black white black white white black white white black white black'\n        break\n\n      case '14':\n        colors =\n          'white black white black white black white white black white black white black white'\n        break\n\n      case '15':\n        colors =\n          'white black white black white black white black white black white black white black white'\n        break\n\n      case '16':\n        colors =\n          'white black white black white black white white black white black white black white black white'\n        break\n\n      case '17':\n        colors =\n          'white black black white white black black white black black white white black black white black black'\n        break\n\n      case '18':\n        colors =\n          'white black black white black white black black white black white black black white black black white black'\n        break\n\n      case '19':\n        colors =\n          'white black grey white black grey white black white black grey white black grey white black grey white black white'\n        break\n\n      case '20':\n        colors =\n          'white white black black white white black black white white black black white white black black white white black black'\n        break\n\n      case '21':\n        colors =\n          'white black black white black black white black black white black black white black black white black black white black black'\n        break\n\n      case '22':\n        colors =\n          'white black white black white black white black white black white white black white black white black white black white black white'\n        break\n\n      case '23':\n        colors =\n          'white black black black white black black white black black white black black white black black white black black black white black black black'\n        break\n\n      case '24':\n        colors =\n          'white lightgrey black dimgrey white lightgrey white lightgrey black dimgrey white lightgrey black dimgrey white lightgrey white lightgrey black dimgrey white lightgrey black dimgrey'\n        break\n\n      default:\n        {\n          // assemble a key colouring for any arbitrary scale size\n          let sequenceOfColors = []\n          for (let i = 0; i < Math.floor(size / 2); i++) {\n            sequenceOfColors.push('white', 'black')\n          }\n          if (size % 2 === 1) {\n            sequenceOfColors.push('white')\n          }\n          colors = sequenceOfColors.join(' ')\n        }\n        break\n    }\n\n    jQuery('#input_key_colors').val(colors)\n    set_key_colors(colors)\n    // update this change in the browser's Back/Forward navigation\n    update_page_url()\n    return true\n  })\n\n  // Social Icons\n  // Email\n  jQuery('a.social-icons-email').click(function (event) {\n    event.preventDefault()\n    var email = ''\n    var subject = encodeURIComponent('Scale Workshop - ' + jQuery('#txt_name').val())\n    var emailBody = encodeURIComponent(\n      'Sending you this musical scale:' +\n        newline +\n        jQuery('#txt_name').val() +\n        newline +\n        newline +\n        'The link below has more info:' +\n        newline +\n        newline +\n        jQuery('#input_share_url').val()\n    )\n    window.location = 'mailto:' + email + '?subject=' + subject + '&body=' + emailBody\n  })\n  // Twitter\n  jQuery('a.social-icons-twitter').click(function (event) {\n    event.preventDefault()\n    var text = encodeURIComponent(jQuery('#txt_name').val() + ' ♫ ')\n    var url = encodeURIComponent(jQuery('#input_share_url').val())\n    window.open('https://twitter.com/intent/tweet?text=' + text + url)\n  })\n\n  // parse tuning data when changes are made\n  jQuery(\n    '#txt_name, #txt_tuning_data, #txt_base_frequency, #txt_base_midi_note, #input_select_newlines'\n  ).change(function () {\n    parse_tuning_data()\n  })\n\n  // handle QWERTY key active indicator\n  is_qwerty_active()\n  jQuery('input,textarea')\n    .focusin(() => {\n      is_qwerty_active()\n    })\n    .focusout(() => {\n      is_qwerty_active()\n    })\n\n  // Remove splash screen\n  jQuery('div#splash').fadeOut()\n\n  // now everything is initialised we finally run any custom user scripts\n  run_user_scripts_on_document_ready()\n\n  const onModeChange = (input) => {\n    const cntr = $('#input_modify_mode_counter')\n\n    const updateCntr = (value) => {\n      cntr.text(value)\n    }\n\n    const isInputEmpty = input === ''\n    const isInputValid = /^(\\d+\\s+)*\\d+$/.test(input)\n\n    let sum = 0\n    if (!isInputEmpty && isInputValid) {\n      const numbers = input.split(/\\s+/).map((numberString) => parseInt(numberString))\n      sum = R.sum(numbers)\n    }\n    updateCntr(sum)\n  }\n\n  $('#input_modify_mode').on('input', (e) => {\n    onModeChange(e.target.value.trim())\n  })\n\n  onModeChange($('#input_modify_mode').val().trim())\n}) // end of document ready block\n"
  },
  {
    "path": "src/js/exporters.js",
    "content": "function export_error() {\n  // no tuning data to export\n  if (R.isNil(tuning_table['freq'][tuning_table['base_midi_note']])) {\n    alert('No tuning data to export.')\n    return true\n  }\n}\n\nfunction save_file(filename, contents, raw, mimeType = 'application/octet-stream,') {\n  const link = document.createElement('a')\n  link.download = filename\n\n  if (raw === true) {\n    const blob = new Blob([contents], { type: 'application/octet-stream' })\n    link.href = window.URL.createObjectURL(blob)\n  } else {\n    link.href = 'data:' + mimeType + encodeURIComponent(contents)\n  }\n\n  link.dispatchEvent(new MouseEvent('click', { bubbles: true, cancelable: true, view: window })) // opens save dialog\n}\n\nfunction export_anamark_tun(version) {\n  if (export_error()) {\n    return\n  }\n\n  // TUN format spec:\n  // http://www.mark-henning.de/files/am/Tuning_File_V2_Doc.pdf\n  if (version === undefined) {\n    version = 100\n  }\n\n  // Assemble the .tun file contents:\n\n  // Comment section\n  var file = '; VAZ Plus/AnaMark softsynth tuning file' + newline\n  file += '; ' + jQuery('#txt_name').val() + newline\n  file += ';' + newline\n\n  var scale_url = get_scale_url()\n  // If version 200 or higher, display the scale URL so user can easily get back to the original scale that generates this tun file.\n  // If earlier than version 200, we must be careful that a long URL doesn't break the line-length limit of 512 characters.\n  // Note: TUN spec says line-length limit is 255 but in the v1 file format source the limit is indeed 512.\n  if (version >= 200 || scale_url.length <= 508) {\n    file += '; ' + scale_url + newline\n  }\n  // If version before 200 and URL is too long, fall back to an alternative way of displaying the original scale data.\n  else {\n    for (i = 1; i < tuning_table.scale_data.length; i++) {\n      file += '; ' + tuning_table.scale_data[i] + newline\n    }\n  }\n\n  file += ';' + newline\n  file += '; VAZ Plus section' + newline\n  file += '[Tuning]' + newline\n\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    file +=\n      'note ' +\n      i +\n      '=' +\n      parseInt(decimal_to_cents(parseFloat(tuning_table['freq'][i]) / mtof(0))) +\n      newline\n  }\n\n  file += newline + '; AnaMark section' + newline\n  file += '[Scale Begin]' + newline\n  file += 'Format= \"AnaMark-TUN\"' + newline\n  file += 'FormatVersion= ' + version + newline\n  file += 'FormatSpecs= \"http://www.mark-henning.de/eternity/tuningspecs.html\"' + newline + newline\n  file += '[Info]' + newline\n  file += 'Name= \"' + tuning_table['filename'] + '.tun\"' + newline\n  file += 'ID= \"' + tuning_table['filename'].replace(/ /g, '') + '.tun\"' + newline // this line strips whitespace from filename, as per .tun spec\n  file += 'Filename= \"' + tuning_table['filename'] + '.tun\"' + newline\n  file += 'Description= \"' + tuning_table['description'] + '\"' + newline\n  var date = new Date().toISOString().slice(0, 10)\n  file += 'Date= \"' + date + '\"' + newline\n  file += 'Editor= \"' + APP_TITLE + '\"' + newline + newline\n  file += '[Exact Tuning]' + newline\n\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    file +=\n      'note ' +\n      i +\n      '= ' +\n      decimal_to_cents(parseFloat(tuning_table['freq'][i]) / mtof(0)).toFixed(6) +\n      newline\n  }\n\n  // version 2.00 only\n  if (version >= 200) {\n    file += newline + '[Functional Tuning]' + newline\n\n    for (let i = 1; i < tuning_table['note_count']; i++) {\n      if (i == tuning_table['note_count'] - 1) {\n        file +=\n          'note ' +\n          i +\n          '=\"#>-' +\n          i +\n          ' % ' +\n          decimal_to_cents(tuning_table['tuning_data'][i]).toFixed(6) +\n          ' ~999\"' +\n          newline\n      } else {\n        file +=\n          'note ' +\n          i +\n          '=\"#=0 % ' +\n          decimal_to_cents(tuning_table['tuning_data'][i]).toFixed(6) +\n          '\"' +\n          newline\n      }\n    }\n\n    file +=\n      newline + '; Set reference key to absolute frequency (not scale note but midi key)' + newline\n    file +=\n      'note ' +\n      tuning_table['base_midi_note'] +\n      '=\"! ' +\n      tuning_table['base_frequency'].toFixed(6) +\n      '\"' +\n      newline\n  }\n\n  file += newline + '[Scale End]' + newline\n\n  save_file(tuning_table['filename'] + '.tun', file)\n\n  // success\n  return true\n}\n\nfunction export_scala_scl() {\n  if (export_error()) {\n    return\n  }\n\n  // assemble the .scl file contents\n  var file = '! ' + tuning_table['filename'] + '.scl' + newline\n  file += '! Created using ' + APP_TITLE + newline\n  file += '!' + newline\n  file += '! ' + get_scale_url() + newline\n  file += '!' + newline\n  if (R.isEmpty(jQuery('#txt_name').val())) {\n    file += 'Untitled tuning'\n  } else {\n    file += jQuery('#txt_name').val()\n  }\n  file += newline + ' '\n\n  file += tuning_table['note_count'] - 1 + newline\n  file += '!' + newline\n\n  for (let i = 1; i < tuning_table['note_count']; i++) {\n    file += ' '\n\n    // if the current interval is n-of-m edo or commadecimal linetype, output as cents instead\n    if (\n      getLineType(tuning_table['scale_data'][i]) === LINE_TYPE.N_OF_EDO ||\n      getLineType(tuning_table['scale_data'][i]) === LINE_TYPE.DECIMAL ||\n      ( // Don't allow ratio integers above (2^31) - 1\n        getLineType(tuning_table['scale_data'][i]) === LINE_TYPE.RATIO &&\n        tuning_table['scale_data'][i].split('/').reduce((overflow, d) => overflow || parseInt(d) > 2147483647, false)\n      )\n    ) {\n      file += decimal_to_cents(tuning_table['tuning_data'][i]).toFixed(6)\n    } else {\n      file += tuning_table['scale_data'][i]\n    }\n\n    file += newline\n  }\n\n  save_file(tuning_table['filename'] + '.scl', file)\n\n  // success\n  return true\n}\n\nfunction export_scala_kbm() {\n  if (export_error()) {\n    return\n  }\n\n  // assemble the .kbm file contents\n  var file = '! Template for a keyboard mapping' + newline\n  file += '!' + newline\n  file += '! Size of map. The pattern repeats every so many keys:' + newline\n  file += parseInt(tuning_table['note_count'] - 1) + newline\n  file += '! First MIDI note number to retune:' + newline\n  file += '0' + newline\n  file += '! Last MIDI note number to retune:' + newline\n  file += '127' + newline\n  file += '! Middle note where the first entry of the mapping is mapped to:' + newline\n  file += parseInt(tuning_table['base_midi_note']) + newline\n  file += '! Reference note for which frequency is given:' + newline\n  file += parseInt(tuning_table['base_midi_note']) + newline\n  file += '! Frequency to tune the above note to' + newline\n  file += parseFloat(tuning_table['base_frequency']) + newline\n  file += '! Scale degree to consider as formal octave (determines difference in pitch' + newline\n  file += '! between adjacent mapping patterns):' + newline\n  file += parseInt(tuning_table['note_count'] - 1) + newline\n  file += '! Mapping.' + newline\n  file += '! The numbers represent scale degrees mapped to keys. The first entry is for' + newline\n  file += '! the given middle note, the next for subsequent higher keys.' + newline\n  file +=\n    '! For an unmapped key, put in an \"x\". At the end, unmapped keys may be left out.' + newline\n\n  for (let i = 0; i < parseInt(tuning_table['note_count'] - 1); i++) {\n    file += i + newline\n  }\n\n  save_file(tuning_table['filename'] + '.kbm', file)\n\n  // success\n  return true\n}\n\nfunction export_maxmsp_coll() {\n  if (export_error()) {\n    return\n  }\n\n  // assemble the coll file contents\n  var file = '# Tuning file for Max/MSP coll objects. - Created using ' + APP_TITLE + newline\n  file += '# ' + jQuery('#txt_name').val() + newline\n  file += '#' + newline\n  file += '# ' + get_scale_url() + newline\n  file += '#' + newline\n\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    file += i + ', ' + tuning_table['freq'][i].toFixed(7) + ';' + newline\n  }\n\n  save_file(tuning_table['filename'] + '.txt', file)\n\n  // success\n  return true\n}\n\nfunction export_pd_text() {\n  if (export_error()) {\n    return\n  }\n\n  // assemble the text file contents\n  var file = ''\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    file += tuning_table['freq'][i].toFixed(7) + ';' + newline\n  }\n\n  save_file(tuning_table['filename'] + '.txt', file)\n\n  // success\n  return true\n}\n\nfunction export_kontakt_script() {\n  if (export_error()) {\n    return\n  }\n\n  // assemble the kontakt script contents\n  var file = '{**************************************' + newline\n  file += jQuery('#txt_name').val() + newline\n  file +=\n    'MIDI note ' +\n    tuning_table['base_midi_note'] +\n    ' (' +\n    midi_note_number_to_name(tuning_table['base_midi_note']) +\n    ') = ' +\n    parseFloat(tuning_table['base_frequency']) +\n    ' Hz' +\n    newline\n  file += 'Created using ' + APP_TITLE + newline + newline\n  file += get_scale_url() + newline\n  file += '****************************************}' + newline + newline\n\n  file += 'on init' + newline\n  file += 'declare %keynum[' + TUNING_MAX_SIZE + ']' + newline\n  file += 'declare %tune[' + TUNING_MAX_SIZE + ']' + newline\n  file += 'declare $bend' + newline\n  file += 'declare $key' + newline + newline\n\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    var this_note = ftom(tuning_table['freq'][i])\n\n    // if we're out of range of the default Kontakt tuning, leave note as default tuning\n    if (this_note[0] < 0 || this_note[0] >= TUNING_MAX_SIZE) {\n      file += '%keynum[' + i + '] := ' + i + newline\n      file += '%tune[' + i + '] := 0' + newline\n    }\n\n    // success, we're in range of another note, so we'll change the tuning +/- 50c\n    else {\n      file += '%keynum[' + i + '] := ' + this_note[0] + newline\n      file += '%tune[' + i + '] := ' + parseInt(this_note[1] * 1000) + newline\n    }\n  }\n\n  file += 'end on' + newline + newline\n\n  file += 'on note' + newline\n  file += '$key := %keynum[$EVENT_NOTE]' + newline\n  file += '$bend := %tune[$EVENT_NOTE]' + newline\n  file += 'change_note ($EVENT_ID, $key)' + newline\n  file += 'change_tune ($EVENT_ID, $bend, 0)' + newline\n  file += 'end on' + newline\n\n  save_file(tuning_table['filename'] + '.txt', file)\n\n  // success\n  return true\n}\n\nfunction export_soniccouture_nka() {\n  if (export_error()) {\n    return\n  }\n\n  // assemble the nka contents\n  // first line should always be \"%XenSetup\"\n  var file = '%XenSetup' + newline\n\n  // loop through 128 notes to get semitone offset\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    var this_note = ftom(tuning_table['freq'][i])\n\n    // if we're out of MIDI note range, leave semitone offset as default\n    if (this_note[0] < 0 || this_note[0] >= TUNING_MAX_SIZE) {\n      file += '0' + newline\n    }\n\n    // success, we're in range of another note, so get the semitone offset\n    else {\n      file += this_note[0] - i + newline\n    }\n  }\n\n  // loop through 128 notes to get cents offset\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    var this_note = ftom(tuning_table['freq'][i])\n\n    // if we're out of MIDI note range, leave semitone offset as default\n    if (this_note[0] < 0 || this_note[0] >= TUNING_MAX_SIZE) {\n      file += '0' + newline\n    }\n\n    // success, we're in range of another note, so we'll change the tuning +/- 5000 hundredths of a cent\n    else {\n      file += parseInt(this_note[1] * 100) + newline\n    }\n  }\n\n  // Soniccouture .nka format requires 0 followed by newline to end the file\n  file += '0' + newline\n\n  save_file(tuning_table['filename'] + '.nka', file)\n\n  // success\n  return true\n}\n\nfunction exportImageLinePitchMap(range) {\n  const { clamp } = R\n\n  if (export_error()) {\n    return\n  }\n  const NB_NOTES = 121 // IL products can only retune from C0 to C10\n  const HEADER_BYTES = Uint8Array.from([3, 0, 0, 0, 3, 0, 0, 0, NB_NOTES, 0, 0, 0])\n  const ENDING_BYTES = Uint8Array.from([\n    0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255\n  ])\n  const X_STRIDE = 1 / NB_NOTES // constant x offset from one point to the next\n  const CURVE_DATA = 33554432 // curve data for straight line, observed experimentally\n\n  const baseFreqOffset = Math.log2(tuning_table.base_frequency / 440) // in number of octaves\n\n  // construct point data\n  let points = new ArrayBuffer(121 * 24)\n  let pointsDoubles = new Float64Array(points)\n  let pointsUint32 = new Uint32Array(points)\n  for (let i = 0; i < NB_NOTES; i++) {\n    const edo12cents = (i - 69) * 100\n    const offset = tuning_table.cents[i] - edo12cents\n    const normalizedOffset = ((offset / 1200 + baseFreqOffset) / range) * 0.5 + 0.5\n    const yCoord = clamp(0, 1, normalizedOffset)\n    pointsDoubles[i * 3 + 1] = yCoord\n    if (i !== 0) {\n      // no x offset and no curve data for first point\n      pointsDoubles[i * 3] = X_STRIDE\n      pointsUint32[i * 6 + 4] = 0\n      pointsUint32[i * 6 + 5] = CURVE_DATA\n    }\n  }\n\n  // assemble .fnv file\n  let file = new Uint8Array(HEADER_BYTES.length + points.byteLength + ENDING_BYTES.length)\n  let offset = 0\n  file.set(HEADER_BYTES, offset)\n  offset += HEADER_BYTES.length\n  file.set(new Uint8Array(points), offset)\n  offset += points.byteLength\n  file.set(ENDING_BYTES, offset)\n\n  save_file(tuning_table.filename + '.fnv', file, true)\n\n  // success\n  return true\n}\n\nfunction exportHarmorPitchMap() {\n  exportImageLinePitchMap(5)\n}\n\nfunction exportSytrusPitchMap() {\n  exportImageLinePitchMap(4)\n}\n\nfunction getMnlgtunTuningInfoXML(useScaleFormat, programmer, comment) {\n  // Builds an XML file necessary for the .mnlgtun file format\n  const rootName = useScaleFormat\n    ? 'minilogue_TuneScaleInformation'\n    : 'minilogue_TuneOctInformation'\n  const xml = document.implementation.createDocument(null, rootName)\n\n  const Programmer = xml.createElement('Programmer')\n  Programmer.textContent = programmer\n  xml.documentElement.appendChild(Programmer)\n\n  const Comment = xml.createElement('Comment')\n  Comment.textContent = comment\n  xml.documentElement.appendChild(Comment)\n\n  return xml\n}\n\nfunction getMnlgtunFileInfoXML(useScaleFormat, product = 'minilogue') {\n  // Builds an XML file necessary for the .mnlgtun file format\n  const rootName = 'KorgMSLibrarian_Data'\n  const xml = document.implementation.createDocument(null, rootName)\n\n  const Product = xml.createElement('Product')\n  Product.textContent = product\n  xml.documentElement.appendChild(Product)\n\n  const Contents = xml.createElement('Contents')\n  Contents.setAttribute('NumProgramData', 0)\n  Contents.setAttribute('NumPresetInformation', 0)\n  Contents.setAttribute('NumTuneScaleData', 1 * useScaleFormat)\n  Contents.setAttribute('NumTuneOctData', 1 * !useScaleFormat)\n\n  const [fileNameHeader, dataName, binName] = useScaleFormat\n    ? ['TunS_000.TunS_', 'TuneScaleData', 'TuneScaleBinary']\n    : ['TunO_000.TunO_', 'TuneOctData', 'TuneOctBinary']\n\n  const TuneData = xml.createElement(dataName)\n\n  const Information = xml.createElement('Information')\n  Information.textContent = fileNameHeader + 'info'\n  TuneData.appendChild(Information)\n\n  const BinData = xml.createElement(binName)\n  BinData.textContent = fileNameHeader + 'bin'\n  TuneData.appendChild(BinData)\n\n  Contents.appendChild(TuneData)\n  xml.documentElement.appendChild(Contents)\n\n  return xml\n}\n\nfunction exportMnlgtun(useScaleFormat) {\n  // This exporter converts tuning data into a zip-compressed file for use with Korg's\n  // 'logue Sound Librarian software, supporting their 'logue series of synthesizers.\n  // While this exporter preserves accuracy as much as possible, the Sound Librarian software\n  // unforunately truncates cent values to 1 cent precision. It's unknown whether the tuning accuracy\n  // from this exporter is written to the synthesizer and used in the synthesis.\n\n  if (export_error()) {\n    return\n  }\n\n  // the index of the table that's equal to the baseNote should have the following value\n  const refOffsetCents =\n    MNLG_A_REF.val + decimal_to_cents(tuning_table.base_frequency / MNLG_A_REF.freq)\n\n  // offset cents array for binary conversion\n  let centsTable = tuning_table.cents.map((c) => roundToNDecimals(3, c + refOffsetCents))\n\n  if (useScaleFormat) {\n    // ensure table length is exactly 128\n    centsTable = centsTable.slice(0, MNLG_SCALESIZE)\n\n    // this shouldn't happen unless something goes really wrong\n    if (centsTable.length !== MNLG_SCALESIZE) {\n      console.log(\n        'Somehow the mnlgtun table was less than 128 values, the end will be padded with 0s.'\n      )\n      const padding = new Array(MNLG_SCALESIZE - centsTable.length).fill(0)\n      centsTable = [...centsTable, ...padding]\n    }\n  } else {\n    // normalize around root, truncate to 12 notes, and wrap flattened Cs\n    let cNote = parseInt(tuning_table.base_midi_note / MNLG_OCTAVESIZE) * MNLG_OCTAVESIZE\n    centsTable = centsTable\n      .slice(cNote, cNote + MNLG_OCTAVESIZE)\n      .map((cents) => mathModulo(cents - MNLG_C_REF.val, MNLG_MAXCENTS))\n  }\n\n  // convert to binary\n  const binaryData = centsTableToMnlgBinary(centsTable)\n\n  // prepare files for zipping\n  const tuningInfo = getMnlgtunTuningInfoXML(useScaleFormat, 'ScaleWorkshop', tuning_table.filename)\n  const fileInfo = getMnlgtunFileInfoXML(useScaleFormat)\n  const [fileNameHeader, fileType] = useScaleFormat\n    ? ['TunS_000.TunS_', '.mnlgtuns']\n    : ['TunO_000.TunO_', '.mnlgtuno']\n\n  // build zip\n  const zip = new JSZip()\n  zip.file(fileNameHeader + 'bin', binaryData)\n  zip.file(fileNameHeader + 'info', tuningInfo.documentElement.outerHTML)\n  zip.file('FileInformation.xml', fileInfo.documentElement.outerHTML)\n  zip.generateAsync({ type: 'base64' }).then(\n    (base64) => {\n      save_file(tuning_table.filename + fileType, base64, false, 'application/zip;base64,')\n    },\n    (err) => alert(err)\n  )\n\n  // success\n  return true\n}\n\nfunction export_reference_deflemask() {\n  // This exporter converts your tuning data into a readable format you can easily input manually into Deflemask.\n  // For example if you have a note 50 cents below A4, you would input that into Deflemask as A-4 -- - E5 40\n  // Deflemask manual: http://www.deflemask.com/manual.pdf\n\n  if (export_error()) {\n    return\n  }\n\n  // assemble the text file contents\n  var file =\n    tuning_table['description'] +\n    newline +\n    'Reference for Deflemask note input - generated by ' +\n    APP_TITLE +\n    newline +\n    newline\n  file += get_scale_url() + newline + newline\n\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    // convert frequency into midi note number + cents offset\n    var data = ftom(tuning_table['freq'][i])\n\n    // acceptable range is C#0 to B7 (MIDI notes 1-95). skip this note if it's out of range\n    if (data[0] < 1 || data[0] > 95) continue\n\n    // convert note number to note name\n    data[0] = midi_note_number_to_name(data[0])\n    data[0] = data[0].length == 2 ? data[0].slice(0, 1) + '-' + data[0].slice(1) : data[0]\n\n    // convert cents offset to hex where -100c=00, 0c=80, 100c=FF\n    data[1] = Math.round(128 + data[1] * 1.28)\n      .toString(16)\n      .toUpperCase()\n\n    // add data to text file\n    data = '[' + data[0] + ' xx] [xx E5 ' + data[1] + ']'\n    file +=\n      data +\n      ' ..... ' +\n      i +\n      ': ' +\n      tuning_table['freq'][i].toFixed(2) +\n      ' Hz / ' +\n      tuning_table['cents'][i].toFixed(2) +\n      ' cents' +\n      newline\n  }\n\n  save_file(tuning_table['filename'] + '.txt', file)\n\n  // success\n  return true\n}\n\n// TODO: improve with currying?\nfunction exportReaperNamedNotes(\n  pitchFormat = 'scale data',\n  showPeriodNumbers = true,\n  calculatePeriodInPitch = false,\n  rootPeriod = 0,\n  centsRoot = 0,\n  degreeRoot = 0\n) {\n  // This exporter enumerates the scale data to 128 MIDI notes in a readable format\n  // that can be loaded into Reaper's piano roll in \"Named Note\" mode.\n  //  - 'pitchFormat' can either be 'scale data', 'cents', 'freq', 'decimal', or 'degree'\n  //  - 'showPeriodNumbers' if true will put the period (or octave) number by each pitch\n  //  - 'calculatePeriodInPitch' if true will preserve the period value in the pitch value\n  //  - 'rootPeriod' is for if the root should start on a certain period number\n  //  - 'centsRoot' is the cent value used for the root note of the scale\n\n  if (export_error()) {\n    return false\n  }\n\n  // Prepare suffix containing chosen options\n  let options = ['NoteNames']\n\n  if (pitchFormat !== 'scale data') options.push([pitchFormat])\n\n  if (showPeriodNumbers) {\n    if (rootPeriod !== 0) {\n      const rootPeriodStr = rootPeriod < 0 ? rootPeriod : `+${rootPeriod}`\n      options.push(`${rootPeriodStr}p`)\n    } else options.push('p')\n  }\n\n  if (pitchFormat === 'cents' && centsRoot !== 0) {\n    const centsRootStr = centsRoot < 0 ? centsRoot : `+${centsRoot}`\n    options.push(`${centsRootStr}c`)\n  } else if (pitchFormat === 'degree' && degreeRoot !== 0) {\n    const degreeRootStr = degreeRoot < 0 ? degreeRoot : `+${degreeRoot}`\n    options.push(`${degreeRootStr}deg`)\n  }\n\n  if (calculatePeriodInPitch) options.push('exact')\n\n  const filenameSuffix = options.join('_')\n\n  // general properties\n  const tuningSize = tuning_table.note_count - 1\n  const period = tuning_table.scale_data[tuningSize]\n\n  // line building functions\n  const prepend = (num, line) => `${num} ${line}`\n  const rootOffset = (num) => num - tuning_table.base_midi_note\n  const circularIndex = (num) => mathModulo(rootOffset(num), tuningSize)\n  const periodNumber = (num) => Math.floor(rootOffset(num) / tuningSize + rootPeriod)\n  const appendPeriodNum = (line, num) => `${line} (${periodNumber(num)})`\n  const calcPeriod = (line, ind) =>\n    transposeLine(line, transposeSelf(period, periodNumber(ind) + rootPeriod))\n  const addCentsRoot = (cents) => parseFloat(cents) + centsRoot\n\n  let fileFunction, pitchTable\n\n  // start file\n  let file = '# MIDI note / CC name map' + newline\n\n  let pitchLine = (line, ind) => line\n  if (showPeriodNumbers) pitchLine = (line, ind) => appendPeriodNum(line, ind)\n\n  if (pitchFormat === 'scale data') {\n    const unison = transposeSelf(period, 0) // use a 1/1 in the line type of the period\n    pitchTable = [unison, ...tuning_table.scale_data.slice(1, -1)]\n\n    let scalePitch = calculatePeriodInPitch\n      ? (line, ind) => pitchLine(calcPeriod(line, ind), ind)\n      : (line, ind) => pitchLine(line, ind)\n\n    // Iterate over scale data, applying periods if chosen\n    const scaleData = (num, array, table) => {\n      const ind = array.length - num - 1\n      return prepend(ind, scalePitch(table[circularIndex(ind)], ind))\n    }\n\n    fileFunction = (table) =>\n      tuning_table.cents.map((x, i, a) => scaleData(i, a, table)).join(newline)\n  } else if (pitchFormat !== 'degree') {\n    let pitchOffset = (line, ind) => pitchLine(roundToNDecimals(6, parseFloat(line)), ind)\n\n    // assign proper pitch table\n    // will have 6 decimal places of precision, except for cents which is 3\n    switch (pitchFormat) {\n      case 'freq':\n        pitchTable = tuning_table.freq\n        break\n      case 'decimal':\n        pitchTable = tuning_table.decimal\n        break\n      default:\n        pitchTable = tuning_table.cents\n        pitchOffset = (line, ind) => pitchLine(roundToNDecimals(3, addCentsRoot(line)), ind)\n        break\n    }\n\n    // iterate over the first period of the table\n    if (!calculatePeriodInPitch) {\n      const pitchValue = (i, table) => {\n        const ind = table.length - i - 1\n        return prepend(\n          ind,\n          pitchOffset(table[circularIndex(ind) + tuning_table.base_midi_note], ind)\n        )\n      }\n\n      fileFunction = (table) => table.map((x, i, a) => pitchValue(i, a)).join(newline)\n\n      // iterate over the whole table\n    } else {\n      const pitchValue = (i, table) => {\n        const ind = table.length - i - 1\n        return prepend(ind, pitchOffset(table[ind], ind))\n      }\n\n      fileFunction = (table) => table.map((x, i) => pitchValue(i, table)).join(newline)\n    }\n\n    // enumerate scale degrees\n  } else {\n    pitchTable = tuning_table.cents\n    const degreeLine = (num, table) => {\n      const ind = table.length - num - 1\n      let deg = rootOffset(ind) + degreeRoot + tuningSize * rootPeriod\n\n      if (!calculatePeriodInPitch) deg = mathModulo(deg, tuningSize)\n\n      return prepend(ind, pitchLine(`${deg}\\\\${tuningSize}`, ind))\n    }\n\n    fileFunction = (table) => table.map((x, i) => degreeLine(i, table)).join(newline)\n  }\n\n  file += fileFunction(pitchTable)\n\n  save_file(`${tuning_table.filename} ${filenameSuffix}.txt`, file)\n\n  // success\n  return true\n}\n\n/**\n * get_export_url()\n */\n\nfunction get_scale_url() {\n  var url = new URL(window.location.href)\n  var protocol = !R.isEmpty(url.protocol) ? url.protocol + '//' : 'http://'\n  var host = url.host\n  var pathname = !R.isEmpty(url.pathname) ? url.pathname : '/scaleworkshop/'\n  // var domain = !R.isNil(window.location.href) ? window.location.href : 'http://sevish.com/scaleworkshop';\n  var name = encodeURIComponent(jQuery('#txt_name').val())\n  var data = encodeURIComponent(jQuery('#txt_tuning_data').val())\n  var freq = encodeURIComponent(jQuery('#txt_base_frequency').val())\n  var midi = encodeURIComponent(jQuery('#txt_base_midi_note').val())\n  var vert = encodeURIComponent(synth.isomorphicMapping.vertical)\n  var horiz = encodeURIComponent(synth.isomorphicMapping.horizontal)\n  var colors = encodeURIComponent(jQuery('#input_key_colors').val())\n  var waveform = encodeURIComponent(jQuery('#input_select_synth_waveform').val())\n  var ampenv = encodeURIComponent(jQuery('#input_select_synth_amp_env').val())\n\n  return (\n    protocol +\n    host +\n    pathname +\n    '?name=' +\n    name +\n    '&data=' +\n    data +\n    '&freq=' +\n    freq +\n    '&midi=' +\n    midi +\n    '&vert=' +\n    vert +\n    '&horiz=' +\n    horiz +\n    '&colors=' +\n    colors +\n    '&waveform=' +\n    waveform +\n    '&ampenv=' +\n    ampenv\n  )\n}\n\n/**\n * update_page_url()\n */\n\nfunction update_page_url(url = get_scale_url()) {\n  // update this change in the browser's Back/Forward navigation\n  history.pushState({}, tuning_table['description'], url)\n}\n\n/**\n * export_url()\n */\n\nfunction export_url() {\n  var export_url = window.location.href\n\n  if (export_error()) {\n    export_url = 'http://sevish.com/scaleworkshop/'\n  }\n\n  // copy url in to url field\n  jQuery('#input_share_url').val(export_url)\n  console.log('export_url = ' + export_url)\n\n  jQuery('#input_share_url').select()\n  jQuery('#modal_share_url').dialog({\n    modal: true,\n    buttons: {\n      'Copy URL': function () {\n        jQuery('#input_share_url').select()\n        document.execCommand('Copy')\n        jQuery(this).dialog('close')\n      }\n    }\n  })\n\n  // url field clicked\n  jQuery('#input_share_url').click(function (event) {\n    jQuery(this).select()\n  })\n\n  // success\n  return true\n}\n"
  },
  {
    "path": "src/js/generators.js",
    "content": "/**\n * TUNING DATA GENERATORS\n */\n\nfunction generate_equal_temperament() {\n\n  var divider = getFloat('#input_number_of_divisions', 'Warning: no divider')\n  var period = getString('#input_interval_to_divide', 'Warning: no interval to divide')\n\n  // convert period to cents\n  var period_cents = line_to_cents(period);\n\n  // bail if period is invalid\n  if (period_cents === false) {\n    return false;\n  }\n\n  setScaleName(divider + \" equal divisions of \" + period)\n\n  setTuningData(generate_equal_temperament_data(divider, parseFloat(period_cents)));\n\n  parse_tuning_data();\n\n  closePopup('#modal_generate_equal_temperament')\n\n  // success\n  return true;\n}\n\nfunction generate_equal_temperament_data(divider, period) {\n\n  // calculate the size of a single step in this tuning\n  var step = period / divider;\n\n  let notes = []\n\n  for (i = 1; i <= divider; i++) {\n\n    var note = roundToNDecimals(6, i * step);\n\n    // if returned value is an integer, append a . just to make sure the parser will see it as a cents value later\n    if (!note.toString().includes('.')) {\n      note = note.toString() + \".\";\n    }\n\n    notes.push(note)\n  }\n\n  return notes.join(unix_newline)\n}\n\nfunction generate_rank_2_temperament() {\n\n  var generator = getLine('#input_rank-2_generator', 'Warning: no generator')\n\n  var generatorType = getLineType(generator);\n\n  // bail if generator is invalid\n  if (generatorType === LINE_TYPE.INVALID) {\n    return false;\n  }\n\n  var period = getLine('#input_rank-2_period', 'Warning: no period')\n\n  var periodType = getLineType(period);\n\n  // bail if period is invalid\n  if (periodType === LINE_TYPE.INVALID) {\n    return false;\n  }\n\n  var size = parseInt(jQuery(\"#input_rank-2_size\").val());\n  var up = parseInt(jQuery(\"#input_rank-2_up\").val());\n\n  if (isNaN(size) || size < 2) {\n    alert('Warning: scale size must be a number greater than 1');\n    return false;\n  }\n  if (isNaN(up) || up < 0 || up >= size) {\n    alert('Warning: generators up must be a number greater than -1 and less than the scale size');\n    return false;\n  }\n\n  var lineType = jQuery(\"#input_rank-2_type\").val();\n\n  setTuningData(generate_rank_2_temperament_data(generator, period, size, up, lineType))\n\n  setScaleName(\"Rank 2 scale (\" + generator + \", \" + period + \")\");\n\n  parse_tuning_data();\n\n  closePopup('#modal_generate_rank_2_temperament');\n\n  // success\n  return true;\n}\n\nfunction generate_rank_2_temperament_data(generator, period, size, up, lineType) {\n  // empty existing tuning data\n  let tuningData = '';\n\n  // I added these to fix a NaN issue, but they might have been a result of a typo.\n  // If there's still NaN with some params, try uncommenting out these if-statements.\n  // Should only affect ginormous integer ratios - vsicurella\n\n  // Convert to cents if ratio integers are longer than 20 digits\n  // if (getLineType(generator) === LINE_TYPE.RATIO && !ratioIsSafe(generator))\n  //   generator = ratio_to_cents(generator);\n\n  // if (getLineType(period) === LINE_TYPE.RATIO && !ratioIsSafe(period))\n  //   period = ratio_to_cents(period);\n\n  // Scale down generator to start within the period \n  // (helps avoid NaN and 0.0 cents with huge integer ratios)\n  generator = moduloLine(generator, period);\n\n  // Start scale on the lowest generator\n  let powers = up - size + 1;\n  let scale = [moduloLine(transposeSelf(generator, powers), period)];\n  \n  // Transpose each line by the generator and period reduce\n  for (let i = 1; i < size; i++)\n    scale.push(moduloLine(transposeSelf(generator, ++powers), period));\n\n  // sort the scale ascending\n  scale.sort((a, b) => [a, b].map(line_to_decimal).reduce((a, b) => a - b));\n\n  // add the period to the scale\n  scale.push(period);\n\n  // convert scale to output line type\n  switch (lineType) {\n    case \"cents\":\n      scale = scale.map(x => line_to_cents(x).toFixed(6));\n      break;\n    case \"decimals\":\n      scale = scale.map(x => line_to_commadecimal(x, 6));\n  }\n\n  tuningData += scale.slice(1, size + 1).join(unix_newline);\n\n  return tuningData;\n}\n\nfunction generate_harmonic_series_segment() {\n\n  var lo = getFloat('#input_lowest_harmonic', 'Warning: lowest harmonic should be a positive integer')\n  var hi = getFloat('#input_highest_harmonic', 'Warning: highest harmonic should be a positive integer')\n\n  // bail if lo = hi\n  if (lo == hi) {\n    alert(\"Warning: Lowest and highest harmonics are the same. Can't generate a scale based on only one harmonic.\");\n    return false;\n  }\n\n  // ensure that lo is lower than hi\n  if (lo > hi) {\n    [lo, hi] = [hi, lo]\n  }\n\n  setScaleName(\"Harmonics \" + lo + \"-\" + hi);\n\n  setTuningData(generate_harmonic_series_segment_data(lo, hi));\n\n  parse_tuning_data();\n\n  closePopup(\"#modal_generate_harmonic_series_segment\");\n\n  // success\n  return true;\n\n}\n\nfunction generate_harmonic_series_segment_data(lo, hi) {\n  let ratios = []\n\n  for (i = lo + 1; i <= hi; i++) {\n    // add ratio to text box\n    ratios.push(i + \"/\" + lo)\n  }\n\n  return ratios.join(unix_newline)\n}\n\nfunction generate_subharmonic_series_segment() {\n\n  var lo = getFloat('#input_lowest_subharmonic', 'Warning: lowest subharmonic should be a positive integer')\n  var hi = getFloat('#input_highest_subharmonic', 'Warning: highest subharmonic should be a positive integer')\n\n  // bail if lo = hi\n  if (lo == hi) {\n    alert(\"Warning: Lowest and highest subharmonics are the same. Can't generate a scale based on only one subharmonic.\");\n    return false;\n  }\n\n  // ensure that lo is lower than hi\n  if (lo > hi) {\n    [lo, hi] = [hi, lo]\n  }\n\n  setTuningData(generate_subharmonic_series_segment_data(lo, hi));\n\n  setScaleName(\"Subharmonics \" + lo + \"-\" + hi);\n\n  parse_tuning_data();\n\n  closePopup(\"#modal_generate_subharmonic_series_segment\");\n\n  // success\n  return true;\n\n}\n\nfunction generate_subharmonic_series_segment_data(lo, hi) {\n  let ratios = []\n\n  for (i = hi - 1; i >= lo; i--) {\n    ratios.push(hi + \"/\" + i)\n  }\n\n  return ratios.join(unix_newline)\n}\n\nfunction generate_enumerate_chord() {\n\n  var chord = getString('#input_chord', 'Warning: bad input');\n  let chordStr = chord;\n\n  var convert_to_ratios = document.getElementById(\"input_convert_to_ratios\").checked;\n\n  // It doesn't make much sense to mix different values, \n  // but it's cool to experiment with.\n\n  // bail if has invalid\n  var inputTest = chord.replace(\" \", \"\").replace(\"(\", \"\").replace(\")\", \"\").split(\":\");\n  if (inputTest.length < 2) {\n    alert(\"Warning: Chord needs more than one pitch of the form A:B:C...\");\n    return false;\n  }\n  for (var i = 0; i < inputTest.length; i++) {\n    var eval = inputTest[i];\n    if (/^\\d+$/.test(eval))\n      eval += \",\";\n    eval = line_to_decimal(eval);\n    if (eval == 0 || !/(^\\d+([\\,\\.]\\d*)?|([\\\\\\/]\\d+)?$)*/.test(eval)) {\n      alert(\"Warning: Invalid pitch \" + inputTest[i])\n      return false;\n    }\n  }\n\n  // check if it's a tonal inversion\n  // ex: 1/(A:B:C...)\n  var isInversion = document.getElementById(\"input_invert_chord\").checked;\n  if (isInversion)\n    chordStr = \"1/(\" + chord + \")\";\n  if (/^\\d+\\/\\(.*$/.test(chord)) {\n    if (/^1\\/\\((\\d+\\:)+\\d+\\)$/.test(chord)) {\n      isInversion = true;\n      chord = chord.substring(3, chord.length - 1);\n    } else {\n      alert(\"Warning: inversions need to match this syntax: 1/(A:B:C...)\");\n      return false;\n    }\n  }\n\n  // This next safeguard might make it more user friendy,\n  // but I think it's a bit limiting for certain purposes a more advanced\n  // user might try like using NOfEdo values to build chords.\n\n  // bail if first note is in cents\n  //if (isCent(pitches[0]) || isNOfEdo(pitches[0])) {\n  //\t  alert(\"Warning: first pitch cannot be in cents\");\n  //  return false;\n  //}\n\n  if (isInversion) {\n    console.log(\"This is an inversion. Chord is \" + chord);\n    chord = invert_chord(chord);\n    console.log(\"Chord returned: \" + chord);\n    chordStr += (\" (\" + chord + \") \");\n    console.log(\"str = \" + chordStr);\n  }\n\n  var pitches = chord.split(\":\");\n\n  // TODO: if pitches are not harmonics but \"convert_to_ratios\" is true,\n  // update name with proper harmonics format\n  setScaleName(\"Chord \" + chordStr);\n\n  setTuningData(generate_enumerate_chord_data(pitches, convert_to_ratios));\n\n  parse_tuning_data();\n\n  closePopup(\"#modal_enumerate_chord\");\n\n  // success\n  return true;\n}\n\nfunction generate_enumerate_chord_data(pitches, convertToRatios = false) {\n  let ratios = [];\n  var fundamental = 1;\n\n  for (var i = 0; i < pitches.length; i++) {\n\n    // convert a lone integer to a commadecimal\n    if (/^\\d+$/.test(pitches[i])) {\n      pitches[i] = pitches[i] + ',';\n    }\n\n    var isCentsValue = isCent(pitches[i]) || isNOfEdo(pitches[i]);\n    var parsed = line_to_decimal(pitches[i]);\n\n    if (i > 0) {\n      if (isCentsValue && !convertToRatios) {\n        ratios.push(pitches[i])\n      } else {\n        ratios.push(decimal_to_ratio(parsed / fundamental));\n      }\n    }\n    else {\n      fundamental = parsed;\n    }\n  }\n\n  return ratios.join(unix_newline)\n}\n\nfunction generate_cps() {\n\n  // get factors and combination count\n  var f = getString('#input_cps_factors', 'Warning: no factors');\n  var cc = getFloat('#input_cps_combination_count', 'Warning: combination count should be minimum of 2 and less than the number of factors.');\n\n  // bail on missing input\n  if (f === false || cc === false) {\n    return false;\n  }\n\n  // convert input factors to array\n  var factors = f.split(\" \");\n\n  // cc must be integer. discard anything after decimal point\n  cc = parseInt(cc);\n\n  // bail on invalid combination count\n  if ( cc < 2 || cc >= factors.length ) {\n    alert(\"Combination count should be minimum of 2 and less than the number of factors.\");\n    return false;\n  }\n\n  // loop through the array of factors\n  for (let i=0; i < factors.length; i++) {\n\n    // only allow integers - these will treated as harmonics\n    factors[i] = parseInt(factors[i]);\n\n    // future improvement - floats to be allowed. non-integers to be treated as decimals or cents?\n    // factors[i] = parseFloat(factors[i]);\n\n    // bail if any of the factors aren't a number\n    if ( isNaN(factors[i]) ) {\n      alert(\"Factors should be a list of integers e.g. '1 3 7 9'\");\n      return false;\n    }\n\n  }\n\n  // do combinations\n  var products = cps(factors,cc);\n  \n  // remove 1/1 from scale by dividing all products by one of the factors\n  if (document.getElementById(\"input_cps_remove_1\").checked) {\n\n    // remove first product from the set\n    var divisor = products.shift();\n\n    // divide remaining products by the removed product\n    for (let i=0; i<products.length; i++) {\n      products[i] = products[i] + \"/\" + divisor;\n    }\n    \n  }\n  else {\n    for (let i=0; i<products.length; i++) {\n      products[i] = products[i] + \"/1\";\n    }\n  }\n\n  // octave reduce\n  if (document.getElementById(\"input_cps_reduce\").checked) {\n\n    // each line modulo with 2/1 (this has the side effect of simplifying the ratios)\n    for (let i=0; i<products.length; i++) {\n      products[i] = moduloLine(products[i], \"2/1\");\n    }\n\n    // make the scale repeat at the octave\n    products.push(\"2/1\");\n\n  }\n  else {\n\n    // simplify the ratios\n    for (let i=0; i<products.length; i++) {\n      products[i] = simplifyRatio(products[i]);\n    }\n\n  }\n\n  // sort ascending\n  products = scaleSort(products);\n\n  setScaleName(cc + \")\" + factors.length + \" CPS \" + factors.join(\" \"));\n  setTuningData(products.join(unix_newline));\n  parse_tuning_data();\n  closePopup(\"#modal_generate_cps\");\n  return true;\n}\n\n\nfunction load_preset_scale(a) {\n\n  var data = \"\";\n  var name = \"\";\n  var freq = 440;\n  var midi = 69;\n\n  switch (a) {\n\n    // Traditional\n\n    case \"pelog\":\n    name = \"Normalised Pelog, Kunst, 1949. Average of 39 Javanese gamelans\";\n    data = [\"120.\", \"270.\", \"540.\", \"670.\", \"785.\", \"950.\", \"1215.\"];\n    break;\n\n    case \"slendro\":\n    name = \"Average of 30 measured slendro gamelans, W. Surjodiningrat et al., 1993.\";\n    data = [\"231.\", \"474.\", \"717.\", \"955.\", \"1208.\"];\n    break;\n\n    case \"ragabageshri\":\n    name = \"Raga Bageshri\";\n    data = [\"10/9\", \"32/27\", \"4/3\", \"3/2\", \"5/3\", \"16/9\", \"2/1\"];\n    break;\n\n    case \"ragabhairavi\":\n    name = \"Raga Bhairavi\";\n    data = [\"16/15\", \"9/8\", \"6/5\", \"27/20\", \"3/2\", \"8/5\", \"9/5\", \"2/1\"];\n    break;\n\n    case \"ragakafi\":\n    name = \"Raga Kafi\";\n    data = [\"9/8\", \"32/27\", \"4/3\", \"3/2\", \"5/3\", \"16/9\", \"2/1\"];\n    break;\n\n    case \"ragatodi\":\n    name = \"Raga Todi\";\n    data = [\"256/243\", \"32/27\", \"45/32\", \"3/2\", \"128/81\", \"15/8\", \"2/1\"];\n    break;\n\n    case \"ragayaman\":\n    name = \"Raga Yaman\";\n    data = [\"9/8\", \"5/4\", \"45/32\", \"3/2\", \"27/16\", \"15/8\", \"2/1\"];\n    break;\n\n    case \"22shruti\":\n    name = \"22 Shruti\";\n    data = [\"256/243\", \"16/15\", \"10/9\", \"9/8\", \"32/27\", \"6/5\", \"5/4\", \"81/64\", \"4/3\", \"27/20\", \"45/32\", \"729/512\", \"3/2\", \"128/81\", \"8/5\", \"5/3\", \"27/16\", \"16/9\", \"9/5\", \"15/8\", \"243/128\", \"2/1\"];\n    break;\n\n    case \"hirajoshi\":\n    name = \"Hirajoshi\";\n    data = [\"185.\", \"337.\", \"683.\", \"790.\", \"2/1\"];\n    break;\n\n    case \"balafon\":\n    name = \"Observed balafon tuning from Patna, Helmholtz/Ellis p. 518, nr.81\";\n    data = [\"187.\", \"356.\", \"526.\", \"672.\", \"856.\", \"985.\", \"1222.\"];\n    break;\n\n    case \"balafon2\":\n    name = \"Observed balafon tuning from West-Africa, Helmholtz/Ellis p. 518, nr.86\";\n    data = [\"152.\", \"287.\", \"533.\", \"724.\", \"890.\", \"1029.\", \"2/1\"];\n    break;\n\n    case \"balafon3\":\n    name = \"Pitt-River's balafon tuning from West-Africa, Helmholtz/Ellis p. 518, nr.87\";\n    data = [\"195.\", \"289.\", \"513.\", \"686.\", \"796.\", \"1008.\", \"1209.\"];\n    break;\n\n    case \"balafon4\":\n    name = \"Mandinka balafon scale from Gambia\";\n    data = [\"151.\", \"345.\", \"526.\", \"660.\", \"861.\", \"1025.\", \"1141.\"];\n    break;\n\n    case \"balafon5\":\n    name = \"An observed balafon tuning from Singapore, Helmholtz/Ellis p. 518, nr.82\";\n    data = [\"169.\", \"350.\", \"543.\", \"709.\", \"894.\", \"1040.\", \"1205.\"];\n    break;\n\n    case \"balafon6\":\n    name = \"Observed balafon tuning from Burma, Helmholtz/Ellis p. 518, nr.84\";\n    data = [\"114.\", \"350.\", \"550.\", \"687.\", \"838.\", \"1032.\", \"1196.\"];\n    break;\n\n    case \"balafon7\":\n    name = \"Observed South Pacific pentatonic balafon tuning, Helmholtz/Ellis p. 518, nr.93\";\n    data = [\"202.\", \"370.\", \"685.\", \"903.\", \"2/1\"];\n    break;\n\n    case \"5edo\":\n    name = \"Equal pentatonic (5edo)\";\n    data = [\"1\\\\5\", \"2\\\\5\", \"3\\\\5\", \"4\\\\5\", \"5\\\\5\"];\n    break;\n\n    case \"7edo\":\n    name = \"Equal heptatonic (7edo)\";\n    data = [\"1\\\\7\", \"2\\\\7\", \"3\\\\7\", \"4\\\\7\", \"5\\\\7\", \"6\\\\7\", \"7\\\\7\"];\n    break;\n\n    case \"archytasdiatonic\":\n    name = \"Archytas Diatonic\";\n    data = [\"28/27\", \"32/27\", \"4/3\", \"3/2\", \"14/9\", \"16/9\", \"2/1\"];\n    break;\n\n    case \"archytasenharmonic\":\n    name = \"Archytas Enharmonic\";\n    data = [\"28/27\", \"16/15\", \"4/3\", \"3/2\", \"14/9\", \"8/5\", \"2/1\"];\n    break;\n\n    case \"didymuschromatic\":\n    name = \"Didymus Chromatic\";\n    data = [\"16/15\", \"10/9\", \"4/3\", \"3/2\", \"8/5\", \"5/3\", \"2/1\"];\n    break;\n\n    case \"ptolemydiatonicditoniaion\":\n    name = \"Ptolemy Diatonic Ditoniaion\";\n    data = [\"256/243\", \"32/27\", \"4/3\", \"3/2\", \"128/81\", \"16/9\", \"2/1\"];\n    break;\n\n    case \"ptolemydiatonichemiolion\":\n    name = \"Ptolemy Diatonic Hemiolion\";\n    data = [\"12/11\", \"6/5\", \"4/3\", \"3/2\", \"18/11\", \"9/5\", \"2/1\"];\n    break;\n\n    case \"pythagorean\":\n    name = \"Pythagorean\";\n    data = [\"256/243\", \"9/8\", \"32/27\", \"81/64\", \"4/3\", \"1024/729\", \"3/2\", \"128/81\", \"27/16\", \"16/9\", \"4096/2187\", \"2/1\"];\n    break;\n\n    case \"werckmeisteriii\":\n    name = \"Werckmeister III (1691)\";\n    data = [\"107.82\", \"203.91\", \"311.72\", \"401.955\", \"503.91\", \"605.865\", \"701.955\", \"809.775\", \"900.\", \"1007.82\", \"1103.91\", \"1200.\"];\n    break;\n\n    case \"young1799\":\n    name = \"Young (1799)\";\n    data = [\"106.\", \"198.\", \"306.2\", \"400.1\", \"502.\", \"604.\", \"697.9\", \"806.1\", \"898.1\", \"1004.1\", \"1102.\", \"1200.\"];\n    break;\n\n    case \"12edo\":\n    name = \"12-tone equal temperament\";\n    data = [\"100.\", \"200.\", \"300.\", \"400.\", \"500.\", \"600.\", \"700.\", \"800.\", \"900.\", \"1000.\", \"1100.\", \"1200.\"];\n    break;\n\n    // Just intonation\n\n    case \"partch43\":\n    name = \"Harry Partch 43-tone\";\n    data = [\"81/80\", \"33/32\", \"21/20\", \"16/15\", \"12/11\", \"11/10\", \"10/9\", \"9/8\", \"8/7\", \"7/6\", \"32/27\", \"6/5\", \"11/9\", \"5/4\", \"14/11\", \"9/7\", \"21/16\", \"4/3\", \"27/20\", \"11/8\", \"7/5\", \"10/7\", \"16/11\", \"40/27\", \"3/2\", \"32/21\", \"14/9\", \"11/7\", \"8/5\", \"18/11\", \"5/3\", \"27/16\", \"12/7\", \"7/4\", \"16/9\", \"9/5\", \"20/11\", \"11/6\", \"15/8\", \"40/21\", \"64/33\", \"160/81\", \"2/1\"];\n    break;\n\n    case \"carlossuperjust\":\n    name = \"Wendy Carlos Super Just\";\n    data = [\"17/16\", \"9/8\", \"6/5\", \"5/4\", \"4/3\", \"11/8\", \"3/2\", \"13/8\", \"5/3\", \"7/4\", \"15/8\", \"2/1\"];\n    break;\n\n    case \"gradycentaur\":\n    name = \"Kraig Grady Centaur\";\n    data = [\"21/20\", \"9/8\", \"7/6\", \"5/4\", \"4/3\", \"7/5\", \"3/2\", \"14/9\", \"5/3\", \"7/4\", \"15/8\", \"2/1\"];\n    freq = 264;\n    midi = 60;\n    break;\n\n    case \"gradycentauras\":\n    name = \"Kraig Grady Centaura Subharmonic\";\n    data = [\"15/14\", \"10/9\", \"40/33\", \"5/4\", \"4/3\", \"10/7\", \"3/2\", \"45/28\", \"5/3\", \"20/11\", \"15/8\", \"2/1\"];\n    break;\n\n    case \"gradycentaurah\":\n    name = \"Kraig Grady Centaura Harmonic\";\n    data = [\"33/32\", \"9/8\", \"7/6\", \"5/4\", \"4/3\", \"11/8\", \"3/2\", \"14/9\", \"5/3\", \"7/4\", \"15/8\", \"2/1\"];\n    break;\n\n    // Equal temperament subsets\n\n    case \"11machine6\":\n    name = \"11edo machine[6]\";\n    data = [\"2\\\\11\", \"4\\\\11\", \"6\\\\11\", \"8\\\\11\", \"10\\\\11\", \"11\\\\11\"];\n    break;\n  \n    case \"13glacial7\":\n    name = \"13edo glacial[7]\";\n    data = [\"2\\\\13\", \"4\\\\13\", \"6\\\\13\", \"8\\\\13\", \"10\\\\13\", \"12\\\\13\", \"13\\\\13\"];\n    break;\n\n    case \"13father8\":\n    name = \"13edo father[8]\";\n    data = [\"2\\\\13\", \"4\\\\13\", \"5\\\\13\", \"7\\\\13\", \"9\\\\13\", \"10\\\\13\", \"12\\\\13\", \"13\\\\13\"];\n    break;\n\n    case \"15blackwood10\":\n    name = \"15edo blackwood[10]\";\n    data = [\"160.\", \"240.\", \"400.\", \"480.\", \"640.\", \"720.\", \"880.\", \"960.\", \"1120.\", \"2/1\"];\n    break;\n\n    case \"16mavila7\":\n    name = \"16edo mavila[7]\";\n    data = [\"2\\\\16\", \"4\\\\16\", \"7\\\\16\", \"9\\\\16\", \"11\\\\16\", \"13\\\\16\", \"16\\\\16\"];\n    break;\n\n    case \"17superpyth12\":\n    name = \"17edo superpyth[12]\";\n    data = [\"70.58824\", \"141.17647\", \"282.35294\", \"352.94118\", \"494.11765\", \"564.70588\", \"635.29412\", \"776.47059\", \"847.05882\", \"988.23529\", \"1058.82353\", \"2/1\"];\n    break;\n\n    case \"17rast\":\n    name = \"17edo Rast\";\n    data = [\"3\\\\17\", \"5\\\\17\", \"7\\\\17\", \"10\\\\17\", \"13\\\\17\", \"15\\\\17\", \"17\\\\17\"];\n    break;\n\n    case \"22porcupine8\":\n    name = \"22edo porcupine[8]\";\n    data = [\"3\\\\22\", \"6\\\\22\", \"9\\\\22\", \"12\\\\22\", \"15\\\\22\", \"18\\\\22\", \"21\\\\22\", \"22\\\\22\"];\n    break;\n\n    case \"22orwell9\":\n    name = \"22edo orwell[9]\";\n    data = [\"2\\\\22\", \"5\\\\22\", \"7\\\\22\", \"10\\\\22\", \"12\\\\22\", \"15\\\\22\", \"17\\\\22\", \"20\\\\22\", \"22\\\\22\"];\n    break;\n\n    case \"22pajara12\":\n    name = \"22edo pajara[12]\";\n    data = [\"2\\\\22\", \"4\\\\22\", \"6\\\\22\", \"8\\\\22\", \"10\\\\22\", \"11\\\\22\", \"13\\\\22\", \"15\\\\22\", \"17\\\\22\", \"19\\\\22\", \"21\\\\22\", \"22\\\\22\"];\n    break;\n    \n    case \"26lemba10\":\n    name = \"26edo lemba[10]\";\n    data = [\"3\\\\26\", \"5\\\\26\", \"8\\\\26\", \"10\\\\26\", \"13\\\\26\", \"16\\\\26\", \"18\\\\26\", \"21\\\\26\", \"23\\\\26\", \"26\\\\26\"];\n    break;\n\n    case \"26flattone12\":\n    name = \"26edo flattone[12]\";\n    data = [\"46.15385\", \"184.61538\", \"230.76923\", \"369.23077\", \"507.69231\", \"553.84615\", \"692.30769\", \"738.46154\", \"876.92308\", \"923.07692\", \"1061.53846\", \"2/1\"];\n    break;\n\n    case \"31meantone19\":\n    name = \"31edo meantone[19]\";\n    data = [\"1\\\\31\", \"3\\\\31\", \"4\\\\31\", \"6\\\\31\", \"8\\\\31\", \"9\\\\31\", \"11\\\\31\", \"13\\\\31\", \"14\\\\31\", \"16\\\\31\", \"17\\\\31\", \"19\\\\31\", \"21\\\\31\", \"22\\\\31\", \"24\\\\31\", \"26\\\\31\", \"27\\\\31\", \"29\\\\31\", \"31\\\\31\"];\n    break;\n\n    case \"46sensi11\":\n    name = \"46edo sensi[11]\";\n    data = [\"5\\\\46\", \"10\\\\46\", \"15\\\\46\", \"17\\\\46\", \"22\\\\46\", \"27\\\\46\", \"32\\\\46\", \"34\\\\46\", \"39\\\\46\", \"44\\\\46\", \"46\\\\46\"];\n    break;\n\n    case \"313island9\":\n    name = \"313edo island[9]\";\n    data = [\"203.19489\", \"249.20128\", \"452.39617\", \"498.40256\", \"701.59744\", \"747.60383\", \"950.79872\", \"996.80511\", \"2/1\"];\n    break;\n\n    // Non-octave\n\n    case \"bohlenpierceeq\":\n    name = \"Bohlen-Pierce equal (13edo3)\";\n    data = [\"146.304\", \"292.608\", \"438.913\", \"585.217\", \"731.521\", \"877.825\", \"1024.130\", \"1170.434\", \"1316.738\", \"1463.042\", \"1609.347\", \"1755.651\", \"3/1\"];\n    break;\n\n    case \"bohlenpierceji\":\n    name = \"Bohlen-Pierce just\";\n    data = [\"27/25\", \"25/21\", \"9/7\", \"7/5\", \"75/49\", \"5/3\", \"9/5\", \"49/25\", \"15/7\", \"7/3\", \"63/25\", \"25/9\", \"3/1\"];\n    break;\n\n    case \"carlosalpha\":\n    name = \"Wendy Carlos Alpha\";\n    data = [\"78.\", \"156.\", \"234.\", \"312.\", \"390.\", \"468.\", \"546.\", \"624.\", \"702.\"];\n    break;\n\n    case \"carlosbeta\":\n    name = \"Wendy Carlos Beta\";\n    data = [\"63.8\", \"127.6\", \"191.4\", \"255.2\", \"319.0\", \"382.8\", \"446.6\", \"510.4\", \"574.2\", \"638.0\", \"701.8\"];\n    break;\n\n    case \"carlosgamma\":\n    name = \"Wendy Carlos Gamma\";\n    data = [\"35.1\", \"70.2\", \"105.3\", \"140.4\", \"175.5\", \"210.6\", \"245.7\", \"280.8\", \"315.9\", \"351.0\", \"386.1\", \"421.2\", \"456.3\", \"491.4\", \"526.5\", \"561.6\", \"596.7\", \"631.8\", \"666.9\", \"702.0\"];\n    break;\n\n    case \"65cet\":\n    name = \"65 cent Equal Temperament\";\n    data = [\"65.0\"];\n    break;\n\n    case \"88cet\":\n    name = \"88 cent Equal Temperament\";\n    data = [\"88.0\"];\n    break;\n\n    default:\n    return false;\n\n  }\n\n  setScaleName(name);\n  setTuningData(data.join(unix_newline));\n  jQuery(\"#txt_base_frequency\").val(freq);\n  jQuery(\"#txt_base_midi_note\").val(midi);\n  parse_tuning_data();\n  closePopup(\"#modal_load_preset_scale\");\n\n}\n"
  },
  {
    "path": "src/js/graphics.js",
    "content": "/**\n * graphics.js\n * Functions for rendering of tuning graphics\n */\n\n// draws a graphic of the scale represented as notches on a horizontal rule\nfunction render_graphic_scale_rule() {\n  let canvas = document.getElementById('graphic-scale-rule')\n  let w = canvas.width\n  let h = canvas.height\n  let ctx = canvas.getContext('2d')\n\n  // render background\n  ctx.fillStyle = '#fff'\n  ctx.fillRect(0, 0, w, h)\n\n  // render a plain horizontal rule\n  ctx.beginPath()\n  ctx.moveTo(0, h * 0.5)\n  ctx.lineTo(w, h * 0.5)\n  ctx.strokeStyle = '#555'\n  ctx.lineWidth = 3\n  ctx.stroke()\n\n  // if scale data exists then add some notches to the rule\n  if (tuning_table.note_count > 0) {\n    let equave = tuning_table.tuning_data[tuning_table.note_count - 1]\n    for (i = 0; i < tuning_table.note_count; i++) {\n      let pos = 1 + (w - 2) * (Math.log(tuning_table.tuning_data[i]) / Math.log(equave))\n      ctx.beginPath()\n      ctx.moveTo(pos, h * 0.4)\n      ctx.lineTo(pos, h * 0.6)\n      ctx.strokeStyle = '#555'\n      ctx.lineWidth = 3\n      ctx.stroke()\n    }\n  }\n}\n\n// init graphics\nrender_graphic_scale_rule()\n"
  },
  {
    "path": "src/js/helpers.js",
    "content": "/**\n * HELPER FUNCTIONS\n */\n\n// Set precision to cover possible integers before scientific notation\nDecimal.precision = 21\n\n// modulo function\nNumber.prototype.mod = function (n) {\n  return ((this % n) + n) % n\n}\n\n// modulo function (forward compatibility)\nfunction mathModulo(n, d) {\n  return ((n % d) + d) % d\n}\n\n// logarithm-based modulo function, only supporting modulus > 1\nfunction logModulo(n, d) {\n  const [floatn, floatd] = [n, d].map(parseFloat);\n  if ( floatn === 0 \n    || floatd <= 1 \n    || Number.isNaN(floatn) \n    || Number.isNaN(floatd)\n    )\n    return NaN;\n\n  const [nlog, dlog] = [Decimal.log2(n), Decimal.log2(d)];\n  const modPower = nlog.div(dlog).floor();\n  return Decimal(n).div(Decimal(d).pow(modPower)).toNumber();\n}\n\n// convert a cents value to decimal\nfunction cents_to_decimal(input) {\n  const inputfloat = parseFloat(input);\n  if (Number.isNaN(inputfloat)) return NaN;\n  return Decimal.pow(2, Decimal(input).div(1200)).toNumber();\n}\n\n// convert a ratio (string 'x/y') to decimal\nfunction ratio_to_decimal(input) {\n  if (isRatio(input)) {\n    const [val1, val2] = input.split('/').map(Decimal);\n    return val1.div(val2).toNumber();\n  } else {\n    alert('Invalid input: ' + input)\n    return false\n  }\n}\n\n// convert a comma decimal (1,25) to decimal\nfunction commadecimal_to_decimal(input) {\n  if (isCommaDecimal(input)) {\n    input = parseFloat(input.toString().replace(',', '.'))\n    if (input === 0 || isNaN(input)) {\n      return false\n    } else {\n      return input\n    }\n  } else {\n    alert('Invalid input: ' + input)\n    return false\n  }\n}\n\n// convert a decimal (1.25) into commadecimal (1,25)\nfunction decimal_to_commadecimal(input) {\n  if (/^\\d+\\.?\\d*$/.test(input)) {\n    return input.toFixed(6).replace('.', ',')\n  } else {\n    alert('Invalid input: ' + input)\n    return false\n  }\n}\n\n// convert a decimal into cents\nfunction decimal_to_cents(input) {\n  if (input === false) {\n    return false\n  }\n  const inputfloat = parseFloat(input);\n  if (Number.isNaN(inputfloat) || inputfloat === 0) {\n    return false\n  } else {\n    input = Decimal(input)\n    return Decimal.log2(input).mul(1200).toNumber();\n  }\n}\n\n// convert a ratio to cents\nfunction ratio_to_cents(input) {\n  return decimal_to_cents(ratio_to_decimal(input))\n}\n\n// convert an n-of-m-edo (string 'x\\y') to decimal\nfunction n_of_edo_to_decimal(input) {\n  if (isNOfEdo(input)) {\n    const [val1, val2] = input.split('\\\\').map(Decimal)\n    return Decimal(2).pow(val1.div(val2)).toNumber();\n  } else {\n    alert('Invalid input: ' + input)\n    return false\n  }\n}\n\n// convert an n-of-m-edo (string 'x\\y') to cents\nfunction n_of_edo_to_cents(input) {\n  return decimal_to_cents(n_of_edo_to_decimal(input))\n}\n\nfunction isCent(input) {\n  // true, when the input has numbers at the beginning, followed by a dot, ending with any number of numbers\n  // for example: 700.00, -700.00\n  if (typeof input !== 'string') {\n    return false\n  }\n  return /^-?\\d+\\.\\d*$/.test(input.trim())\n}\n\nfunction isCommaDecimal(input) {\n  // true, when the input has numbers at the beginning, followed by a comma, ending with any number of numbers\n  // for example: 1,25\n  if (typeof input !== 'string') {\n    return false\n  }\n  return /^\\d+\\,\\d*$/.test(input.trim())\n}\n\nfunction isNOfEdo(input) {\n  // true, when the input has numbers at the beginning and the end, separated by a single backslash\n  // for example: 7\\12, -7\\12\n  return /^-?\\d+\\\\\\d+$/.test(input)\n}\n\nfunction isRatio(input) {\n  // true, when the input has numbers at the beginning and the end, separated by a single slash\n  // for example: 3/2\n  return /^\\d+\\/\\d+$/.test(input)\n}\n\nfunction getLineType(input) {\n  if (isCent(input)) {\n    return LINE_TYPE.CENTS\n  }\n  if (isCommaDecimal(input)) {\n    return LINE_TYPE.DECIMAL\n  }\n  if (isNOfEdo(input)) {\n    return LINE_TYPE.N_OF_EDO\n  }\n  if (isRatio(input)) {\n    return LINE_TYPE.RATIO\n  }\n\n  return LINE_TYPE.INVALID\n}\n\n// convert any input 'line' to decimal\nfunction line_to_decimal(input) {\n  let converterFn = () => false\n\n  switch (getLineType(input)) {\n    case LINE_TYPE.CENTS:\n      converterFn = cents_to_decimal\n      break\n    case LINE_TYPE.DECIMAL:\n      converterFn = commadecimal_to_decimal\n      break\n    case LINE_TYPE.N_OF_EDO:\n      converterFn = n_of_edo_to_decimal\n      break\n    case LINE_TYPE.RATIO:\n      converterFn = ratio_to_decimal\n      break\n  }\n\n  return converterFn(input)\n}\n\n// convert any input 'line' to commadecimal, with a padding options for display\nfunction line_to_commadecimal(input, padDecimals = 0, truncateDecimalsPastPad = false) {\n  let decimal = line_to_decimal(input)\n  if (decimal === false) return decimal\n\n  let decimalStr = String(decimal)\n\n  // Padding stuff\n  if (padDecimals > 0) {\n    if (decimalStr.includes('.')) {\n      const decLength = decimalStr.split('.')[1].length\n\n      if (padDecimals > decLength)\n        for (var i = 0; i < padDecimals - decLength; i++) decimalStr += '0'\n      else if (truncateDecimalsPastPad && decLength > padDecimals)\n        decimalStr = decimalStr.slice(0, decimalStr.indexOf('.') + padDecimals + 1)\n    } else decimalStr += '.000000'\n  }\n\n  decimalStr = decimalStr.replace('.', ',')\n\n  return decimalStr\n}\n\n\nfunction isNegativeInterval(input) {\n  // true if cents or N of EDO evaluates to a negative number\n  // LINE_TYPE.INVALID if invalid type or if ratio, decimal, \n  //   or N of EDO denominator is negative\n  // false otherwise\n\n  if (typeof input !== 'string') return LINE_TYPE.INVALID\n\n  const hasNegation = input.match('-') !== null;\n  const type = getLineType(input);\n  switch(type) {\n    // Zero is nonnegative\n    case LINE_TYPE.CENTS:\n      return (/^0+\\.0*$/.test(input)) ? false : hasNegation;\n\n    case LINE_TYPE.N_OF_EDO:\n        return (input.trim()[0] === '0') ? false : hasNegation;\n\n    case LINE_TYPE.RATIO:\n    case LINE_TYPE.DECIMAL:\n      return (hasNegation) ? LINE_TYPE.INVALID : false;\n\n    default:\n      return LINE_TYPE.INVALID\n  }\n}\n\n\n// convert any input 'line' to a cents value\nfunction line_to_cents(input) {\n  return decimal_to_cents(line_to_decimal(input))\n}\n\n// convert a midi note number to a frequency in Hertz\n// assuming 12-edo at 440Hz\nfunction mtof(input) {\n  const frequencyOfC0 = 8.17579891564\n  return frequencyOfC0 * Math.pow(SEMITONE_RATIO_IN_12_EDO, parseInt(input))\n}\n\n// convert a frequency to a midi note number and cents offset\n// assuming 12-edo at 440Hz\n// returns an array [midi_note_number, cents_offset]\nfunction ftom(input) {\n  const midiNoteNumberOfA4 = 69\n  var midi_note_number = midiNoteNumberOfA4 + 12 * Math.log2(parseFloat(input) / 440)\n  var cents_offset = (midi_note_number - Math.round(midi_note_number)) * 100\n  midi_note_number = Math.round(midi_note_number)\n  return [midi_note_number, cents_offset]\n}\n\n// convert an input string into a filename-sanitized version\n// if input is empty, returns \"tuning\" as a fallback\nfunction sanitize_filename(input) {\n  if (R.isEmpty(input.trim())) {\n    return 'untitled scale'\n  }\n  return input.replace(/[|&;$%@\"<>()+,?]/g, '').replace(/\\//g, '_')\n}\n\n// clear all inputted scale data\nfunction clear_all() {\n  const midiNoteNumberOfA4 = 69\n  // empty text fields\n  jQuery('#txt_tuning_data').val('')\n  jQuery('#txt_name').val('')\n\n  // empty any information displayed on page\n  jQuery('#tuning-table').empty()\n\n  // restore default base tuning\n  jQuery('#txt_base_frequency').val(440)\n  jQuery('#txt_base_midi_note').val(midiNoteNumberOfA4)\n\n  // re-init tuning_table\n  tuning_table = {\n    scale_data: [], // an array containing list of intervals input by the user\n    tuning_data: [], // an array containing the same list above converted to decimal format\n    note_count: 0, // number of values stored in tuning_data\n    freq: [], // an array containing the frequency for each MIDI note\n    cents: [], // an array containing the cents value for each MIDI note\n    decimal: [], // an array containing the frequency ratio expressed as decimal for each MIDI note\n    base_frequency: 440, // init val\n    base_midi_note: midiNoteNumberOfA4, // init val\n    description: '',\n    filename: ''\n  }\n\n  // re-draw graphics\n  render_graphic_scale_rule()\n}\n\n// find MIDI note name from MIDI note number\nfunction midi_note_number_to_name(input) {\n  var n = parseInt(input)\n  var quotient = Math.floor(n / 12)\n  var remainder = n % 12\n  var name = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B']\n  return name[remainder] + quotient\n}\n\n// calculate the sum of the values in a given array given a stopping index\nfunction sum_array(array, endIndex) {\n  return array.slice(0, endIndex).reduce((sum, x) => sum + parseInt(x), 0)\n}\n\n// rotates the array by given steps\nfunction rotate(array, steps) {\n  let startInd = array.length - mathModulo(steps, array.length)\n  return [...array.slice(startInd), ...array.slice(0, startInd)]\n}\n\n// calculate a continued fraction for the given number\nfunction get_cf(num, maxiterations = 15, roundf = 10) {\n  const numfloat = parseFloat(num);\n  if (numfloat === 0 || maxiterations < 1) return [0]\n  else if (Number.isNaN(numfloat)) return NaN\n\n  num = Decimal(num)\n\n  var cf = [] // the continued fraction\n  var digit\n\n  var roundInv = Decimal(0.1).pow(roundf);\n\n  var iterations = 0\n  while (iterations < maxiterations) {\n    digit = num.floor().toNumber();\n    cf.push(digit)\n\n    num = num.sub(digit)\n\n    if (num.eq(0) || num.lte(roundInv))\n      break\n\n    num = Decimal(1).div(num);\n\n    iterations++\n  }\n\n  return cf\n}\n\n// calculate a single convergent for a given continued fraction\nfunction get_convergent(cf, depth = 0) {\n  // Return whole number if cf is a number\n  if (typeof cf === 'number') {\n    let cfNum = parseInt(cf)\n    if (cfNum === 0) return '0/1'\n    else if (!cfNum) return NaN\n    else return `${cfNum}/1`\n  }\n\n  // Make sure indicies are valid\n  let parsedCf = []\n  for (let num of cf) {\n    num = parseInt(num)\n    if (isNaN(num)) return NaN\n    parsedCf.push(num)\n  }\n\n  var cfdigit // the continued fraction digit\n  var num // the convergent numerator\n  var den // the convergent denominator\n  var tmp // for easy reciprocation\n\n  if (depth >= parsedCf.length || depth == 0) depth = parsedCf.length\n\n  for (var d = 0; d < depth; d++) {\n    cfdigit = parsedCf[d]\n    num = cfdigit\n    den = 1\n\n    // calculate the convergent\n    for (var i = d; i > 0; i--) {\n      tmp = den\n      den = num\n      num = tmp\n      num += den * parsedCf[i - 1]\n    }\n  }\n\n  return `${num}/${den}`\n}\n\n// convert a decimal or commadecimal to ratio (string 'x/y'), may have rounding errors for irrationals\nfunction decimal_to_ratio(input, iterations = 15, depth = 0) {\n  if (isCommaDecimal(input)) input = commadecimal_to_decimal(input)\n  if (input === false) return false\n\n  const inputfloat = parseFloat(input)\n\n  if (inputfloat === 0 || Number.isNaN(inputfloat)) {\n    return false\n  } else {\n    var inputcf = get_cf(input, iterations, 6)\n    return get_convergent(inputcf, depth)\n  }\n}\n\nfunction cents_to_ratio(input, iterations = 15, depth = 0) {\n  return decimal_to_ratio(cents_to_decimal(input), iterations, depth)\n}\n\nfunction n_of_edo_to_ratio(input, iterations = 15, depth = 0) {\n  return decimal_to_ratio(n_of_edo_to_decimal(input), iterations, depth)\n}\n\n// calculate all best rational approximations given a continued fraction\nfunction get_convergents(cf, numarray, denarray, perlimit, cindOut = null) {\n  var cfdigit // the continued fraction digit\n  var num // the convergent numerator\n  var den // the convergent denominator\n  var scnum // the semiconvergent numerator\n  var scden // the semiconvergen denominator\n  var cind = [] // tracks indicies of convergents\n\n  for (var d = 0; d < cf.length; d++) {\n    cfdigit = cf[d]\n    num = cfdigit\n    den = 1\n\n    // calculate the convergent\n    for (var i = d; i > 0; i--) {\n      ;[den, num] = [num, den]\n      num += den * cf[i - 1]\n    }\n\n    if (d > 0) {\n      for (var i = 1; i < cfdigit; i++) {\n        scnum = num - (cfdigit - i) * numarray[cind[d - 1]]\n        scden = den - (cfdigit - i) * denarray[cind[d - 1]]\n\n        if (scden > perlimit) break\n\n        numarray.push(scnum)\n        denarray.push(scden)\n      }\n    }\n\n    if (den > perlimit) break\n\n    cind.push(numarray.length)\n    numarray.push(num)\n    denarray.push(den)\n  }\n\n  if (!(cindOut === null)) {\n    for (var i = 0; i < cind.length; i++) {\n      cindOut.push(cind[i])\n    }\n  }\n\n  //for (var i = 0; i < denarray.length; i++)\n  //  console.log(numarray[i]+\"/\"+denarray[i]);\n}\n\n// generate and display MOS list\nfunction show_mos_cf(per, gen, ssz, threshold) {\n  var maxsize = 400 // maximum period size\n  var maxcfsize = 12 // maximum continued fraction length\n  var roundf = 4 // rounding factor in case continued fraction blows up\n\n  threshold = Decimal(threshold);\n\n  per = line_to_decimal(per)\n  if (per <= 0 || isNaN(per)) {\n    jQuery('#info_rank_2_mos').text('invalid period')\n    return false\n  }\n\n  gen = line_to_decimal(gen)\n  if (gen <= 0 || isNaN(gen)) {\n    jQuery('#info_rank_2_mos').text('invalid generator')\n    return false\n  }\n\n  var genlog = Decimal.log(gen).div(Decimal.log(per)).toNumber(); // the logarithmic ratio to generate MOS info\n\n  var cf = [] // continued fraction\n  var nn = [] // MOS generators\n  var dd = [] // MOS periods\n\n  cf = get_cf(genlog, maxcfsize, roundf)\n  get_convergents(cf, nn, dd, maxsize)\n\n  // filter by step size threshold\n  var gc = decimal_to_cents(gen)\n  var pc = decimal_to_cents(per)\n  var L = pc + gc // Large step\n  var s = pc // small step\n  var c = gc // chroma (L - s)\n\n  let roundInv = Decimal(1).div(roundf);\n\n  for (var i = 1; i < cf.length; i++) {\n    L -= c * cf[i]\n    s = c\n    c = L - s\n\n    // break if g is some equal division of period\n    if (roundInv.gte(c) && cf.length < maxcfsize) {\n      // add size-1\n      // not sure if flaw in the algorithm or weird edge case\n\n      if (dd[dd.length - 2] != dd[dd.length - 1] - 1)\n        dd.splice(dd.length - 1, 0, dd[dd.length - 1] - 1)\n\n      break\n    }\n\n    if (threshold.gte(c)) {\n      var ind = sum_array(cf, i + 1)\n      dd.splice(ind + 1, dd.length - ind)\n      break\n    }\n  }\n\n  // the first two periods are trivial\n  dd.shift()\n  dd.shift()\n\n  jQuery('#info_rank_2_mos').text(dd.join(', '))\n}\n\n// helper function to simply pass in an interval and get an array of ratios returned\nfunction get_rational_approximations(\n  intervalIn,\n  numerators,\n  denominators,\n  roundf = 999999,\n  cidxOut = null,\n  ratiosOut = null,\n  numlimits = null,\n  denlimits = null,\n  ratiolimits = null\n) {\n  var cf = [] // continued fraction\n\n  cf = get_cf(intervalIn, 15, roundf)\n  get_convergents(cf, numerators, denominators, roundf, cidxOut)\n\n  var doRatios = !(ratiosOut === null)\n  var doNumLim = !(numlimits === null)\n  var doDenLim = !(denlimits === null)\n  var doRatioLim = !(ratiolimits === null)\n\n  if (doRatios || doNumLim || doDenLim || doRatioLim) {\n    var nlim\n    var dlim\n    var rlim\n\n    for (var i = 0; i < numerators.length; i++) {\n      numerators[i] == 1 ? (nlim = 1) : (nlim = get_prime_limit(numerators[i]))\n      denominators[i] == 1 ? (dlim = 1) : (dlim = get_prime_limit(denominators[i]))\n\n      if (doRatios) ratiosOut.push(numerators[i] + '/' + denominators[i])\n      if (doNumLim) numlimits.push(nlim)\n      if (doDenLim) denlimits.push(dlim)\n      if (doRatioLim) ratiolimits.push(Math.max(nlim, dlim))\n    }\n  }\n}\n\n// rank2 scale algorithm intended for integers, in ET contexts\n// for example, period = 12, gen = 7 : [ 2 2 1 2 2 2 1 ]\nfunction get_rank2_mode(period, generator, size, numdown = 0) {\n  let degrees = []\n  let modeOut = []\n  var interval\n\n  interval = generator * -numdown\n  for (var n = 0; n < size; n++) {\n    while (interval < 0) {\n      interval += period\n    }\n    if (interval >= period) {\n      interval %= period\n    }\n    degrees.push(interval)\n    interval += generator\n  }\n\n  degrees.sort(function (a, b) {\n    return a - b\n  })\n  for (var n = 1; n < degrees.length; n++) {\n    modeOut.push(degrees[n] - degrees[n - 1])\n  }\n\n  modeOut.push(period - degrees[degrees.length - 1])\n\n  return modeOut\n}\n\n// returns an array representing the prime factorization\n// indicies are the 'nth' prime, the value is the powers of each prime\nfunction get_prime_factors(number) {\n  number = Math.floor(number)\n  if (number == 1) {\n    //alert(\"Warning: 1 has no prime factorization.\");\n    return 1\n  }\n  var factorsout = []\n  var n = number\n  var q = number\n  var loop\n\n  for (var i = 0; i < PRIMES.length; i++) {\n    if (PRIMES[i] > n) break\n\n    factorsout.push(0)\n\n    if (PRIMES[i] == n) {\n      factorsout[i]++\n      break\n    }\n\n    loop = true\n\n    while (loop) {\n      q = n / PRIMES[i]\n\n      if (q == Math.floor(q)) {\n        n = q\n        factorsout[i]++\n        continue\n      }\n      loop = false\n    }\n  }\n\n  return factorsout\n}\n\nfunction get_prime_factors_string(number) {\n  var factors = get_prime_factors(number)\n  var str_out = ''\n\n  for (var i = 0; i < factors.length; i++) {\n    if (factors[i] != 0) {\n      str_out += PRIMES[i] + '^' + factors[i]\n\n      if (i < factors.length - 1) str_out += ' * '\n    }\n  }\n  return str_out\n}\n\nfunction isPrime(number) {\n  var sqrtnum = Math.floor(Math.sqrt(number))\n\n  for (var i = 0; i < PRIMES.length; i++) {\n    if (PRIMES[i] >= sqrtnum) break\n\n    if (number % PRIMES[i] == 0) {\n      return false\n    }\n  }\n  return true\n}\n\nfunction prevPrime(number) {\n  if (number < 2) return 2\n  var i = 0\n  while (i < PRIMES.length && PRIMES[i++] <= number);\n  return PRIMES[i - 2]\n}\n\nfunction nextPrime(number) {\n  if (number < 2) return 2\n  var i = 0\n  while (i < PRIMES.length && PRIMES[i++] <= number);\n  return PRIMES[i - 1]\n}\n\nfunction closestPrime(number) {\n  var thisPrime = isPrime(number)\n\n  if (number < 2) return 2\n  else if (thisPrime) return number\n\n  var np = nextPrime(number)\n  var pp = prevPrime(number)\n\n  if (Math.abs(np - number) < Math.abs(pp - number)) return np\n  else return pp\n}\n\nfunction scrollToPrime(number, scrollDown) {\n  if (scrollDown) return prevPrime(number)\n  else return nextPrime(number)\n}\n\nfunction get_prime_limit(number) {\n  var factors = get_prime_factors(number)\n  return PRIMES[factors.length - 1]\n}\n\nfunction get_prime_limit_of_ratio(numerator, denominator) {\n  return Math.max(get_prime_limit(numerator), get_prime_limit(denominator))\n}\n\n// returns an array of integers that share no common factors to the given integer\nfunction get_coprimes(number) {\n  let coprimes = [1]\n  var m, d, t\n  for (var i = 2; i < number - 1; i++) {\n    m = number\n    d = i\n    while (d > 1) {\n      m = m % d\n      t = d\n      d = m\n      m = t\n    }\n    if (d > 0) {\n      coprimes.push(i)\n    }\n  }\n  coprimes.push(number - 1)\n  return coprimes\n}\n\n// returns an array of integers that can divide evenly into given number\nfunction get_factors(number) {\n  let factors = []\n  var nsqrt = Math.floor(Math.sqrt(number))\n\n  for (var n = 2; n <= nsqrt; n++) {\n    var q = number / n\n    if (Math.floor(q) == q) {\n      factors.push(n)\n      if (n != q) factors.push(q)\n    }\n  }\n\n  return factors.sort(function (a, b) {\n    return a - b\n  })\n}\n\nfunction getGCD(num1, num2) {\n  const floats = [num1, num2].map(parseFloat);\n  for (const float of floats) if (!Number.isInteger(float) || Number.isNaN(float)) return NaN;\n\n  const n1 = Decimal.abs(num1);\n  const n2 = Decimal.abs(num2);\n\n  if (n1.eq(0) || n2.eq(0)) \n    return n1.add(n2).valueOf();\n  \n  if (n1.eq(1) || n2.eq(1)) \n    return \"1\";\n\n  if (n1.eq(n2)) \n    return n1.valueOf();\n\n  return getGCD(n2.valueOf(), n1.mod(n2).valueOf());\n}\n\n// TODO: GCD of an array\n\nfunction getLCM(num1, num2) {\n  if (num1 === 0 || num2 === 0) return 0\n\n  const gcd = getGCD(num1, num2)\n  return Math.trunc((Math.max(num1, num2) / gcd) * Math.min(num1, num2))\n}\n\nfunction getLCMArray(array) {\n  let primecounts = []\n  let primefactors = []\n  var f\n  array.forEach(function (item, index, array) {\n    f = get_prime_factors(item)\n    primefactors.push(f)\n  })\n\n  var maxlength = 0\n  primefactors.forEach(function (item, index, array) {\n    if (item.length > maxlength) maxlength = item.length\n  })\n\n  // find the min power of each primes in numbers' factorization\n  for (var p = 0; p < maxlength; p++) {\n    primecounts.push(0)\n    for (var n = 0; n < primefactors.length; n++) {\n      f = primefactors[n]\n      if (p < f.length) {\n        if (primecounts[p] < f[p]) primecounts[p] = f[p]\n      }\n    }\n  }\n\n  let lcm = 1\n  primecounts.forEach(function (item, index) {\n    lcm *= Math.pow(PRIMES[index], item)\n  })\n\n  return lcm\n}\n\n// returns false if a ratio divides by 0 or contains NaN\nfunction ratioIsValid(ratio) {\n  if (typeof ratio !== 'string') \n    return false;\n  // allow negatives\n  if (isNegativeInterval(ratio))\n    ratio = Array.from(ratio).filter(char => char !== '-').join('');\n  if (getLineType(ratio) !== LINE_TYPE.RATIO)\n    return false;\n  const [num, den] = ratio.split('/').map(parseFloat);\n  if (Number.isNaN(num) || Number.isNaN(den) || den === 0)\n    return false;\n  return true;\n}\n\n// returns false is a ratio contains an integer with more than 20 digits\nfunction ratioIsSafe(ratio) {\n  const [num, den] = ratio.split('/').map(Decimal);\n  if (num.e > 20 || den.e > 20)\n    return false;\n  return true;\n}\n\n// returns a reduced form of given ratio\n// returns NaN if the ratio is invalid or unsafe\nfunction simplifyRatio(ratio) {  \n  if (!ratioIsValid(ratio) || !ratioIsSafe(ratio))\n    return NaN;\n  \n  const [numerator, denominator] = ratio.split('/');\n  const gcd = getGCD(numerator, denominator);\n  if (gcd == 0 || Number.isNaN(parseFloat(gcd)))\n    return NaN;\n\n  const gcdScalar = Decimal(1).div(gcd);\n\n  let numSigned = Decimal(numerator).mul(Decimal.sign(denominator));\n  let denAbs = Decimal.abs(denominator);\n\n  const [numOut, denOut] = [numSigned, denAbs].map(x => x.mul(gcdScalar).round());\n  return `${numOut}/${denOut}`;\n}\n\nfunction transposeRatios(ratio, transposerRatio) {\n  if (!ratioIsValid(ratio) || !ratioIsValid(transposerRatio))\n    return NaN;\n\n  let bailToCents = () => `${roundToNDecimals(6, ratio_to_cents(ratio) + ratio_to_cents(transposerRatio))}`;\n  \n  if (!ratioIsSafe(ratio) || !ratioIsSafe(transposerRatio))\n    return bailToCents();\n\n  const [n1, d1] = ratio.split('/').map(Decimal);\n  const [n2, d2] = transposerRatio.split('/').map(Decimal);\n\n  // TODO simplification in place\n  const numProduct = n1.mul(n2).valueOf();\n  const denProduct = d1.mul(d2).valueOf();\n  \n  const product = `${numProduct}/${denProduct}`;\n  if (!ratioIsSafe(product))\n    return bailToCents();\n    \n  return simplifyRatio(product);\n}\n\nfunction powRatio(ratio, power) {\n  if (!ratioIsValid(ratio) || Number.isNaN(parseFloat(power)))\n    return NaN;\n    \n  power = Decimal(power);\n  const bailToCents = () => `${roundToNDecimals(6, power.mul(line_to_cents(ratio)).valueOf())}`;\n\n  if (!ratioIsSafe(ratio) || !ratioIsSafe(`${power}/1`))\n    return bailToCents();\n\n  const simplified = simplifyRatio(ratio);\n  if (Number.isNaN(simplified))\n    return NaN;\n  if (!ratioIsSafe(simplified))\n    return bailToCents();\n\n  let ratioStrings = simplified.split('/');\n  if (Decimal.sign(power) < 0)\n    ratioStrings = ratioStrings.reverse();\n\n  const result = ratioStrings.map(x => Decimal.pow(x, power.abs())).join('/');\n  if (!ratioIsSafe(result))\n    return bailToCents();\n\n  return result;\n}\n\n// Return a ratio between 1 and the period, where the period cannot be less than 1\nfunction periodReduceRatio(ratio, period) {\n  if (!ratioIsValid(ratio) || !ratioIsValid(period))\n    return NaN;\n\n  const [ratioNum, ratioDen] = ratio.split('/').map(Decimal);\n  const ratioDecimal = Decimal(ratioNum).div(ratioDen);\n  \n  const [periodNum, periodDen] = period.split('/').map(Decimal);\n  const periodDecimal = Decimal(periodNum).div(periodDen);\n\n  if (periodDecimal.lt(1))\n    return NaN;\n\n  // See if period is a perfect root of ratio\n  const root = ratioDecimal.ln().div(periodDecimal.ln());\n  if (root.isInteger())\n    {\n    const reducedNum = ratioNum.div(periodNum.pow(root)).round();\n    const reducedDen = ratioDen.div(periodDen.pow(root)).round();\n    return `${reducedNum}/${reducedDen}`;\n    }\n\n  const bailToCents = () => `${roundToNDecimals(6, mathModulo(line_to_cents(ratio), line_to_cents(period)))}`;\n\n  if (!ratioIsSafe(ratio) || !ratioIsSafe(period))\n    return bailToCents();\n\n\n  const power = ratioDecimal.ln().div(periodDecimal.ln()).floor();\n\n  // Make scalars from both numerator and denominator of the period ratio to keep integers\n  // The reciprocal of the period ratio is used, and if the 'power' is negative, the scalars are also reciprocated\n  const periodNumPower = Decimal.pow(periodDen, power.abs());\n  const periodDenPower = Decimal.pow(periodNum, power.abs());\n  const periodNumScalar = (Decimal.sign(power) > 0) ? [ periodNumPower, 1 ] : [ 1, periodNumPower ];\n  const periodDenScalar = (Decimal.sign(power) > 0) ? [ periodDenPower, 1 ] : [ 1, periodDenPower ];\n\n  // Cross multiply with period's numerator & denominator scalars\n  const ratioReducedNum = Decimal(ratioNum).mul(periodNumScalar[0]).mul(periodDenScalar[1]);\n  const ratioReducedDen = Decimal(ratioDen).mul(periodNumScalar[1]).mul(periodDenScalar[0]);\n\n  // TODO simplify in place\n\n  const result = `${ratioReducedNum}/${ratioReducedDen}`;\n  if (!ratioIsSafe(result))\n    return bailToCents();\n\n  return simplifyRatio(result);\n}\n\nfunction transposeNOfEdos(nOfEdo, transposerNOfEdo) {\n  if (typeof nOfEdo !== 'string' || typeof transposerNOfEdo !== 'string') return NaN\n\n  const [deg1, edo1] = nOfEdo.split('\\\\').map((x) => parseInt(x))\n  const [deg2, edo2] = transposerNOfEdo.split('\\\\').map((x) => parseInt(x))\n\n  if (!edo1 || !edo2 || isNaN(deg1) || isNaN(deg2)) return NaN\n\n  const newEdo = getLCM(edo1, edo2)\n  const newDegree = (newEdo / edo1) * deg1 + (newEdo / edo2) * deg2\n  return [newDegree, newEdo].join('\\\\')\n}\n\n// transpose an interval by another interval,\n// retaining their types when possible\nfunction transposeLine(line, transposer) {\n  const lineType = getLineType(line);\n  const transposerType = getLineType(transposer);\n  if (lineType === LINE_TYPE.INVALID || transposerType === LINE_TYPE.INVALID)\n    return NaN;\n\n  // If both are ratios, preserve ratio notation\n  if (lineType === LINE_TYPE.RATIO) {\n    if (transposerType === LINE_TYPE.RATIO) return transposeRatios(line, transposer)\n    else if (transposerType === LINE_TYPE.DECIMAL) {\n      let ratio2 = decimal_to_ratio(transposer);\n      return transposeRatios(line, ratio2);\n    }\n\n    // see if cents or N of EDO is an octave\n    else {\n      let octs = Decimal.log2(line_to_decimal(transposer));\n      if (octs.isInteger()) { // TODO - work with other harmonics?\n        const octRatio = Decimal.pow(2, octs.abs());\n        const octTransposer = (octs.lt(0)) ? \"1/\" + octRatio\n                                           : octRatio + \"/1\";\n        return transposeRatios(line, octTransposer);\n      }\n    }\n  } else if (lineType === LINE_TYPE.N_OF_EDO) {\n    // If both are N of EDOs, preserve N of EDO notation\n    if (transposerType === LINE_TYPE.N_OF_EDO) return transposeNOfEdos(line, transposer)\n\n    // See if second type is a power of two\n    const line2Ratio = roundToNDecimals(6, line_to_decimal(transposer));\n    let octs = Decimal.log2(line2Ratio);\n    if (octs.isInteger())\n      return transposeNOfEdos(line, `${octs}\\\\1`);\n\n    // Return result as commadecimal type\n    if (transposerType === LINE_TYPE.DECIMAL)\n      return decimal_to_commadecimal(n_of_edo_to_decimal(line) * line2Ratio)\n  }\n\n  // If the first line is a decimal type, keep decimals\n  else if (lineType === LINE_TYPE.DECIMAL) {\n    const lineDecimal = line_to_decimal(line);\n    let transposerDecimal = line_to_decimal(transposer);\n    return decimal_to_commadecimal(lineDecimal * transposerDecimal);\n  }\n\n  // All other cases convert to cents, allow negative values\n  let lineCents = line_to_cents(line);\n  let transposerCents = line_to_cents(transposer);\n\n  const valueOut = lineCents + transposerCents\n  return roundToNDecimals(6, valueOut).toFixed(6)\n}\n\n// stacks an interval on itself, like a power function.\n// if transposeAmt=0, this returns unison.\n// if transposeAmt=1, this returns the line unchanged.\nfunction transposeSelf(line, transposeAmt) {\n  const lineType = getLineType(line);\n  const lineIsNegative = isNegativeInterval(line);\n  if (lineIsNegative === LINE_TYPE.INVALID || lineType === LINE_TYPE.INVALID || typeof transposeAmt !== \"number\")\n    return NaN;\n\n  const wholeExp = Number.isInteger(transposeAmt);\n\n  // power function\n  if (lineType === LINE_TYPE.DECIMAL)\n    return decimal_to_commadecimal(Math.pow(line_to_decimal(line), transposeAmt))\n  else if (wholeExp && lineType === LINE_TYPE.RATIO) {\n    return powRatio(line, transposeAmt);\n  }\n\n  // multiply degree by transpose amount\n  else if (wholeExp && lineType === LINE_TYPE.N_OF_EDO) {\n    let [deg, edo] = line.split(\"\\\\\");\n    deg *= transposeAmt;\n    return `${deg}\\\\${edo}`;\n  }\n    \n  let value = transposeAmt * line_to_cents(line);\n  return value.toFixed(6);\n}\n\nfunction moduloLine(line, modLine) {\n  const modType = getLineType(modLine);\n  const modIsNegative = isNegativeInterval(modLine);\n  if (modType === LINE_TYPE.INVALID || modIsNegative)\n    return NaN;\n\n  const lineIsNegative = isNegativeInterval(line);\n  const lineType = getLineType(line);\n  if (lineIsNegative === LINE_TYPE.INVALID || lineType === LINE_TYPE.INVALID)\n    return NaN;\n\n  if (lineType !== LINE_TYPE.CENTS) {\n    // Preserve N of EDO notation\n    if (lineType === LINE_TYPE.N_OF_EDO) {\n      let [numDeg, numEdo] = line.split(\"\\\\\").map((x) => parseInt(x));\n\n      // If both are N of EDOs, get LCM edo\n      if (modType === LINE_TYPE.N_OF_EDO) {\n        const [modDeg, modEdo] = modLine.split('\\\\').map((x) => parseInt(x))\n        const lcmEdo = getLCM(numEdo, modEdo)\n        return `${((numDeg * lcmEdo) / numEdo) % ((modDeg * lcmEdo) / modEdo)}\\\\${lcmEdo}`\n      }\n\n      // See if mod is a power of 2\n      const modDecimal = line_to_decimal(modLine)\n      const modLog2 = Decimal.log2(modDecimal)\n      if (modLog2.isInteger()) {\n        return `${mathModulo(numDeg, numEdo)}\\\\${numEdo}`\n      }\n    }\n\n    // Preserve ratio type if possible\n    if (lineType === LINE_TYPE.RATIO) {\n      if (modType === LINE_TYPE.RATIO) {\n        const modDecimal = line_to_decimal(modLine);\n        if (modDecimal < 1) return NaN;\n        return periodReduceRatio(line, modLine)\n      }\n\n      // See if mod type is a reasonable whole number ratio\n      const modDecimal = line_to_decimal(modLine);\n      if (modDecimal < 1) return NaN;\n\n      const mod_cf = get_cf(modDecimal);\n      if (mod_cf.length < 12) {\n        const modRatio = get_convergent(mod_cf);  \n        return periodReduceRatio(line, modRatio);\n      }\n    }\n\n    // Preserve decimal type\n    else if (lineType === LINE_TYPE.DECIMAL || modType === LINE_TYPE.DECIMAL) {\n      return decimal_to_commadecimal([line, modLine].map(line_to_decimal).reduce(logModulo))\n    }\n  }\n\n  // All other cases convert to cents\n  const [lineCents, modCents] = [line, modLine].map(x => roundToNDecimals(12, line_to_cents(x)));\n  const centsMod = mathModulo(lineCents, modCents);\n  return roundToNDecimals(6, centsMod).toFixed(6);\n}\n\n// inverts a line into its negative form, while preserving line-type\nfunction negateLine(line) {\n  switch (getLineType(line)) {\n    case LINE_TYPE.RATIO:\n      let [num, den] = line.split('/')\n      return den + '/' + num\n    case LINE_TYPE.DECIMAL:\n      return decimal_to_commadecimal(1 / commadecimal_to_decimal(line))\n    case LINE_TYPE.CENTS:\n      if (!isNegativeInterval(line)) {\n        return '-' + line\n      } else {\n        return line.replace('-', '')\n      }\n    case LINE_TYPE.N_OF_EDO:\n      if (!isNegativeInterval(line)) {\n        return '-' + line\n      } else {\n        return line.replace('-', '')\n      }\n    default:\n      return NaN\n  }\n}\n\nfunction invert_chord(chord) {\n  if (!/^(\\d+:)+\\d+$/.test(chord)) {\n    alert('Warning: invalid chord ' + chord)\n    return false\n  }\n\n  let reduced = chord.split(':').map((x) => parseInt(x))\n  let interavls = []\n  reduced.forEach(function (item, index, array) {\n    if (index > 0) {\n      interavls.push([item, array[index - 1]])\n    }\n  })\n  interavls.reverse()\n  reduced = [[1, 1]]\n\n  let denominators = []\n  interavls.forEach((x, index) => {\n    const num = Decimal(x[0]).mul(reduced[index][0]);\n    const den = Decimal(x[1]).mul(reduced[index][1]);\n    const ratio = `${num}/${den}`\n    const simplified = simplifyRatio(ratio);\n    if (Number.isNaN(simplified))\n      return;\n    const [n, d] = simplified.split('/').map(x => Decimal(x).valueOf());\n    reduced.push([n, d]);\n    denominators.push(parseInt(d.valueOf()));\n  })\n\n  var lcm = getLCMArray(denominators);\n\n  chord = []\n  reduced.forEach(function (x) {\n    chord.push(Decimal(x[0]).mul(lcm).div(x[1]).valueOf());\n  })\n\n  return chord.join(':');\n}\n\nconst roundToNDecimals = (decimals, number) => {\n  return Math.round(number * 10 ** decimals) / 10 ** decimals\n}\n\nconst findIndexClosestTo = (value, array) => {\n  return array.map((x) => Math.abs(value - x)).reduce((ci, d, i, a) => (d < a[ci] ? i : ci), 0)\n}\n\nfunction getFloat(id, errorMessage) {\n  var value = parseFloat(jQuery(id).val())\n\n  if (isNaN(value) || value === 0) {\n    alert(errorMessage)\n    return false\n  }\n\n  return value\n}\n\nfunction getString(id, errorMessage) {\n  var value = jQuery(id).val()\n\n  if (R.isEmpty(value) || R.isNil(value)) {\n    alert(errorMessage)\n    return false\n  }\n\n  return value\n}\n\nfunction getLine(id, errorMessage) {\n  var value = jQuery(id).val()\n\n  if (\n    R.isEmpty(value) ||\n    parseFloat(value) <= 0 ||\n    R.isNil(value) ||\n    getLineType(value) === LINE_TYPE.INVALID\n  ) {\n    alert(errorMessage)\n    return false\n  }\n\n  return value\n}\n\nfunction setScaleName(title) {\n  jQuery('#txt_name').val(title)\n}\n\nfunction closePopup(id) {\n  jQuery(id).dialog('close')\n}\n\nfunction setTuningData(tuning) {\n  jQuery('#txt_tuning_data').val(tuning)\n}\n\nconst isFunction = (x) => typeof x === 'function'\n\nfunction getCoordsFromKey(tdOfKeyboard) {\n  try {\n    return JSON.parse(tdOfKeyboard.getAttribute('data-coord'))\n  } catch (e) {\n    return []\n  }\n}\n\nfunction getSearchParamOr(valueIfMissing, key, url) {\n  return url.searchParams.has(key) ? url.searchParams.get(key) : valueIfMissing\n}\n\nfunction getSearchParamAsNumberOr(valueIfMissingOrNan, key, url) {\n  return url.searchParams.has(key) && !isNaN(url.searchParams.get(key))\n    ? parseFloat(url.searchParams.get(key))\n    : valueIfMissingOrNan\n}\n\nfunction trimSelf(el) {\n  jQuery(el).val(function (idx, val) {\n    return val.trim()\n  })\n}\n\nfunction openDialog(el, onOK) {\n  jQuery(el).dialog({\n    modal: true,\n    buttons: {\n      OK: onOK,\n      Cancel: function () {\n        jQuery(this).dialog('close')\n      }\n    }\n  })\n}\n\n// redirect all traffic to https, if not there already\n// source: https://stackoverflow.com/a/4723302/1806628\nfunction redirectToHTTPS() {\n  if (location.protocol !== 'https:') {\n    location.href = 'https:' + window.location.href.substring(window.location.protocol.length)\n  }\n}\n\n// converts a cents array into a uint8 array for the mnlgtun exporter\nfunction centsTableToMnlgBinary(centsTableIn) {\n  const dataSize = centsTableIn.length * 3\n  const data = new Uint8Array(dataSize)\n  let dataIndex = 0\n  centsTableIn.forEach((c) => {\n    // restrict to valid values\n    let cents = c\n    if (cents < 0) cents = 0\n    else if (cents >= MNLG_MAXCENTS) cents = MNLG_MAXCENTS\n\n    const semitones = cents / 100.0\n    const microtones = Math.trunc(semitones)\n\n    const u16a = new Uint16Array([Math.round(0x8000 * (semitones - microtones))])\n    const u8a = new Uint8Array(u16a.buffer)\n\n    data[dataIndex] = microtones\n    data[dataIndex + 1] = u8a[1]\n    data[dataIndex + 2] = u8a[0]\n    dataIndex += 3\n  })\n  return data\n}\n\n// converts a mnlgtun binary string into an array of cents\nfunction mnlgBinaryToCents(binaryData) {\n  const centsOut = []\n  const tuningSize = binaryData.length / 3\n  for (let i = 0; i < tuningSize; i++) {\n    const str = binaryData.slice(i * 3, i * 3 + 3)\n    const hundreds = str.charCodeAt(0) * 100\n    let tens = new Uint8Array([str.charCodeAt(2), str.charCodeAt(1)])\n    tens = Math.round((parseInt(new Uint16Array(tens.buffer)) / 0x8000) * 100)\n    centsOut.push(hundreds + tens)\n  }\n  return centsOut\n}\n\n// cps_combinations()\n// adapted from https://www.geeksforgeeks.org/print-all-possible-combinations-of-r-elements-in-a-given-array-of-size-n/\nfunction cps_combinations(factors, data, start, end, index, cc, products) {\n  // Current combination is ready to be printed, print it\n  if (index == cc) {\n    var combination = []\n    for (let j = 0; j < cc; j++) {\n      combination.push(data[j])\n    }\n    products.push(\n      combination.reduce(function (accumulator, currentValue) {\n        return accumulator * currentValue\n      })\n    )\n  }\n  // replace index with all possible elements. The condition \"end-i+1 >= cc-index\" makes sure that including one element at index will make a combination with remaining elements at remaining positions\n  for (let i = start; i <= end && end - i + 1 >= cc - index; i++) {\n    data[index] = factors[i]\n    cps_combinations(factors, data, i + 1, end, index + 1, cc, products)\n  }\n}\n// Combination Product Set function\n// returns all combination products of size cc from factors array\nfunction cps(factors, cc) {\n  let products = []\n  // store all combinations one by one\n  let data = new Array(cc)\n  // Print all combination using temporary array 'data[]'\n  cps_combinations(factors, data, 0, factors.length - 1, 0, cc, products)\n  return products\n}\n\n// scaleSort()\n// takes an array of lines and returns it in ascending order\nfunction scaleSort(scale = []) {\n  return scale.sort(function (a, b) {\n    return line_to_decimal(a) - line_to_decimal(b)\n  })\n}\n\nconst isSimpleKeypress = (event) => {\n  return !(event.ctrlKey || event.shiftKey || event.altKey || event.metaKey || event.repeat)\n}\n"
  },
  {
    "path": "src/js/keymap.js",
    "content": "/**\n * keymap.js\n * International keyboard layouts\n */\n\n// prettier-ignore\nvar Layouts = {\n  // English QWERTY Layout\n  //\n  // <\\> is placed to the right of <'> because on ISO (EU) variants it's there.\n  // The ANSI (US) variant places it to the right of <]>, but it's a less useful\n  // position so it can be ignored.\n  EN: [\n    \"1234567890-=\",\n    \"QWERTYUIOP[]\",\n    \"ASDFGHJKL;'\\\\\",\n    \"ZXCVBNM,./\",\n  ],\n\n  // Hungarian QWERTZ layout\n  HU: [\n    \"123456789ñ/=\",\n    \"QWERTZUIOP[]\",\n    \"ASDFGHJKL;'\\\\\",\n    \"YXCVBNM,.-\",\n  ],\n\n  // Dvorak keyboard\n  DK: [\n    \"1234567890-=\",\n    \"',.PYFGCRL/@\",\n    \"AOEUIDHTNS-\\\\\",\n    \";QJKXBMWVZ\",\n  ],\n\n  // Programmer Dvorak keyboard\n  PK: [\n    \"&7531902468#\",\n    \";,.PYFGCRL/@\",\n    \"AOEUIDHTNS-\\\\\",\n    \"'QJKXBMWVZ\",\n  ],\n\n  // Colemak keyboard\n  CO: [\n    \"1234567890-=\",\n    \"QWFPGJLUY;[]\",\n    \"ARSTDHNEIO'\\\\\",\n    \"ZXCVBKM,./\"\n  ],\n  \n  // Colemak DH-m keyboard\n  CO_DH: [\n    \"1234567890-=\",\n    \"QWFPBJLUY;[]\\\\\",\n    \"ARSTGMNEIO'\",\n    \"ZXCDVKH,./\"\n  ]\n};\n\n// Map of irregular keycodes\n//\n// This website can be used to display the 'which' value for a given key:\n//\n//    https://keycode.info\n//\n// prettier-ignore\nvar Keycodes = {\n  \";\": 186,\n  \"=\": 187,\n  \",\": 188,\n  \"-\": 189,\n  \".\": 190,\n  \"/\": 191,\n  \"ñ\": 192,\n  \"[\": 219,\n  \"\\\\\": 220,\n  \"]\": 221,\n  \"'\": 222,\n  \"&\": 166,\n  \"#\": 163,\n}\n\n// Build Keymap from Layouts\nvar Keymap = {}\nfor (var id in Layouts) {\n  Keymap[id] = buildKeymapFromLayout(Layouts[id])\n}\n\nfunction buildKeymapFromLayout(rows) {\n  var map = {}\n  for (var r = rows.length - 1; r >= 0; r--) {\n    var row = rows[r]\n    var rowId = rows.length - r - 2\n    for (var c = 0; c < row.length; c++) {\n      var keycode = Keycodes[row.charAt(c)] || row.charCodeAt(c)\n      map[keycode] = [rowId, c]\n    }\n  }\n  return map\n}\n"
  },
  {
    "path": "src/js/midi/commands.js",
    "content": "const setPitchBendLimit = (channel, semitones) => {\n  return [\n    (commands.cc << 4) | (channel - 1),\n    cc.registeredParameterLSB,\n    0,\n    (commands.cc << 4) | (channel - 1),\n    cc.registeredParameterMSB,\n    0,\n    (commands.cc << 4) | (channel - 1),\n    cc.dataEntry,\n    semitones,\n    (commands.cc << 4) | (channel - 1),\n    cc.registeredParameterLSB,\n    127,\n    (commands.cc << 4) | (channel - 1),\n    cc.registeredParameterMSB,\n    127\n  ]\n}\n\nconst pitchBendAmountToDataBytes = (pitchBendAmount) => {\n  const realValue = pitchBendAmount - pitchBendMin\n  return [realValue & 0b01111111, (realValue >> 7) & 0b01111111]\n}\n\nconst bendPitch = (channel, pitchBendAmount) => {\n  return [\n    ...[(commands.pitchbend << 4) | (channel - 1)],\n    ...pitchBendAmountToDataBytes(pitchBendAmount)\n  ]\n}\n\nconst noteOn = (channel, note, pitchBendAmount = null, velocity = 127) => {\n  return [\n    ...(pitchBendAmount !== null ? bendPitch(channel, pitchBendAmount) : []),\n    ...[(commands.noteOn << 4) | (channel - 1), note, velocity]\n  ]\n}\n\nconst noteOff = (channel, note, velocity = 127) => {\n  return [(commands.noteOff << 4) | (channel - 1), note, velocity]\n}\n"
  },
  {
    "path": "src/js/midi/constants.js",
    "content": "const whiteOnlyMap = {\r\n  0: 25,\r\n  2: 26,\r\n  4: 27,\r\n  5: 28,\r\n  7: 29,\r\n  9: 30,\r\n  11: 31,\r\n  12: 32,\r\n  14: 33,\r\n  16: 34,\r\n  17: 35,\r\n  19: 36,\r\n  21: 37,\r\n  23: 38,\r\n  24: 39,\r\n  26: 40,\r\n  28: 41,\r\n  29: 42,\r\n  31: 43,\r\n  33: 44,\r\n  35: 45,\r\n  36: 46,\r\n  38: 47,\r\n  40: 48,\r\n  41: 49,\r\n  43: 50,\r\n  45: 51,\r\n  47: 52,\r\n  48: 53,\r\n  50: 54,\r\n  52: 55,\r\n  53: 56,\r\n  55: 57,\r\n  57: 58,\r\n  59: 59,\r\n  60: 60,\r\n  62: 61,\r\n  64: 62,\r\n  65: 63,\r\n  67: 64,\r\n  69: 65,\r\n  71: 66,\r\n  72: 67,\r\n  74: 68,\r\n  76: 69,\r\n  77: 70,\r\n  79: 71,\r\n  81: 72,\r\n  83: 73,\r\n  84: 74,\r\n  86: 75,\r\n  88: 76,\r\n  89: 77,\r\n  91: 78,\r\n  93: 79,\r\n  95: 80,\r\n  96: 81,\r\n  98: 82,\r\n  100: 83,\r\n  101: 84,\r\n  103: 85,\r\n  105: 86,\r\n  107: 87,\r\n  108: 88,\r\n  110: 89,\r\n  112: 90,\r\n  113: 91,\r\n  115: 92,\r\n  117: 93,\r\n  119: 94,\r\n  120: 95,\r\n  122: 96,\r\n  124: 97,\r\n  125: 98,\r\n  127: 99\r\n}\r\n\r\n// https://www.midi.org/specifications/item/table-1-summary-of-midi-message\r\nconst commands = {\r\n  noteOn: 0b1001,\r\n  noteOff: 0b1000,\r\n  aftertouch: 0b1010,\r\n  pitchbend: 0b1110,\r\n  cc: 0b1011\r\n}\r\n\r\n// https://www.midi.org/specifications/item/table-3-control-change-messages-data-bytes-2\r\n// http://www.nortonmusic.com/midi_cc.html\r\nconst cc = {\r\n  dataEntry: 6,\r\n  sustain: 64,\r\n  registeredParameterLSB: 100,\r\n  registeredParameterMSB: 101\r\n}\r\n\r\n/// 440Hz A4\r\nconst referenceNote = {\r\n  frequency: 440,\r\n  id: 69\r\n}\r\n\r\nconst pitchBendMin = 1 - (1 << 14) / 2 // -8191\r\nconst pitchBendMax = (1 << 14) / 2 // 8192\r\n\r\n// settings for MIDI OUT ports\r\nconst defaultInputData = {\r\n  enabled: true,\r\n  channels: [\r\n    { id: 1, enabled: true, pitchBendAmount: 0 },\r\n    { id: 2, enabled: true, pitchBendAmount: 0 },\r\n    { id: 3, enabled: true, pitchBendAmount: 0 },\r\n    { id: 4, enabled: true, pitchBendAmount: 0 },\r\n    { id: 5, enabled: true, pitchBendAmount: 0 },\r\n    { id: 6, enabled: true, pitchBendAmount: 0 },\r\n    { id: 7, enabled: true, pitchBendAmount: 0 },\r\n    { id: 8, enabled: true, pitchBendAmount: 0 },\r\n    { id: 9, enabled: true, pitchBendAmount: 0 },\r\n    { id: 10, enabled: false, pitchBendAmount: 0 }, // drum channel\r\n    { id: 11, enabled: true, pitchBendAmount: 0 },\r\n    { id: 12, enabled: true, pitchBendAmount: 0 },\r\n    { id: 13, enabled: true, pitchBendAmount: 0 },\r\n    { id: 14, enabled: true, pitchBendAmount: 0 },\r\n    { id: 15, enabled: true, pitchBendAmount: 0 },\r\n    { id: 16, enabled: true, pitchBendAmount: 0 }\r\n  ]\r\n}\r\n\r\n// settings for MIDI IN ports\r\nconst defaultOutputData = {\r\n  enabled: false,\r\n  channels: [\r\n    { id: 1, enabled: true, pitchBendAmount: 0 },\r\n    { id: 2, enabled: false, pitchBendAmount: 0 },\r\n    { id: 3, enabled: false, pitchBendAmount: 0 },\r\n    { id: 4, enabled: false, pitchBendAmount: 0 },\r\n    { id: 5, enabled: false, pitchBendAmount: 0 },\r\n    { id: 6, enabled: false, pitchBendAmount: 0 },\r\n    { id: 7, enabled: false, pitchBendAmount: 0 },\r\n    { id: 8, enabled: false, pitchBendAmount: 0 },\r\n    { id: 9, enabled: false, pitchBendAmount: 0 },\r\n    { id: 10, enabled: false, pitchBendAmount: 0 },\r\n    { id: 11, enabled: false, pitchBendAmount: 0 },\r\n    { id: 12, enabled: false, pitchBendAmount: 0 },\r\n    { id: 13, enabled: false, pitchBendAmount: 0 },\r\n    { id: 14, enabled: false, pitchBendAmount: 0 },\r\n    { id: 15, enabled: false, pitchBendAmount: 0 },\r\n    { id: 16, enabled: false, pitchBendAmount: 0 }\r\n  ]\r\n}\r\n\r\nconst octaveRatio = 2\r\nconst semitonesPerOctave = 12\r\nconst maxBendingDistanceInSemitones = 12\r\nconst centsPerOctave = 1200\r\n\r\nconst middleC = 60\r\nconst drumChannel = 10 // when counting from 1\r\n\r\nconst allMidiKeys = [...Array(128).keys()] // [0, 1, 2, ..., 127]\r\n\r\nconst whiteMidiKeys = Object.keys(whiteOnlyMap).map((id) => parseInt(id))\r\n\r\nconst blackMidiKeys = R.difference(allMidiKeys, whiteMidiKeys)\r\n"
  },
  {
    "path": "src/js/midi/math.js",
    "content": "const moveNUnits = (ratioOfSymmetry, divisionsPerRatio, n, frequency) => {\n  // return frequency * ratioOfSymmetry ** (n / divisionsPerRatio)\n  return Decimal.mul(frequency, Decimal.pow(ratioOfSymmetry, Decimal.div(n, divisionsPerRatio)))\n}\n\nconst getDistanceInUnits = (ratioOfSymmetry, divisionsPerRatio, freq2, freq1) => {\n  // return divisionsPerRatio * Math.log(freq2 / freq1, ratioOfSymmetry)\n  return Decimal.mul(divisionsPerRatio, Decimal.log(Decimal.div(freq2, freq1), ratioOfSymmetry))\n}\n\nconst moveNSemitones = (n, frequency) => {\n  return moveNUnits(octaveRatio, semitonesPerOctave, n, frequency)\n}\n\nconst getDistanceInSemitones = (freq2, freq1) => {\n  return getDistanceInUnits(octaveRatio, semitonesPerOctave, freq2, freq1)\n}\n\nconst bendingRatio = moveNSemitones(maxBendingDistanceInSemitones, 1)\n\nconst getBendingDistance = (freq2, freq1) => {\n  return getDistanceInUnits(bendingRatio, pitchBendMax, freq2, freq1)\n}\n\nconst getNoteFrequency = (midinote) => {\n  return moveNSemitones(\n    Decimal.sub(R.clamp(0, 127, midinote), referenceNote.id),\n    referenceNote.frequency\n  )\n}\n\nconst getNoteId = (frequency) => {\n  return Decimal.floor(\n    Decimal.add(getDistanceInSemitones(frequency, referenceNote.frequency), referenceNote.id)\n  )\n}\n"
  },
  {
    "path": "src/js/midi/midi.js",
    "content": "/**\n * midi.js\n * Capture MIDI input for synth\n */\n\nconst deviceChannelInfo = {}\n\nconst getNameFromPort = (port) => {\n  const { name, version, manufacturer } = port\n  return `${name} (version ${version}) ${manufacturer}`\n}\n\nclass MIDI extends EventEmitter {\n  constructor() {\n    super()\n\n    this._ = {\n      inited: false,\n      supported: false,\n      devices: {\n        inputs: {},\n        outputs: {}\n      },\n      whiteOnly: false\n    }\n  }\n\n  set whiteOnly(value) {\n    this._.whiteOnly = value\n\n    allMidiKeys.forEach((note) => {\n      for (let channel = 1; channel <= 16; channel++) {\n        this.emit('note off', note, 1, channel)\n      }\n    })\n  }\n\n  async init() {\n    if (!this._.inited) {\n      this._.inited = true\n\n      const enableMidiSupport = (midiAccess) => {\n        this._.supported = true\n\n        midiAccess.onstatechange = (event) => {\n          initPort(event.port)\n        }\n\n        const inputs = midiAccess.inputs.values()\n        for (let input = inputs.next(); input && !input.done; input = inputs.next()) {\n          initPort(input.value)\n        }\n\n        const outputs = midiAccess.outputs.values()\n        for (let output = outputs.next(); output && !output.done; output = outputs.next()) {\n          initPort(output.value)\n        }\n      }\n\n      const initPort = (port) => {\n        const { devices } = this._\n\n        if (port.type === 'input') {\n          if (!devices.inputs[port.id]) {\n            devices.inputs[port.id] = {\n              port,\n              name: getNameFromPort(port),\n              ...R.clone(defaultInputData)\n            }\n          }\n\n          devices.inputs[port.id].connected = false\n          if (port.state === 'connected') {\n            if (port.connection === 'closed') {\n              port.open()\n            } else if (port.connection === 'open') {\n              port.onmidimessage = onMidiMessage(devices.inputs[port.id])\n              devices.inputs[port.id].connected = true\n            }\n          }\n        } else if (port.type === 'output') {\n          if (!devices.outputs[port.id]) {\n            devices.outputs[port.id] = {\n              port,\n              name: getNameFromPort(port),\n              ...R.clone(defaultOutputData)\n            }\n          }\n\n          if (port.state === 'connected') {\n            if (port.connection === 'closed') {\n              port.open()\n            } else if (port.connection === 'open') {\n              devices.outputs[port.id].connected = true\n            }\n          }\n        }\n\n        this.emit('update')\n      }\n\n      const onMidiMessage = (device) => (event) => {\n        if (device.enabled) {\n          const { whiteOnly } = this._\n          const [data, ...params] = event.data\n          const cmd = data >> 4\n          const channel = data & 0x0f\n\n          if (device.channels[channel]?.enabled === true) {\n            switch (cmd) {\n              case commands.noteOff:\n                {\n                  const [note, velocity] = params\n                  if (whiteOnly) {\n                    if (whiteMidiKeys.includes(note)) {\n                      this.emit('note off', whiteOnlyMap[note], velocity, channel)\n                    }\n                  } else {\n                    this.emit('note off', note, velocity, channel)\n                  }\n                }\n                break\n              case commands.noteOn:\n                {\n                  const [note, velocity] = params\n                  if (whiteOnly) {\n                    if (whiteMidiKeys.includes(note)) {\n                      this.emit(\n                        'note on',\n                        whiteOnlyMap[note],\n                        state.get('midi velocity sensing') ? velocity : 127,\n                        channel\n                      )\n                    }\n                  } else {\n                    this.emit(\n                      'note on',\n                      note,\n                      state.get('midi velocity sensing') ? velocity : 127,\n                      channel\n                    )\n                  }\n                }\n                break\n              case commands.aftertouch:\n                {\n                  const [note, pressure] = params\n                  if (whiteOnly) {\n                    if (whiteMidiKeys.includes(note)) {\n                      this.emit('aftertouch', whiteOnlyMap[note], (pressure / 128) * 100, channel)\n                    }\n                  } else {\n                    this.emit('aftertouch', note, (pressure / 128) * 100, channel)\n                  }\n                }\n                break\n              case commands.pitchbend:\n                {\n                  const [low, high] = params\n                  this.emit('pitchbend', (((high << 7) | low) / 0x3fff - 1) * 100)\n                }\n                break\n              case commands.cc:\n                {\n                  const [cmd, value] = params\n\n                  switch (cmd) {\n                    case cc.sustain:\n                      this.emit('sustain', value >= 64)\n                      break\n                  }\n                }\n                break\n            }\n          }\n        }\n      }\n\n      if (navigator.requestMIDIAccess) {\n        const midiAccess = await navigator.requestMIDIAccess({ sysex: false })\n        enableMidiSupport(midiAccess)\n        this.emit('ready')\n      } else {\n        this.emit('blocked')\n      }\n    }\n  }\n\n  toggleDevice(type, deviceId, newValue = null) {\n    const { devices } = this._\n\n    const device = devices[`${type}s`][deviceId]\n    device.enabled = newValue === null ? !device.enabled : newValue\n\n    if (type === 'output') {\n      if (device.enabled) {\n        device.channels.forEach((channel) => {\n          device.port.send(setPitchBendLimit(channel, maxBendingDistanceInSemitones))\n        })\n      } else {\n        device.channels.forEach((channel) => {\n          device.port.send(bendPitch(channel, 0))\n        })\n      }\n    }\n\n    this.emit('update')\n  }\n\n  setDevice(type, deviceId, newValue) {\n    this.toggleDevice(type, deviceId, newValue)\n  }\n\n  toggleChannel(type, deviceId, channelId, newValue = null) {\n    const { devices } = this._\n\n    const device = devices[`${type}s`][deviceId]\n    const channel = device.channels.find(({ id }) => id === channelId)\n\n    newValue = newValue === null ? !channel.enabled : newValue\n    if (channel.enabled !== newValue) {\n      channel.enabled = newValue\n      this.emit('update')\n    }\n  }\n\n  setChannel(type, deviceId, channelId, newValue) {\n    this.toggleChannel(type, deviceId, channelId, newValue)\n  }\n\n  getEnabledOutputs() {\n    return Object.values(this._.devices.outputs).filter(({ enabled, channels }) => {\n      return enabled === true && channels.find(({ enabled }) => enabled === true) !== undefined\n    })\n  }\n\n  getLowestEnabledChannel(channels) {\n    return channels.find(({ enabled }) => enabled === true)\n  }\n\n  playFrequency(frequency = 0) {\n    const devices = this.getEnabledOutputs()\n\n    if (devices.length) {\n      devices.forEach(({ port, channels }) => {\n        const channel = channels.find(({ enabled }) => enabled === true)\n        if (!deviceChannelInfo[port.id]) {\n          deviceChannelInfo[port.id] = {}\n        }\n        if (!deviceChannelInfo[port.id][channel]) {\n          deviceChannelInfo[port.id][channel] = {\n            pressedNoteIds: []\n          }\n        }\n\n        if (frequency === 0) {\n          if (deviceChannelInfo[port.id][channel].pressedNoteIds.length) {\n            port.send(\n              deviceChannelInfo[port.id][channel].pressedNoteIds.flatMap((noteId) => {\n                return noteOff(channel, noteId)\n              })\n            )\n\n            deviceChannelInfo[port.id][channel].pressedNoteIds = []\n          }\n        } else {\n          const noteId = parseInt(getNoteId(frequency).toString())\n          const pitchbendAmount = parseFloat(\n            getBendingDistance(frequency, getNoteFrequency(noteId)).toString()\n          )\n\n          port.send(noteOn(channel, noteId, pitchbendAmount))\n          deviceChannelInfo[port.id][channel].pressedNoteIds.push(noteId)\n        }\n      })\n    }\n  }\n\n  stopFrequency() {\n    this.playFrequency(0)\n  }\n\n  isSupported() {\n    return this._.supported\n  }\n}\n\n// -------------------------------------------\n\nconst midi = new MIDI()\n\njQuery(() => {\n  const midiEnablerBtn = jQuery('#midi-enabler')\n\n  midi\n    .on('blocked', () => {\n      midiEnablerBtn\n        .prop('disabled', false)\n        .removeClass('btn-success')\n        .addClass('btn-danger')\n        .text('off (blocked)')\n    })\n    .on('note on', (note, velocity, channel) => {\n      synth.noteOn(note, velocity)\n    })\n    .on('note off', (note, velocity, channel) => {\n      synth.noteOff(note)\n    })\n    .on('update', () => {\n      if (state.get('midi modal visible')) {\n        state.set('midi modal visible', true, true)\n      }\n    })\n\n  midiEnablerBtn.on('click', async () => {\n    await midi.init()\n\n    if (midi.isSupported()) {\n      state.set('midi enabled', true)\n    }\n  })\n})\n"
  },
  {
    "path": "src/js/midi/ui.js",
    "content": "const MidiChannel = ({ type, deviceId, channelId, enabled }) => {\n  const template = document.createElement('template')\n  template.innerHTML = `\n    <div class=\"channel\">\n      <input id=\"${type}--${deviceId}--${channelId}\" type=\"checkbox\" ${\n    enabled ? 'checked=\"checked\"' : ''\n  } />\n      <label for=\"${type}--${deviceId}--${channelId}\">${channelId}</label>\n    </div>\n  `\n  const content = template.content\n  content.querySelector('input[type=\"checkbox\"]').addEventListener('change', (e) => {\n    const isEnabled = e.target.checked\n    midi.setChannel(type, deviceId, channelId, isEnabled)\n  })\n  return content\n}\n\nconst MidiDevice = ({ type, deviceId, name, channels, enabled }) => {\n  const template = document.createElement('template')\n  template.innerHTML = `\n    <div class=\"device\">\n      <div class=\"checkbox-wrapper\">\n        <input id=\"${type}--${name}\" type=\"checkbox\" ${enabled ? 'checked=\"checked\"' : ''} />\n      </div>\n      <h4><label for=\"${type}--${name}\">${name}</label></h4>\n      <div class=\"channels\"></div>\n    </div>\n  `\n  const content = template.content\n  channels.forEach(({ id, enabled }) => {\n    content\n      .querySelector('.channels')\n      .appendChild(MidiChannel({ type, deviceId, channelId: id, enabled }))\n  })\n  content.getElementById(`${type}--${name}`).addEventListener('change', (e) => {\n    const isEnabled = e.target.checked\n    midi.setDevice(type, deviceId, isEnabled)\n  })\n  return content\n}\n\nconst renderMidiInputsTo = (container) => {\n  const { inputs } = midi._.devices\n\n  container.innerHTML = ''\n  Object.values(inputs).forEach((input) => {\n    container.appendChild(MidiDevice({ type: 'input', deviceId: input.port.id, ...input }))\n  })\n}\n\nconst renderMidiOutputsTo = (container) => {\n  const { outputs } = midi._.devices\n\n  container.innerHTML = ''\n  Object.values(outputs).forEach((output) => {\n    container.appendChild(MidiDevice({ type: 'output', deviceId: output.port.id, ...output }))\n  })\n}\n\nconst renderMidiSettingsTo = (container) => {\n  const { whiteOnly } = midi._\n  const whiteModeSwitch = container.querySelector('#input_midi_whitemode')\n  whiteModeSwitch.checked = whiteOnly\n  whiteModeSwitch.addEventListener('change', (e) => {\n    midi.whiteOnly = e.target.checked\n  })\n}\n"
  },
  {
    "path": "src/js/modifiers.js",
    "content": "/**\n * TUNING DATA MODIFIERS\n */\n\n// stretch/compress tuning\nfunction modify_stretch() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n    alert('No scale data to modify.')\n    return false\n  }\n\n  var stretch_ratio = parseFloat(jQuery('#input_stretch_ratio').val()) // amount of stretching, ratio\n\n  // split user data into individual lines\n  var lines = document.getElementById('txt_tuning_data').value.split(newlineTest)\n\n  // strip out the unusable lines, assemble a multi-line string which will later replace the existing tuning data\n  let new_tuning_lines = []\n  for (let i = 0; i < lines.length; i++) {\n    switch (getLineType(lines[i])) {\n      case 'invalid':\n        alert('Scale data looks invalid: ' + lines[i])\n        return false\n      case 'cents':\n        new_tuning_lines.push((parseFloat(lines[i]) * stretch_ratio).toFixed(5))\n        break\n      case 'n of edo':\n        new_tuning_lines.push((n_of_edo_to_cents(lines[i]) * stretch_ratio).toFixed(5))\n        break\n      case 'ratio':\n        new_tuning_lines.push((ratio_to_cents(lines[i]) * stretch_ratio).toFixed(5))\n    }\n  }\n\n  // update tuning input field with new tuning\n  jQuery('#txt_tuning_data').val(new_tuning_lines.join(unix_newline))\n\n  parse_tuning_data()\n\n  jQuery('#modal_modify_stretch').dialog('close')\n\n  // success\n  return true\n}\n\n// random variance\nfunction modify_random_variance() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n    alert('No scale data to modify.')\n    return false\n  }\n\n  var cents_max_variance = parseFloat(jQuery('#input_cents_max_variance').val()) // maximum amount of variance in cents\n  var vary_period = document.getElementById('input_checkbox_vary_period').checked\n\n  // split user data into individual lines\n  var lines = document.getElementById('txt_tuning_data').value.split(newlineTest)\n\n  // strip out the unusable lines, assemble a multi-line string which will later replace the existing tuning data\n  let new_tuning_lines = []\n  for (let i = 0; i < lines.length; i++) {\n    // only apply random variance if the line is not the period, or vary_period is true\n    if (vary_period || i < lines.length - 1) {\n      // get a cents offset to add later. ranges from -cents_max_variance to cents_max_variance\n      var random_variance = Math.random() * cents_max_variance * 2 - cents_max_variance\n\n      // line contains a period, so it should be a value in cents\n      if (lines[i].toString().includes('.')) {\n        new_tuning_lines.push((parseFloat(lines[i]) + random_variance).toFixed(5))\n      }\n      // line doesn't contain a period, so it is a ratio\n      else {\n        new_tuning_lines.push((ratio_to_cents(lines[i]) + random_variance).toFixed(5))\n      }\n    }\n    // last line is a period and we're not applying random variance to it\n    else {\n      new_tuning_lines.push(lines[i])\n    }\n  }\n\n  // update tuning input field with new tuning\n  jQuery('#txt_tuning_data').val(new_tuning_lines.join(unix_newline))\n\n  parse_tuning_data()\n\n  jQuery('#modal_modify_random_variance').dialog('close')\n\n  // success\n  return true\n}\n\n// mode\nfunction modify_mode() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n    alert('No scale data to modify.')\n    return false\n  }\n\n  var mode = jQuery('#input_modify_mode').val().split(' ')\n\n  // check user input for invalid items\n  for (let i = 0; i < mode.length; i++) {\n    mode[i] = parseInt(mode[i])\n\n    if (isNaN(mode[i]) || mode[i] < 1) {\n      alert(\n        'Your mode should contain a list of positive integers, seperated by spaces. E.g.' +\n          unix_newline +\n          '5 5 1 3 1 2'\n      )\n      return false\n    }\n  }\n\n  // split user's scale data into individual lines\n  var lines = document.getElementById('txt_tuning_data').value.split(newlineTest)\n  console.log(lines)\n  console.log(mode)\n\n  // mode_type will be either intervals (e.g. 2 2 1 2 2 2 1) or from_base (e.g. 2 4 5 7 9 11 12)\n  var mode_type = jQuery(\"#modal_modify_mode input[type='radio']:checked\").val()\n\n  if (mode_type == 'intervals' || mode_type == 'mos') {\n    // get the total number of notes in the mode\n    var mode_sum = mode.reduce(function (a, b) {\n      return a + b\n    }, 0)\n\n    // number of notes in the mode should equal the number of lines in the scale data field\n    if (mode_sum != lines.length) {\n      alert(\n        \"Your mode doesn't add up to the same size as the current scale.\" +\n          unix_newline +\n          \"E.g. if you have a 5 note scale, mode 2 2 1 is valid because 2+2+1=5. But mode 2 2 2 is invalid because 2+2+2 doesn't equal 5.\"\n      )\n      return false\n    }\n\n    // strip out the unusable lines, assemble a multi-line string which will later replace the existing tuning data\n    var new_tuning = ''\n    var note_count = 1\n    var mode_index = 0\n    for (let i = 0; i < lines.length; i++) {\n      if (mode[mode_index] == note_count) {\n        new_tuning = new_tuning + lines[i]\n\n        // add a newline for all lines except the last\n        if (i < lines.length - 1) {\n          new_tuning += newline\n        }\n\n        mode_index++\n        note_count = 0\n      }\n      note_count++\n    }\n  }\n\n  // if ( mode_type == \"from_base\" ) {\n  else {\n    // number of notes in the mode should equal the number of lines in the scale data field\n    if (mode[mode.length - 1] != lines.length) {\n      alert(\n        \"Your mode isn't the same size as the current scale.\" +\n          unix_newline +\n          'E.g. if you have a 5 note scale, mode 2 4 5 is valid because the final degree is 5. But mode 2 4 6 is invalid because 6 is greater than 5.'\n      )\n      return false\n    }\n\n    // strip out the unusable lines, assemble a multi-line string which will later replace the existing tuning data\n    var new_tuning = ''\n    for (let i = 0; i < mode.length; i++) {\n      new_tuning += lines[mode[i] - 1]\n\n      // add a newline for all lines except the last\n      if (i < mode.length - 1) {\n        new_tuning += unix_newline\n      }\n    }\n  }\n\n  // update tuning input field with new tuning\n  jQuery('#txt_tuning_data').val(new_tuning)\n\n  parse_tuning_data()\n\n  jQuery('#modal_modify_mode').dialog('close')\n\n  // success\n  return true\n}\n\n// sync beating\nfunction modify_sync_beating() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n    alert('No scale data to modify.')\n    return false\n  }\n\n  if (R.isEmpty(jQuery('#input_modify_sync_beating_bpm').val())) {\n    alert('Please enter a BPM value.')\n    return false\n  }\n\n  // get the fundamental frequency of the scale\n  var fundamental = jQuery('#input_modify_sync_beating_bpm').val() / 60\n  console.log(fundamental)\n\n  var resolution = jQuery('#select_sync_beating_resolution').val()\n  console.log(resolution)\n\n  // loop through all in the scale, convert to ratio, then quantize to fundamental, then convert to cents\n  var lines = document.getElementById('txt_tuning_data').value.split(newlineTest)\n  console.log(lines)\n  var new_tuning = ''\n\n  for (let i = 0; i < lines.length; i++) {\n    lines[i] = line_to_decimal(lines[i])\n    new_tuning += R.toString(Math.round(lines[i] * resolution)) + '/' + resolution + unix_newline\n  }\n  new_tuning = new_tuning.trim() // remove final newline\n\n  console.log(new_tuning)\n\n  // set tuning base frequency to some multiple of the fundamental, +/- 1 tritone from the old base frequency\n  var basefreq_lowbound = jQuery('#txt_base_frequency').val() * 0.7071067\n  var basefreq = fundamental\n  do {\n    basefreq = basefreq * 2\n  } while (basefreq < basefreq_lowbound)\n\n  // update fields and parse\n  jQuery('#txt_tuning_data').val(new_tuning)\n  jQuery('#txt_base_frequency').val(basefreq)\n  parse_tuning_data()\n\n  jQuery('#modal_modify_sync_beating').dialog('close')\n\n  // success\n  return true\n}\n\n// rotate scale\nfunction modify_rotate() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  // catch missing scale data\n  if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n    alert('No scale data to modify.')\n    return false\n  }\n\n  // split scale data into individual lines\n  var lines = jQuery('#txt_tuning_data').val().trim().split(unix_newline)\n\n  // get transposing degree, transposing interval and equave\n  let degree = parseInt(jQuery('#input_rotate_new_1_1').val())\n  let transposer = negateLine(lines[degree])\n  let equave = lines[lines.length - 1]\n\n  let rotatedLines = []\n\n  // transpose lines, mod equave\n  // start on degree after transposer/new root, cycle around and stop before transposer\n  for (let i = 1; i < lines.length; i++) {\n    let deg = (i + degree) % lines.length\n    let scaleIndex = i - 1\n    rotatedLines[scaleIndex] = moduloLine(transposeLine(lines[deg], transposer), equave)\n  }\n  \n  // add equave\n  rotatedLines.push(equave)\n\n  // update tuning input field with new tuning\n  jQuery('#txt_tuning_data').val(rotatedLines.join(unix_newline))\n  parse_tuning_data()\n  jQuery('#modal_modify_rotate').dialog('close')\n\n  // success\n  return true\n}\n\n// approximate rationals\nfunction modify_replace_with_approximation() {\n  var degree_selected = parseInt(jQuery('#input_scale_degree').val())\n\n  if (degree_selected < tuning_table.note_count) {\n    var tuning_data = document.getElementById('txt_tuning_data')\n    var lines = tuning_data.value.split(newlineTest)\n\n    var aprxs = document.getElementById('approximation_selection')\n    var approximation = aprxs.options[aprxs.selectedIndex].text\n    approximation = approximation.slice(0, approximation.indexOf('|')).trim()\n\n    if (degree_selected - 1 < lines.length && line_to_decimal(approximation)) {\n      lines[degree_selected - 1] = approximation\n    } else {\n      lines.push(approximation)\n    }\n\n    var lines_to_text = ''\n    lines.forEach(function (item, index, array) {\n      lines_to_text += lines[index]\n      if (index + 1 < array.length) lines_to_text += newline\n    })\n    tuning_data.value = lines_to_text\n\n    parse_tuning_data()\n\n    if (degree_selected < tuning_table.note_count - 1) {\n      jQuery('#input_scale_degree').val(degree_selected + 1)\n      jQuery('#input_scale_degree').trigger('change')\n    }\n    // success\n    return true\n  }\n\n  // invalid scale degree\n  return false\n}\n\n// update list of rationals to choose from\nfunction modify_update_approximations() {\n  jQuery('#approximation_selection').empty()\n\n  if (!R.isEmpty(current_approximations)) {\n    var interval = line_to_decimal(jQuery('#input_interval_to_approximate').val())\n    var mincentsd = parseFloat(jQuery('#input_min_error').val())\n    var maxcentsd = parseFloat(jQuery('#input_max_error').val())\n    var minprime = parseInt(jQuery(' #input_approx_min_prime').val())\n    var maxprime = parseInt(jQuery(' #input_approx_max_prime').val())\n    var semiconvergents = !document.getElementById('input_show_convergents').checked\n\n    if (minprime < 2) {\n      minprime = 2\n      jQuery('#input_approx_min_prime').val(2)\n    }\n\n    if (maxprime > 7919) {\n      maxprime = 7919\n      jQuery('#input_approx_max_prime').val(7919)\n    }\n\n    if (mincentsd < 0) mincentsd = 0\n\n    if (maxcentsd < 0) maxcentsd = 0\n\n    var menulength = semiconvergents\n      ? current_approximations.ratios.length\n      : current_approximations.convergent_indicies.length\n    var index\n\n    for (var i = 0; i < menulength; i++) {\n      index = semiconvergents ? i : current_approximations.convergent_indicies[i]\n\n      var n = parseInt(current_approximations.numerators[index])\n      var d = parseInt(current_approximations.denominators[index])\n      var prime_limit = current_approximations.ratio_limits[index]\n\n      var fraction_str = current_approximations.ratios[index]\n      var fraction = n / d\n\n      var cents_deviation = decimal_to_cents(fraction) - decimal_to_cents(interval)\n      var centsdabs = Math.abs(cents_deviation)\n      var cents_rounded = Math.round(10e6 * cents_deviation) / 10e6\n\n      var centsdsgn\n      if (cents_deviation / centsdabs >= 0) centsdsgn = '+'\n      else centsdsgn = ''\n\n      var description =\n        fraction_str +\n        ' | ' +\n        centsdsgn +\n        cents_rounded.toString() +\n        'c | ' +\n        prime_limit +\n        '-limit'\n\n      if (!interval) {\n        jQuery('#approximation_selection').append(\n          '<option selected disabled>Error: Invalid interval</option>'\n        )\n        break\n      } else if (interval == fraction && interval) {\n        // for cases like 1200.0 == 2/1\n        jQuery('#approximation_selection').append('<option>' + description + '</option>')\n        break\n      } else if (\n        centsdabs >= mincentsd &&\n        centsdabs <= maxcentsd &&\n        prime_limit >= minprime &&\n        prime_limit <= maxprime\n      ) {\n        jQuery('#approximation_selection').append('<option>' + description + '</option>')\n      }\n    }\n\n    if (document.getElementById('approximation_selection').options.length === 0) {\n      semiconvergents\n        ? jQuery('#approximation_selection').append(\n            '<option selected disabled> None found, try to raise error tolerances.</option>'\n          )\n        : jQuery('#approximation_selection').append(\n            '<option selected disabled> Try to  \"Show next best approximations\" or edit filters.</option>'\n          )\n    }\n  }\n}\n\n// approximate by harmonics\nfunction modify_approximate_harmonics() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n    alert('No scale data to modify.')\n    return false\n  }\n\n  if (R.isEmpty(jQuery('#input_approx_harm_denominator').val())) {\n    alert('Please enter a denominator value.')\n    return false\n  }\n\n  var denominator = jQuery('#input_approx_harm_denominator').val()\n\n  // loop through all intervals and approximate each with nearest harmonic\n  var lines = document.getElementById('txt_tuning_data').value.split(newlineTest)\n  console.log(lines)\n  var new_tuning = ''\n\n  for (let i = 0; i < lines.length; i++) {\n    lines[i] = line_to_decimal(lines[i])\n    new_tuning += R.toString(Math.round(lines[i] * denominator)) + '/' + denominator + unix_newline\n  }\n  new_tuning = new_tuning.trim() // remove final newline\n\n  console.log(new_tuning)\n\n  // update fields and parse\n  jQuery('#txt_tuning_data').val(new_tuning)\n  parse_tuning_data()\n\n  jQuery('#modal_approximate_harmonics').dialog('close')\n\n  // success\n  return true\n}\n\nfunction modify_approximate_subharmonics() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n    alert('No scale data to modify.')\n    return false\n  }\n\n  if (R.isEmpty(jQuery('#input_approx_subharm_numerator').val())) {\n    alert('Please enter a numerator value.')\n    return false\n  }\n\n  var numerator = jQuery('#input_approx_subharm_numerator').val()\n\n  // loop through all intervals and approximate each with nearest harmonic\n  var lines = document.getElementById('txt_tuning_data').value.split(newlineTest)\n  console.log(lines)\n  var new_tuning = ''\n\n  for (let i = 0; i < lines.length; i++) {\n    lines[i] = line_to_decimal(lines[i])\n    new_tuning += numerator + '/' + R.toString(Math.round(numerator / lines[i])) + unix_newline\n  }\n  new_tuning = new_tuning.trim() // remove final newline\n\n  console.log(new_tuning)\n\n  // update fields and parse\n  jQuery('#txt_tuning_data').val(new_tuning)\n  parse_tuning_data()\n\n  jQuery('#modal_approximate_subharmonics').dialog('close')\n\n  // success\n  return true\n}\n\nfunction modify_equalize() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  if (R.isEmpty(jQuery('#txt_tuning_data').val())) {\n    alert('No scale data to modify.')\n    return false\n  }\n\n  if (R.isEmpty(jQuery('#input_equalize_divisions').val())) {\n    alert('Please enter the number of divisions.')\n    return false\n  }\n\n  // loop through all intervals and approximate each with nearest harmonic\n  var lines = document.getElementById('txt_tuning_data').value.split(newlineTest)\n  console.log(lines)\n  var new_tuning = ''\n\n  var divisions = jQuery('#input_equalize_divisions').val()\n  var step_size = line_to_cents(lines[lines.length - 1]) / divisions\n\n  for (let i = 0; i < lines.length - 1; i++) {\n    // round to nearest step_size\n    lines[i] = Math.round(line_to_cents(lines[i]) / step_size) * step_size\n\n    // ensure that line result has a . at the end\n    if (R.toString(lines[i]).indexOf('.') == -1) {\n      lines[i] = R.toString(lines[i]) + '.'\n    }\n    new_tuning += lines[i] + unix_newline\n  }\n  new_tuning += lines[lines.length - 1] // leave last line unchanged\n\n  console.log(new_tuning)\n\n  // update fields and parse\n  jQuery('#txt_tuning_data').val(new_tuning)\n  parse_tuning_data()\n\n  jQuery('#modal_equalize').dialog('close')\n\n  // success\n  return true\n}\n\nfunction modify_octave_reduce() {\n  // remove white space from tuning data field\n  trimSelf('#txt_tuning_data')\n\n  // get current scale as array\n  var scale = jQuery('#txt_tuning_data').val()\n  var octave = jQuery('#input_reduce_octave').val()\n\n  // bail if input invalid\n  if (R.isEmpty(scale)) {\n    alert('No scale data to modify.')\n    return false\n  }\n  if (getLineType(octave) === LINE_TYPE.INVALID) {\n    alert(\n      'Warning: Interval to reduce to is invalid. Input must be ratio (e.g. 2/1), cents (e.g. 1200.0), n\\\\m (e.g. 12\\\\12) or decimal (e.g. 2,0)'\n    )\n    return false\n  }\n\n  scale = scale.split(unix_newline)\n\n  // each line modulo with the octave\n  for (let i = 0; i < scale.length; i++) {\n    if (scale[i] !== octave) {\n      scale[i] = moduloLine(scale[i], octave)\n    }\n  }\n\n  // sort resulting scale in ascending order\n  if (document.getElementById('input_reduce_also_sort').checked) {\n    scale = scaleSort(scale)\n  }\n\n  // update fields and parse\n  jQuery('#txt_tuning_data').val(scale.join(unix_newline))\n  parse_tuning_data()\n\n  jQuery('#modal_modify_octave_reduce').dialog('close')\n\n  // success\n  return true\n}\n"
  },
  {
    "path": "src/js/scaleworkshop.js",
    "content": "/**\n * INIT\n */\n\n// check if coming from a Back/Forward history navigation.\n// need to reload the page so that url params take effect\njQuery(window).on('popstate', function () {\n  console.log('Back/Forward navigation detected - reloading page')\n  location.reload(true)\n})\n\nif (\n  window.location.hostname.endsWith('.github.com') ||\n  window.location.hostname.endsWith('sevish.com')\n) {\n  redirectToHTTPS()\n}\n\n/**\n * GLOBALS\n */\n\nconst APP_TITLE = 'Scale Workshop 1.5'\nconst TUNING_MAX_SIZE = 128\nlet newline = localStorage && localStorage.getItem('newline') === 'windows' ? '\\r\\n' : '\\n'\nconst newlineTest = /\\r?\\n/\nconst unix_newline = '\\n'\nvar tuning_table = {\n  scale_data: [], // an array containing list of intervals input by the user\n  tuning_data: [], // an array containing the same list above converted to decimal format\n  note_count: 0, // number of values stored in tuning_data\n  freq: [], // an array containing the frequency for each MIDI note\n  cents: [], // an array containing the cents value for each MIDI note\n  decimal: [], // an array containing the frequency ratio expressed as decimal for each MIDI note\n  base_frequency: 440, // init val\n  base_midi_note: 69, // init val\n  description: '',\n  filename: ''\n}\nvar key_colors = [\n  'white',\n  'black',\n  'white',\n  'white',\n  'black',\n  'white',\n  'black',\n  'white',\n  'white',\n  'black',\n  'white',\n  'black'\n]\nvar current_approximations = {\n  convergent_indicies: [], // indicies of the convergent ratios\n  numerators: [], // numerators of approximations\n  denominators: [], // denominators of approximations\n  ratios: [], // the ratios combined\n  numerator_limits: [], // the prime limit of each numerator\n  denominator_limits: [], // the prime limit of each denominator\n  ratio_limits: [] // the prime limit of each ratio\n}\nvar prime_counter = [0, 10]\n\n/**\n * SCALE WORKSHOP FUNCTIONS\n */\n\n// take a tuning, do loads of calculations, then output the data to tuning_table\nfunction generate_tuning_table(tuning) {\n  var base_frequency = tuning_table['base_frequency']\n  var base_midi_note = tuning_table['base_midi_note']\n\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    var offset = i - base_midi_note\n    var quotient = Math.floor(offset / (tuning.length - 1))\n    var remainder = offset % (tuning.length - 1)\n    if (remainder < 0) remainder += tuning.length - 1\n    var period = tuning[tuning.length - 1]\n    // \"decimal\" here means a frequency ratio, but stored in decimal format\n    var decimal = tuning[remainder] * Math.pow(period, quotient)\n\n    // store the data in the tuning_table object\n    tuning_table['freq'][i] = base_frequency * decimal\n    tuning_table['cents'][i] = decimal_to_cents(decimal)\n    tuning_table['decimal'][i] = decimal\n  }\n}\n\nfunction set_key_colors(list) {\n  // check if the list of colors is empty\n  if (R.isEmpty(list)) {\n    // bail, leaving the previous colors in place\n    return false\n  }\n\n  key_colors = list.split(' ')\n\n  // get all the tuning table key cell elements\n  var ttkeys = jQuery('#tuning-table td.key-color')\n  // for each td.key-color\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    // get the number representing this key color, with the first item being 0\n\n    var keynum = (i - tuning_table['base_midi_note']).mod(key_colors.length)\n    // set the color of the key\n    jQuery(ttkeys[i]).attr('style', 'background-color: ' + key_colors[keynum] + ' !important')\n  }\n}\n\n/**\n * parse_url()\n */\n\nfunction parse_url() {\n  // ?name=16%20equal%20divisions%20of%202%2F1&data=75.%0A150.%0A225.%0A300.%0A375.%0A450.%0A525.%0A600.%0A675.%0A750.%0A825.%0A900.%0A975.%0A1050.%0A1125.%0A1200.&freq=440&midi=69&vert=5&horiz=1&colors=white%20black%20white%20black%20white%20black%20white%20white%20black%20white%20black%20white%20black%20white%20black%20white&waveform=sine&ampenv=pad\n  var url = new URL(window.location.href)\n\n  // get data from url params, and use sane defaults for tuning name, base frequency and base midi note number if data missing\n  var name = getSearchParamOr('', 'name', url)\n  var data = getSearchParamOr(false, 'data', url)\n  var freq = getSearchParamAsNumberOr(440, 'freq', url)\n  var midi = getSearchParamAsNumberOr(69, 'midi', url)\n  var source = getSearchParamOr('', 'source', url)\n\n  // get isomorphic keyboard mapping\n  var vertical = getSearchParamAsNumberOr(false, 'vert', url)\n  var horizontal = getSearchParamAsNumberOr(false, 'horiz', url)\n\n  // get key colours\n  var colors = getSearchParamOr(false, 'colors', url)\n\n  // get synth options\n  var waveform = getSearchParamOr(false, 'waveform', url)\n  var ampenv = getSearchParamOr(false, 'ampenv', url)\n\n  // bail if there is no data\n  if (!data) {\n    return false\n  }\n\n  // decodes HTML entities\n  function decodeHTML(input) {\n    var doc = new DOMParser().parseFromString(input, 'text/html')\n    return doc.documentElement.textContent\n  }\n\n  // parses Scala entries from the Xenharmonic Wiki\n  function parseWiki(str) {\n    var s = decodeHTML(str)\n    s = s.replace(/[_ ]+/g, '') // remove underscores and spaces\n    var a = s.split(newlineTest) // split by line into an array\n    a = a.filter((line) => !line.startsWith('<') && !line.startsWith('{') && !R.isEmpty(line)) // remove <nowiki> tag, wiki templates and blank lines\n    a = a.map((line) => line.split('!')[0]) // remove .scl comments\n    a = a.slice(2) // remove .scl metadata\n    return a.join(unix_newline)\n  }\n\n  // specially parse inputs from the Xenharmonic Wiki\n  if (source === 'wiki') {\n    data = parseWiki(data)\n  }\n\n  // enter the data from url in to the on-page form\n  jQuery('#txt_name').val(name)\n  jQuery('#txt_tuning_data').val(data)\n  jQuery('#txt_base_frequency').val(freq)\n  jQuery('#txt_base_midi_note').val(midi)\n  jQuery('#input_number_isomorphicmapping_vert').val(vertical)\n  jQuery('#input_number_isomorphicmapping_horiz').val(horizontal)\n\n  // if there is isomorphic keyboard mapping data, apply it\n  if (vertical !== false) synth.isomorphicMapping.vertical = vertical\n  if (horizontal !== false) synth.isomorphicMapping.horizontal = horizontal\n\n  // parse the tuning data\n  if (parse_tuning_data()) {\n    // if there are key colorings, apply them\n    if (colors !== false) {\n      jQuery('#input_key_colors').val(colors)\n      set_key_colors(colors)\n    }\n\n    // if there are synth options, apply them\n    if (waveform !== false) {\n      jQuery('#input_select_synth_waveform').val(waveform)\n      synth.waveform = waveform\n    }\n    if (ampenv !== false) jQuery('#input_select_synth_amp_env').val(ampenv)\n\n    // success\n    return true\n  } else {\n    // something probably wrong with the input data\n    return false\n  }\n}\n\n/**\n * parse_tuning_data()\n */\n\nfunction parse_tuning_data() {\n  // http://www.huygens-fokker.org/scala/scl_format.html\n\n  tuning_table['base_midi_note'] = parseInt(jQuery('#txt_base_midi_note').val())\n  tuning_table['base_frequency'] = parseFloat(jQuery('#txt_base_frequency').val())\n  tuning_table['description'] = jQuery('#txt_name').val()\n  tuning_table['filename'] = sanitize_filename(tuning_table['description'])\n\n  var user_tuning_data = document.getElementById('txt_tuning_data')\n\n  // check if user pasted a scala file\n  // we check if the first character is !\n  if (user_tuning_data.value.startsWith('!')) {\n    alert(\n      'Hello, trying to paste a Scala file into this app?' +\n        unix_newline +\n        \"Please use the 'Import .scl' function instead or remove the first few lines (description) from the text box\"\n    )\n    jQuery('#txt_tuning_data').parent().addClass('has-error')\n    return false\n  }\n\n  // split user data into individual lines\n  var lines = user_tuning_data.value.split(newlineTest)\n\n  // strip out the unusable lines, assemble an array of usable tuning data\n  tuning_table['scale_data'] = [] // initialise scale_data array\n  tuning_table['tuning_data'] = ['1'] // when initialised the array contains only '1' (unison)\n  tuning_table['note_count'] = 1\n  var empty = true\n  for (let i = 0; i < lines.length; i++) {\n    // check that line is not empty\n    if (!R.isEmpty(lines[i])) {\n      if (getLineType(lines[i]) === LINE_TYPE.INVALID) {\n        jQuery('#txt_tuning_data').parent().addClass('has-error')\n        return false\n      }\n\n      // so far so good - store the line in tuning array\n      tuning_table['scale_data'][tuning_table['note_count']] = lines[i] // 'scale_data' is the scale in the original format input in the text box\n      tuning_table['tuning_data'][tuning_table['note_count']] = line_to_decimal(lines[i]) // 'tuning_data' is the same as before but all input is converted to decimal format to make the maths easier later\n      tuning_table['note_count']++\n\n      // if we got to this point, then the tuning must not be empty\n      empty = false\n    }\n  }\n\n  if (empty) {\n    // if the input tuning is totally empty\n    console.log('no tuning data')\n    jQuery('#txt_tuning_data').parent().addClass('has-error')\n    return false\n  }\n\n  // finally, generate the frequency table\n  generate_tuning_table(tuning_table['tuning_data'])\n\n  // display generated tuning in a table on the page\n  jQuery('#tuning-table').empty()\n  jQuery('#tuning-table').append(\n    \"<tbody><tr><th class='key-color'></th><th>#</th><th>Freq.</th><th>Cents</th><th>Ratio</th></tr>\"\n  )\n\n  for (let i = 0; i < TUNING_MAX_SIZE; i++) {\n    // highlight the row which corresponds to the base MIDI note\n    var table_class = ''\n    if (i == tuning_table['base_midi_note']) {\n      table_class = 'info'\n    } else {\n      if ((tuning_table['base_midi_note'] - i) % (tuning_table['note_count'] - 1) == 0) {\n        table_class = 'warning'\n      }\n    }\n\n    // assemble the HTML for the table row\n    jQuery('#tuning-table').append(\n      \"<tr id='tuning-table-row-\" +\n        i +\n        \"' class='\" +\n        table_class +\n        \"'><td class='key-color'></td><td>\" +\n        i +\n        '</td><td>' +\n        parseFloat(tuning_table['freq'][i]).toFixed(3) +\n        ' Hz</td><td>' +\n        tuning_table['cents'][i].toFixed(3) +\n        '</td><td>' +\n        tuning_table['decimal'][i].toFixed(3) +\n        '</td></tr>'\n    )\n  }\n\n  jQuery('#tuning-table').append('</tbody>')\n\n  set_key_colors(jQuery('#input_key_colors').val())\n\n  // scroll to reference note on the table\n  jQuery('#col-tuning-table').animate(\n    {\n      scrollTop:\n        jQuery('#tuning-table-row-' + tuning_table['base_midi_note']).position().top +\n        jQuery('#col-tuning-table').scrollTop()\n    },\n    600\n  ) // 600ms scroll to reference note\n\n  jQuery('#txt_tuning_data').parent().removeClass('has-error')\n\n  // draw horizontal rule graphic\n  render_graphic_scale_rule()\n\n  // if has changed, convert the scale into a URL then add that URL to the browser's Back/Forward navigation\n  var url = get_scale_url()\n  if (url !== window.location.href) {\n    update_page_url(url)\n  }\n\n  // success\n  return true\n}\n\n/**\n * TUNING IMPORT RELATED FUNCTIONS\n */\n\nfunction is_file_api_supported() {\n  // Check for the various File API support.\n  if (window.File && window.FileReader && window.FileList && window.Blob) {\n    return true\n  } else {\n    // File API not supported\n    alert(\n      \"Trying to load a file? Sorry, your browser doesn't support the HTML5 File API. Please try using a different browser.\"\n    )\n    return false\n  }\n}\n\nfunction import_scala_scl() {\n  // check File API is supported\n  if (is_file_api_supported()) {\n    // trigger load file dialog\n    jQuery('#scala-file').trigger('click')\n  }\n}\n\nfunction import_anamark_tun() {\n  // check File API is supported\n  if (is_file_api_supported()) {\n    // trigger load file dialog\n    jQuery('#anamark-tun-file').trigger('click')\n  }\n}\n\nfunction importMnlgtun() {\n  // check File API is supported\n  if (is_file_api_supported()) {\n    // trigger load file dialog\n    jQuery('#mnlgtun-file').trigger('click')\n  }\n}\n\n// after a scala file is loaded, this function will be called\nfunction parse_imported_scala_scl(event) {\n  var input = event.target\n\n  // bail if user didn't actually load a file\n  if (R.isNil(input.files[0])) {\n    return false\n  }\n\n  // read the file\n  var reader = new FileReader()\n  var scala_file = reader.readAsText(input.files[0])\n\n  reader.onload = function () {\n    // get filename\n    jQuery('#txt_name').val(input.files[0].name.slice(0, -4))\n\n    scala_file = reader.result\n\n    // split scala_file data into individual lines\n    var lines = scala_file.split(newlineTest)\n\n    // determine the first line of scala file that contains tuning data\n    let first_line = lines.lastIndexOf('!') + 1\n\n    jQuery('#txt_tuning_data').val(\n      lines\n        .slice(first_line)\n        .map((line) => line.trim())\n        .join(unix_newline)\n    )\n\n    parse_tuning_data()\n  }\n}\n\n// after a tun file is loaded, this function will be called\nfunction parse_imported_anamark_tun(event) {\n  // Note: this is not an AnaMark TUN v2.00 compliant parser! It is incomplete!\n  // At the very least, this parser should support cents-based TUN files generated by Scale Workshop & Scala.\n  // If anybody wants full TUN v2.00 support, send a pull request\n  // Have you read the TUN spec recently?\n  // https://www.mark-henning.de/files/am/Tuning_File_V2_Doc.pdf\n\n  var input = event.target\n\n  // bail if user didn't actually load a file\n  if (R.isNil(input.files[0])) {\n    return false\n  }\n\n  // read the file\n  var reader = new FileReader()\n  var tun_file = reader.readAsText(input.files[0])\n\n  reader.onload = function () {\n    tun_file = reader.result\n\n    // split tun_file data into individual lines\n    var lines = tun_file.split(newlineTest)\n\n    // get tuning name\n    var name = false\n    for (let i = 0; i < lines.length; i++) {\n      // Check if line is start of [Info] section\n      if (!name && lines[i].includes('[Info]')) {\n        // file has [Info] section so we expect to see a name too\n        name = true\n      }\n      // We saw an [Info] section during a previous loop so now we're looking for the name\n      else {\n        if (lines[i].trim().startsWith('Name')) {\n          // the current line contains the name\n          var regex = /\"(.*?)\"/g\n          name = lines[i].match(regex)[0].replace(/\"/g, '').replace(/\\.tun/g, '')\n          break\n        }\n      }\n    }\n    // If a name couldn't be found within the file, then just grab it from the filename\n    if (name === true || name === false) {\n      console.log(\"this shouldn't be happening right now\")\n      name = input.files[0].name.slice(0, -4)\n    }\n\n    // determine if tun file contains 'Functional Tuning' block and get line number where tuning starts\n    var has_functional_tuning = false\n    var first_line = lines.findIndex(\n      (line) => line.includes('[Functional Tuning]') || line.includes('[Functional tuning]')\n    )\n    if (first_line === -1) {\n      first_line = 0\n    } else {\n      first_line += 1\n      has_functional_tuning = true\n    }\n\n    // it's best to work from the Functional Tuning if available, since it works much like a Scala scale\n    if (has_functional_tuning) {\n      jQuery('#txt_name').val(name)\n      var tuning = []\n\n      // get note values\n      for (let i = first_line; i < lines.length; i++) {\n        var n = i - first_line // note number\n        if (lines[i].includes('#=0')) {\n          tuning[n] = lines[i].substring(lines[i].indexOf('#=0') + 6, lines[i].length - 2).trim()\n        }\n        if (lines[i].includes('#>')) {\n          var m = (n + 1).toString()\n          var prefix = 'note ' + m + '=\"#>-' + m\n          tuning[n] = lines[i].replace(prefix, '')\n          tuning[n] = tuning[n].substring(3, tuning[n].indexOf('~')).trim()\n        }\n      }\n\n      jQuery('#txt_tuning_data').val(tuning.join(unix_newline))\n\n      // get base MIDI note and base frequency\n      for (let i = first_line + 1; i < lines.length; i++) {\n        if (lines[i].includes('!')) {\n          jQuery('#txt_base_frequency').val(\n            lines[i].substring(lines[i].indexOf('!') + 2, lines[i].length - 2)\n          )\n          jQuery('#txt_base_midi_note').val(\n            lines[i].substring(0, lines[i].indexOf('!') - 2).replace('note ', '')\n          )\n        }\n      }\n      parse_tuning_data()\n      return true\n    }\n\n    // if there's no functional tuning\n    else {\n      alert('This looks like a v0 or v1 tun file, which is not currently supported.')\n      return false\n      // RIP my willpower\n      /*\n      alert(\"Warning: You have imported an older v0 or v1 .TUN file with no [Functional Tuning] data. Scale Workshop will attempt to pull in all 128 notes.\");\n\n      var first_line = 0;\n\n      // determine on which line of the tun file that tuning data starts, with preference for 'Exact Tuning' block, followed by 'Tuning' block.\n      for ( let i = 0; i < lines.length; i++ ) {\n        if ( lines[i].includes(\"[Exact Tuning]\") ) {\n          has_functional_tuning = true;\n          first_line = i + 1;\n          break;\n        }\n      }\n      if ( first_line == 0 ) {\n        for ( let i = 0; i < lines.length; i++ ) {\n          if ( lines[i].includes(\"[Tuning]\") ) {\n            has_functional_tuning = true;\n            first_line = i + 1;\n            break;\n          }\n        }\n      }\n\n      // this is where things get messy\n\n      // enter tuning data\n      var offset = parseFloat( lines[first_line].replace(\"note 0=\", \"\") ).toFixed(6); // offset will ensure that note 0 is 1/1\n      let tuning_data_str;\n      for ( let i = first_line; i < first_line+128; i++ ) {\n\n        var n = i - first_line; // n = note number\n        var line = lines[i].replace( \"note \" + n.toString() + \"=\", \"\" ).trim();\n        line = parseFloat( line ).toFixed(6);\n        line = (parseFloat(line) + parseFloat(offset)).toFixed(6);\n\n        if ( n == 0 ) {\n          // clear scale field\n          tuning_data_str = ''\n        }\n        else if ( n == 1 ) {\n          tuning_data_str += line ;\n        }\n        else {\n          tuning_data_str += unix_newline + line;\n        }\n      }\n      jQuery( \"#txt_tuning_data\" ).val(tuning_data_str)\n\n      jQuery( \"#txt_base_frequency\" ).val( 440 / cents_to_decimal(offset) );\n      jQuery( \"#txt_base_midi_note\" ).val( 0 );\n      */\n    }\n  }\n}\n\nfunction parseImportedMnlgtun(event) {\n  // TODO: Add features for extracting scale information to reduce a table of 128 values into a periodic scale\n\n  const input = event.target\n\n  // bail if no file was uploaded\n  if (R.isNil(input.files[0])) {\n    return false\n  }\n\n  const zip = new JSZip()\n  zip.loadAsync(input.files[0]).then((result) => {\n    // check if meets size requirements\n    const bin = result.files[Object.keys(result.files)[0]]\n    if (bin.name.endsWith('_bin') && bin._data.uncompressedSize % 3 === 0) {\n      const binaryString = bin._data.compressedContent.reduce(\n        (a, b) => a + String.fromCharCode(b),\n        ''\n      )\n\n      // extract tuning data\n      let cents = mnlgBinaryToCents(binaryString)\n      if (cents.length > 0) {\n        const octaveFormat = cents.length === MNLG_OCTAVESIZE\n\n        // fix octave overflow\n        if (octaveFormat)\n          cents = cents.map((c) => (c > MNLG_OCTAVESIZE * 200 ? c - MNLG_MAXCENTS : c))\n\n        // to always play at the right frequencies, we have to use the first midi note\n        let octaveExp = octaveFormat ? cents[0] - 900 : cents[0] - MNLG_A_REF.val\n\n        // derive frequency from A440\n        const baseFrequency = MNLG_A_REF.freq * 2 ** (octaveExp / 1200)\n\n        // normalize so scale starts on unison\n        if (octaveFormat) {\n          let negCents = Math.min(...cents)\n          if (negCents < 0) cents = cents.map((c) => c - negCents)\n        } else {\n          cents = cents.map((c) => c - cents[0])\n        }\n\n        // remove unison (but may have other unison lines to preserve mapping)\n        cents.shift()\n\n        // add period\n        if (octaveFormat) cents.push(1200)\n\n        jQuery('#txt_tuning_data').val(cents.map((c) => c.toFixed(6)).join(newline))\n\n        jQuery('#txt_base_frequency').val(baseFrequency)\n        jQuery('#txt_base_midi_note').val(octaveFormat ? 60 : 0)\n        jQuery('#txt_name').val(input.files[0].name.slice(0, -9))\n\n        if (parse_tuning_data()) return true\n        else {\n          alert('Data parsing failed.')\n          return false\n        }\n      } else {\n        alert('File does not contain tuning data.')\n        return false\n      }\n    } else {\n      alert('Not a valid mnlgtun file.')\n      return false\n    }\n  })\n}\n"
  },
  {
    "path": "src/js/state/actions-dom.js",
    "content": "// DOM changes, need to sync with state\n\njQuery('#input_range_main_vol').on('input', function () {\n  state.set('main volume', parseFloat(jQuery(this).val()))\n})\n\njQuery('#velocity-toggler').on('click', () => {\n  state.set('midi velocity sensing', !state.get('midi velocity sensing'))\n})\n\n// hide virtual keyboard when mobile hamburger menu button is clicked\njQuery('button.navbar-toggle').on('click', () => {\n  state.set('virtual keyboard visible', false)\n  state.set('mobile menu visible', !state.get('mobile menu visible'))\n})\n\n// Touch keyboard (#nav_play) option clicked\njQuery('#nav_play, #launch-kbd').on('click', (event) => {\n  event.preventDefault()\n  state.set('virtual keyboard visible', !state.get('virtual keyboard visible'))\n})\n"
  },
  {
    "path": "src/js/state/actions.js",
    "content": "// non-DOM changes, need to sync with state\n\ndocument.addEventListener('keydown', (event) => {\n  if (event.key === 'Escape') {\n    state.set('virtual keyboard visible', false)\n  }\n})\n"
  },
  {
    "path": "src/js/state/on-ready.js",
    "content": "// when all event hooks set up the initial change events can fire\n\nstate.ready()\n"
  },
  {
    "path": "src/js/state/reactions-dom.js",
    "content": "// data changed, sync it with the DOM\n\nstate.on('main volume', (value) => {\n  jQuery('#input_range_main_vol').val(value)\n})\n\nstate.on('midi velocity sensing', (value) => {\n  const velocityToggleBtn = jQuery('#velocity-toggler')\n\n  if (value) {\n    velocityToggleBtn.removeClass('btn-basic').addClass('btn-success').text('velocity: on')\n  } else {\n    velocityToggleBtn.removeClass('btn-success').addClass('btn-basic').text('velocity: off')\n  }\n})\n\nstate.on('virtual keyboard visible', (value) => {\n  if (value) {\n    touch_kbd_open()\n  } else {\n    touch_kbd_close()\n  }\n})\n\nstate.on('mobile menu visible', (value) => {\n  if (value) {\n    jQuery('#mobile-menu').show()\n  } else {\n    jQuery('#mobile-menu').hide()\n  }\n})\n\nstate.on('midi modal visible', (value, ...args) => {\n  const midiModal = document.getElementById('modal_midi_settings')\n  if (value) {\n    renderMidiInputsTo(midiModal.querySelector('.inputs'))\n    renderMidiOutputsTo(midiModal.querySelector('.outputs'))\n    renderMidiSettingsTo(midiModal.querySelector('.settings'))\n  }\n})\n\nstate.on('midi enabled', (value) => {\n  if (value) {\n    jQuery('#midi-enabler')\n      .prop('disabled', true)\n      .removeClass('btn-danger')\n      .addClass('btn-success')\n      .text('on')\n  }\n})\n"
  },
  {
    "path": "src/js/state/reactions.js",
    "content": "// data changed, handle programmatic reaction - no DOM changes\n\nstate.on('main volume', (newValue) => {\n  synth.setMainVolume(newValue)\n})\n"
  },
  {
    "path": "src/js/state/state.js",
    "content": "class State extends EventEmitter {\n  constructor(initialData = {}) {\n    super()\n    this.data = initialData\n  }\n  get(key) {\n    return this.data[key]\n  }\n  set(key, newValue, forceEmit = false) {\n    const oldValue = this.data[key]\n    if (oldValue !== newValue) {\n      this.data[key] = newValue\n      this.emit(key, newValue, oldValue)\n    } else {\n      if (forceEmit) {\n        this.emit(key, newValue, oldValue)\n      }\n    }\n  }\n  ready() {\n    Object.entries(this.data).forEach(([key, value]) => {\n      this.emit(key, value)\n    })\n  }\n}\n\nconst state = new State({\n  'main volume': 0.8,\n  'midi enabled': false,\n  'midi velocity sensing': true,\n  'virtual keyboard visible': false,\n  'mobile menu visible': false,\n  'midi modal visible': false\n})\n"
  },
  {
    "path": "src/js/synth/Delay.js",
    "content": "class Delay {\n  constructor(synth) {\n    this.time = 0.3\n    this.gain = 0.4\n    this.inited = false\n    this.synth = synth\n  }\n  enable() {\n    if (this.inited) {\n      this.panL.connect(this.synth.masterGain)\n      this.panR.connect(this.synth.masterGain)\n    }\n  }\n  disable() {\n    if (this.inited) {\n      this.panL.disconnect(this.synth.masterGain)\n      this.panR.disconnect(this.synth.masterGain)\n    }\n  }\n  init(audioCtx) {\n    if (!this.inited) {\n      this.inited = true\n      this.channelL = audioCtx.createDelay(5.0)\n      this.channelR = audioCtx.createDelay(5.0)\n      this.gainL = audioCtx.createGain(0.8)\n      this.gainR = audioCtx.createGain(0.8)\n      // this.lowpassL = audioCtx.createBiquadFilter()\n      // this.lowpassR = audioCtx.createBiquadFilter()\n      // this.highpassL = audioCtx.createBiquadFilter()\n      // this.highpassR = audioCtx.createBiquadFilter()\n      this.panL = audioCtx.createPanner()\n      this.panR = audioCtx.createPanner()\n\n      // feedback loop with gain stage\n      this.channelL.connect(this.gainL)\n      this.gainL.connect(this.channelR)\n      this.channelR.connect(this.gainR)\n      this.gainR.connect(this.channelL)\n\n      // filters\n      // this.gainL.connect( this.lowpassL );\n      // this.gainR.connect( this.lowpassR );\n      // this.lowpassL.frequency.value = 6500;\n      // this.lowpassR.frequency.value = 7000;\n      // this.lowpassL.Q.value = 0.7;\n      // this.lowpassR.Q.value = 0.7;\n      // this.lowpassL.type = 'lowpass';\n      // this.lowpassR.type = 'lowpass';\n      // this.lowpassL.connect( this.highpassL );\n      // this.lowpassR.connect( this.highpassR );\n      // this.highpassL.frequency.value = 130;\n      // this.highpassR.frequency.value = 140;\n      // this.highpassL.Q.value = 0.7;\n      // this.highpassR.Q.value = 0.7;\n      // this.highpassL.type = 'highpass';\n      // this.highpassR.type = 'highpass';\n      // this.highpassL.connect( this.panL );\n      // this.highpassR.connect( this.panR );\n\n      // panning\n      this.gainL.connect(this.panL) // if you uncomment the above filters lines, then comment out this line\n      this.gainR.connect(this.panR) // if you uncomment the above filters lines, then comment out this line\n      this.panL.setPosition(-1, 0, 0)\n      this.panR.setPosition(1, 0, 0)\n\n      // setup delay time and gain for delay lines\n      const now = synth.now()\n      this.channelL.delayTime.setValueAtTime(this.time, now)\n      this.channelR.delayTime.setValueAtTime(this.time, now)\n      this.gainL.gain.setValueAtTime(this.gain, now)\n      this.gainR.gain.setValueAtTime(this.gain, now)\n\n      // check on init if user has already enabled delay\n      if (jQuery('#input_checkbox_delay_on').is(':checked')) {\n        this.enable()\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "src/js/synth/Synth.js",
    "content": "class Synth {\n  constructor() {\n    this.keymap = Keymap.EN\n    this.isomorphicMapping = {\n      vertical: 5, // how many scale degrees as you move up/down by rows\n      horizontal: 1 // how many scale degrees as you move left/right by cols\n    }\n    this.voices = []\n    this.midinotes_to_voices = {} // polyphonic voice allocation\n    this.voices_to_midinotes = {} // polyphonic voice allocation\n    this.polyphony = !R.isNil(localStorage.getItem('max_polyphony'))\n      ? localStorage.getItem('max_polyphony')\n      : 16\n    this.nextVoice = 0\n    this.waveform = 'semisine'\n    this.mainVolume = 0.8\n    this.inited = false\n\n    this.delay = new Delay(this)\n  }\n\n  init() {\n    // only init once\n    if (!this.inited) {\n      this.inited = true\n\n      // set up Web Audio API context\n      this.audioCtx = new (window.AudioContext || window.webkitAudioContext)()\n\n      // set up custom waveforms\n      this.custom_waveforms = {\n        warm1: this.audioCtx.createPeriodicWave(\n          new Float32Array([0, 10, 2, 2, 2, 1, 1, 0.5]),\n          new Float32Array([0, 0, 0, 0, 0, 0, 0, 0])\n        ),\n        warm2: this.audioCtx.createPeriodicWave(\n          new Float32Array([0, 10, 5, 3.33, 2, 1]),\n          new Float32Array([0, 0, 0, 0, 0, 0])\n        ),\n        warm3: this.audioCtx.createPeriodicWave(\n          new Float32Array([0, 10, 5, 5, 3]),\n          new Float32Array([0, 0, 0, 0, 0])\n        ),\n        warm4: this.audioCtx.createPeriodicWave(\n          new Float32Array([0, 10, 2, 2, 1]),\n          new Float32Array([0, 0, 0, 0, 0])\n        ),\n        octaver: this.audioCtx.createPeriodicWave(\n          new Float32Array([0, 1000, 500, 0, 333, 0, 0, 0, 250, 0, 0, 0, 0, 0, 0, 0, 166]),\n          new Float32Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n        ),\n        brightness: this.audioCtx.createPeriodicWave(\n          new Float32Array([\n            0, 10, 0, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 0.75, 0.5, 0.2, 0.1\n          ]),\n          new Float32Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n        ),\n        harmonicbell: this.audioCtx.createPeriodicWave(\n          new Float32Array([0, 10, 2, 2, 2, 2, 0, 0, 0, 0, 0, 7]),\n          new Float32Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n        ),\n        template: this.audioCtx.createPeriodicWave(\n          // first element is DC offset, second element is fundamental, third element is 2nd harmonic, etc.\n          new Float32Array([0, 1, 0.5, 0.333, 0.25, 0.2, 0.167]), // sine components\n          new Float32Array([0, 0, 0.0, 0.0, 0.0, 0.0, 0.0]) // cosine components\n        )\n      }\n\n      // DC-blocked semisine\n      const semisineSineComponents = new Float32Array(64);\n      const semisineCosineComponents = new Float32Array(64);\n      for (let n = 1; n < 64; ++n) {\n        semisineCosineComponents[n] = 1 / (1 - 4*n*n);\n      }\n      this.custom_waveforms.semisine = this.audioCtx.createPeriodicWave(\n        semisineSineComponents,\n        semisineCosineComponents\n      );\n\n      // set up master gain\n      this.masterGain = this.audioCtx.createGain()\n      this.masterGain.gain.value = this.mainVolume\n\n      // set up master filter\n      this.masterLPfilter = this.audioCtx.createBiquadFilter()\n      this.masterLPfilter.frequency.value = 5000\n      this.masterLPfilter.Q.value = 1\n      this.masterLPfilter.type = 'lowpass'\n\n      // connect master gain control > filter > master output\n      this.masterGain.connect(this.masterLPfilter)\n      this.masterLPfilter.connect(this.audioCtx.destination)\n\n      // init delay\n      this.delay.init(this.audioCtx)\n\n      // init free running oscillators\n      for (i = 0; i < this.polyphony; i++) {\n        this.voices[i] = new Voice(this.audioCtx)\n        this.voices[i].bindDelay(this.delay)\n        this.voices[i].bindSynth(this)\n        this.voices[i].init()\n      }\n    }\n  }\n\n  setMainVolume(newValue) {\n    const oldValue = this.mainVolume\n    if (newValue !== oldValue) {\n      this.mainVolume = newValue\n      if (this.inited) {\n        const now = this.now()\n        this.masterGain.gain.value = newValue\n        this.masterGain.gain.setValueAtTime(newValue, now)\n      }\n    }\n  }\n\n  noteOn(midinote, velocity = 127) {\n    const frequency = tuning_table.freq[midinote]\n\n    if (!R.isNil(frequency)) {\n      midi.playFrequency(frequency)\n\n      // make sure note triggers only on first input (prevent duplicate notes)\n      if (R.isNil(this.midinotes_to_voices[midinote])) {\n        this.init()\n\n        // round robin voice allocation, but skip voices that are still being held\n        for (i = this.nextVoice; i < this.nextVoice + this.polyphony; i++) {\n          // if next voice is free, use it\n          if (R.isNil(this.voices_to_midinotes[(i + 1) % this.polyphony])) {\n            this.nextVoice = (i + 1) % this.polyphony\n            break\n          }\n          // if no free voices are found when the loop ends, voice stealing will result\n        }\n\n        // keep track of allocated voices\n        this.midinotes_to_voices[midinote] = this.nextVoice\n        this.voices_to_midinotes[this.nextVoice] = midinote\n\n        // trigger note start\n        this.voices[this.midinotes_to_voices[midinote]].start(frequency, velocity)\n\n        // indicate playing note\n        jQuery('#tuning-table-row-' + midinote).addClass('bg-playnote')\n        console.log(this.midinotes_to_voices)\n        //console.log(\"Play note \" + midinote + \" (\" + frequency.toFixed(3) + \" Hz) velocity \" + velocity);\n      }\n    }\n  }\n  noteOff(midinote) {\n    midi.stopFrequency()\n\n    if (!R.isNil(this.midinotes_to_voices[midinote])) {\n      // release the note\n      this.voices[this.midinotes_to_voices[midinote]].stop()\n\n      // voice allocation\n      delete this.voices_to_midinotes[this.midinotes_to_voices[midinote]]\n      delete this.midinotes_to_voices[midinote]\n\n      // indicate stopped note\n      jQuery('#tuning-table-row-' + midinote).removeClass('bg-playnote')\n      if (Object.values(this.midinotes_to_voices).length) {\n        console.log(this.midinotes_to_voices)\n      }\n    }\n  }\n\n  now() {\n    return this.audioCtx.currentTime\n  }\n\n  // this function stops all active voices and cuts the delay\n  panic() {\n    // show which voices are active (playing)\n    console.log(this.voices)\n\n    // loop through active voices\n    for (let i = 0; i < this.polyphony; i++) {\n      // turn off voice\n      this.noteOff(this.voices_to_midinotes[i])\n    }\n\n    // turn down delay gain\n    jQuery('#input_range_feedback_gain').val(0)\n    this.delay.gain = 0\n    const now = this.now()\n    this.delay.gainL.gain.setValueAtTime(this.delay.gain, now)\n    this.delay.gainR.gain.setValueAtTime(this.delay.gain, now)\n\n    midi.stopFrequency()\n  }\n}\n"
  },
  {
    "path": "src/js/synth/Voice.js",
    "content": "const getEnvelopeByName = (name) => {\n  const envelope = {\n    attackTime: 0,\n    decayTime: 0,\n    sustain: 1,\n    releaseTime: 0\n  }\n\n  switch (name) {\n    case 'organ':\n      envelope.attackTime = 0.01\n      envelope.decayTime = 0.3\n      envelope.sustain = 0.8\n      envelope.releaseTime = 0.01\n      break\n    case 'pad':\n      envelope.attackTime = 1\n      envelope.decayTime = 3\n      envelope.sustain = 0.5\n      envelope.releaseTime = 0.7\n      break\n    case 'perc-short':\n      envelope.attackTime = 0.005\n      envelope.decayTime = 0.3\n      envelope.sustain = 0.00001\n      envelope.releaseTime = 0.05\n      break\n    case 'perc-medium':\n      envelope.attackTime = 0.005\n      envelope.decayTime = 1.5\n      envelope.sustain = 0.00001\n      envelope.releaseTime = 0.25\n      break\n    case 'perc-long':\n      envelope.attackTime = 0.01\n      envelope.decayTime = 8\n      envelope.sustain = 0.00001\n      envelope.releaseTime = 0.8\n      break\n  }\n\n  return envelope\n}\n\nconst getEnvelopeName = () => jQuery('#input_select_synth_amp_env').val()\n\n// https://github.com/mohayonao/pseudo-audio-param/blob/master/lib/expr.js#L3\nfunction getLinearRampToValueAtTime(t, v0, v1, t0, t1) {\n  var a\n\n  if (t <= t0) {\n    return v0\n  }\n  if (t1 <= t) {\n    return v1\n  }\n\n  a = (t - t0) / (t1 - t0)\n\n  return v0 + a * (v1 - v0)\n}\n\n// https://github.com/mohayonao/pseudo-audio-param/blob/master/lib/expr.js#L18\nfunction getExponentialRampToValueAtTime(t, v0, v1, t0, t1) {\n  var a\n\n  if (t <= t0) {\n    return v0\n  }\n  if (t1 <= t) {\n    return v1\n  }\n  if (v0 === v1) {\n    return v0\n  }\n\n  a = (t - t0) / (t1 - t0)\n\n  if ((0 < v0 && 0 < v1) || (v0 < 0 && v1 < 0)) {\n    return v0 * Math.pow(v1 / v0, a)\n  }\n\n  return 0\n}\n\nconst interpolateValueAtTime = (minValue, maxValue, envelope, t) => {\n  // interpolate attack\n  if (envelope.attackTime > t) {\n    return getLinearRampToValueAtTime(t, minValue, maxValue, 0, envelope.attackTime)\n  }\n\n  // interpolate decay\n  if (envelope.attackTime + envelope.decayTime > t) {\n    return getExponentialRampToValueAtTime(\n      t,\n      maxValue,\n      maxValue * envelope.sustain,\n      envelope.attackTime,\n      envelope.attackTime + envelope.decayTime\n    )\n  }\n\n  // interpolate sustain\n  return maxValue * envelope.sustain\n}\n\nclass Voice {\n  constructor(audioCtx) {\n    // set up oscillator\n    this.vco = audioCtx.createOscillator()\n\n    // set up amplitude envelope generator\n    this.vca = audioCtx.createGain()\n  }\n\n  init() {\n    // timing\n    const now = this.synth.now()\n\n    this.vca.gain.setValueAtTime(0, now)\n\n    // routing\n    this.vco.connect(this.vca)\n    this.vco.start()\n    this.vca.connect(this.delay.channelL)\n    this.vca.connect(this.synth.masterGain)\n  }\n\n  start(frequency, velocity) {\n    // start timing\n    const now = this.synth.now()\n    this.vca.gain._startTime = now\n\n    // tune oscillator to correct frequency\n    this.vco.frequency.setValueAtTime(frequency, now)\n\n    // set oscillator waveform\n    switch (this.synth.waveform) {\n      case 'warm1':\n        this.vco.setPeriodicWave(synth.custom_waveforms.warm1)\n        break\n      case 'warm2':\n        this.vco.setPeriodicWave(synth.custom_waveforms.warm2)\n        break\n      case 'warm3':\n        this.vco.setPeriodicWave(synth.custom_waveforms.warm3)\n        break\n      case 'warm4':\n        this.vco.setPeriodicWave(synth.custom_waveforms.warm4)\n        break\n      case 'octaver':\n        this.vco.setPeriodicWave(synth.custom_waveforms.octaver)\n        break\n      case 'brightness':\n        this.vco.setPeriodicWave(synth.custom_waveforms.brightness)\n        break\n      case 'harmonicbell':\n        this.vco.setPeriodicWave(synth.custom_waveforms.harmonicbell)\n        break\n      case 'semisine':\n        this.vco.setPeriodicWave(synth.custom_waveforms.semisine)\n        break\n      default:\n        this.vco.type = this.synth.waveform\n    }\n\n    // get target gain\n    if (velocity === 0) {\n      // in exponentialRampToValueAtTime, target gain can't be 0\n      this.targetGain = 0.00001\n    } else {\n      // use velocity to determine target gain\n      this.targetGain = velocity = (0.2 * velocity) / 127\n    }\n\n    // get and set amplitude envelope\n    const envelope = getEnvelopeByName(getEnvelopeName())\n    this.attackTime = envelope.attackTime\n    this.decayTime = envelope.decayTime\n    this.sustain = envelope.sustain\n    this.releaseTime = envelope.releaseTime\n\n    // Attack\n    this.cancelEnvelope(this.vca.gain, now)\n    this.vca.gain.setValueAtTime(0, now)\n    this.vca.gain.linearRampToValueAtTime(this.targetGain, now + this.attackTime)\n\n    // Decay & Sustain\n    this.vca.gain.exponentialRampToValueAtTime(\n      this.targetGain * this.sustain,\n      now + this.attackTime + this.decayTime\n    )\n  }\n\n  stop() {\n    // timing\n    const now = this.synth.now()\n\n    // Release\n    this.cancelEnvelope(this.vca.gain, now)\n    this.vca.gain.setTargetAtTime(0.0, now, this.releaseTime)\n  }\n\n  // cancels any scheduled envelope changes in a given property's value\n  cancelEnvelope(property, now) {\n    // Firefox and Safari do not support cancelAndHoldAtTime\n    if (isFunction(property.cancelAndHoldAtTime)) {\n      property.cancelAndHoldAtTime(now)\n    } else {\n      property.cancelScheduledValues(now)\n      property.setValueAtTime(\n        interpolateValueAtTime(\n          0.00001,\n          this.targetGain,\n          getEnvelopeByName(getEnvelopeName()),\n          now - property._startTime\n        ),\n        now\n      )\n    }\n  }\n\n  bindSynth(synth) {\n    this.synth = synth\n  }\n  bindDelay(delay) {\n    this.delay = delay\n  }\n}\n"
  },
  {
    "path": "src/js/synth.js",
    "content": "/**\n * synth.js\n * Web audio synth\n */\n\nconst synth = new Synth()\n\n// keycode_to_midinote()\n// it turns a keycode to a MIDI note based on this reference layout:\n//\n//   1  2  3  4  5  6  7  8  9  0  -  =\n//    Q  W  E  R  T  Y  U  I  O  P  [  ]\n//     A  S  D  F  G  H  J  K  L  ;  '  \\\n//      Z  X  C  V  B  N  M  ,  .  /\n//\nfunction keycode_to_midinote(keycode) {\n  // get row/col vals from the keymap\n  var key = synth.keymap[keycode]\n\n  // return false if there is no note assigned to this key\n  if (R.isNil(key)) {\n    return false\n  }\n\n  var [row, col] = key\n  return (\n    row * synth.isomorphicMapping.vertical +\n    col * synth.isomorphicMapping.horizontal +\n    tuning_table['base_midi_note']\n  )\n}\n\nfunction touch_to_midinote([row, col]) {\n  if (R.isNil(row) || R.isNil(col)) {\n    return false\n  }\n\n  return (\n    row * synth.isomorphicMapping.vertical +\n    col * synth.isomorphicMapping.horizontal +\n    tuning_table['base_midi_note']\n  )\n}\n\n// is_qwerty_active()\n// check if qwerty key playing should be active\n// returns true if focus is in safe area for typing\n// returns false if focus is on an input or textarea element\nfunction is_qwerty_active() {\n  jQuery('div#qwerty-indicator').empty()\n  var focus = document.activeElement.tagName\n  if (focus == 'TEXTAREA' || focus == 'INPUT') {\n    jQuery('div#qwerty-indicator').html(\n      '<img src=\"\" style=\"float:right\" /><h4><span class=\"glyphicon glyphicon glyphicon-volume-off\" aria-hidden=\"true\" style=\"color:#d9534f\"></span> Keyboard disabled</h4><p>Click here to enable QWERTY keyboard playing.</p>'\n    )\n    return false\n  } else {\n    jQuery('div#qwerty-indicator').html(\n      '<img src=\"\" style=\"float:right\" /><h4><span class=\"glyphicon glyphicon glyphicon-volume-down\" aria-hidden=\"true\"></span> Keyboard enabled</h4><p>Press QWERTY keys to play current tuning.</p>'\n    )\n    return true\n  }\n}\n\n// KEYDOWN -- capture keyboard input\ndocument.addEventListener('keydown', function (event) {\n  // bail if focus is on an input or textarea element\n  if (!is_qwerty_active()) {\n    return false\n  }\n\n  // bail, if a modifier is pressed alongside the key\n  if (!isSimpleKeypress(event)) {\n    return false\n  }\n\n  const midiNote = keycode_to_midinote(event.which) // midi note number 0-127\n  const velocity = 100\n\n  if (midiNote !== false) {\n    event.preventDefault()\n    synth.noteOn(midiNote, velocity)\n  }\n})\n\n// KEYUP -- capture keyboard input\ndocument.addEventListener('keyup', function (event) {\n  // bail, if a modifier is pressed alongside the key\n  if (!isSimpleKeypress(event)) {\n    return false\n  }\n  const midiNote = keycode_to_midinote(event.which)\n  if (midiNote !== false) {\n    event.preventDefault()\n    synth.noteOff(midiNote)\n  }\n})\n\n// -[virtual keyboard mobile]-----------------------------------------------\n\n// TODO: multi-touch support; https://stackoverflow.com/a/7236327/1806628\n\njQuery('#virtual-keyboard')\n  .on('touchstart', (e) => {\n    e.preventDefault()\n    synth.noteOn(touch_to_midinote(getCoordsFromKey(e.target)))\n    e.target.classList.add('active')\n  })\n  .on('touchend', (e) => {\n    e.preventDefault()\n    synth.noteOff(touch_to_midinote(getCoordsFromKey(e.target)))\n    e.target.classList.remove('active')\n  })\n  .on('touchcancel', (e) => {\n    e.preventDefault()\n    synth.noteOff(touch_to_midinote(getCoordsFromKey(e.target)))\n    e.target.classList.remove('active')\n  })\n// .on('touchmove', (e) => {\n//   e.preventDefault()\n//   console.log('touchmove', e.target)\n// })\n\n// -[virtual keyboard desktop]----------------------------------------------\n\nconst LEFT_MOUSE_BTN = 0\n\nlet isMousePressed = false\n\njQuery('#virtual-keyboard')\n  .on('mousedown', 'td', (e) => {\n    if (e.button !== LEFT_MOUSE_BTN) {\n      return\n    }\n\n    isMousePressed = true\n    synth.noteOn(touch_to_midinote(getCoordsFromKey(e.target)))\n    e.target.classList.add('active')\n  })\n  .on('mouseup', 'td', (e) => {\n    if (e.button !== LEFT_MOUSE_BTN) {\n      return\n    }\n\n    isMousePressed = false\n    synth.noteOff(touch_to_midinote(getCoordsFromKey(e.target)))\n    e.target.classList.remove('active')\n  })\n  .on('mouseenter', 'td', (e) => {\n    if (!isMousePressed) {\n      return\n    }\n\n    synth.noteOn(touch_to_midinote(getCoordsFromKey(e.target)))\n    e.target.classList.add('active')\n  })\n  .on('mouseleave', 'td', (e) => {\n    if (!isMousePressed) {\n      return\n    }\n\n    synth.noteOff(touch_to_midinote(getCoordsFromKey(e.target)))\n    e.target.classList.remove('active')\n  })\n"
  },
  {
    "path": "src/js/ui.js",
    "content": "/**\n * ui.js\n * User interface\n */\n\n// use jQuery UI tooltips instead of default browser tooltips\njQuery(function () {\n  jQuery(document).tooltip()\n})\n\n// set \"accordion\" settings UI\njQuery(function () {\n  jQuery('#settings-accordion').accordion({\n    collapsible: true, // allow all tabs to be closed\n    active: false, // start all tabs closed\n    heightStyle: 'content', // size each section to content\n    icons: null, // turn off triangle icons\n    header: '> div > h3'\n  })\n})\n\nfunction touch_kbd_open() {\n  // check if scale already set up - we can't use the touch kbd if there is no scale\n  if (tuning_table['note_count'] == 0) {\n    alert(\"Can't open the touch keyboard until you have created or loaded a scale.\")\n    return\n  }\n\n  // remove info from keys\n  jQuery('#virtual-keyboard td').each(function (index) {\n    // clear content of cell\n    jQuery(this).empty()\n    // reset any classes that might be on the cell\n    jQuery(this).attr('class', 'key')\n  })\n\n  // display tuning info on virtual keys\n  jQuery('#virtual-keyboard td').each(function () {\n    // get the coord data attribute and figure out the midinote\n    const midinote = touch_to_midinote(getCoordsFromKey(this))\n\n    // add text to key\n    //jQuery(this).append(\"<p><small>midi</small> <strong>\" + midinote + \"</strong></p>\");\n    //jQuery(this).append(\"<p><strong>\" + tuning_table['freq'][midinote].toFixed(1) + \"</strong><br/><small>Hz</small></p>\");\n\n    // get the number representing this key color, with the first item being 0\n    var keynum = (midinote - tuning_table['base_midi_note']).mod(key_colors.length)\n\n    // set the color of the key\n    this.style.backgroundColor = key_colors[keynum]\n  })\n\n  state.set('mobile menu visible', false)\n\n  // show the virtual keyboard\n  jQuery('#virtual-keyboard').slideDown()\n}\n\nfunction touch_kbd_close() {\n  // hide the virtual keyboard\n  jQuery('#virtual-keyboard').slideUp()\n}\n"
  },
  {
    "path": "src/js/user.js",
    "content": "/**\n * user.js\n * Add your own hacks and hotfixes below\n */\n\n// declare custom variables and functions here\n\n// any code added within the below function will be called last when the page loads\nfunction run_user_scripts_on_document_ready() {}\n"
  },
  {
    "path": "src/lib/bootstrap-3.3.7-dist/css/bootstrap-theme.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n.btn-default,\n.btn-primary,\n.btn-success,\n.btn-info,\n.btn-warning,\n.btn-danger {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 1px rgba(0, 0, 0, .075);\n}\n.btn-default:active,\n.btn-primary:active,\n.btn-success:active,\n.btn-info:active,\n.btn-warning:active,\n.btn-danger:active,\n.btn-default.active,\n.btn-primary.active,\n.btn-success.active,\n.btn-info.active,\n.btn-warning.active,\n.btn-danger.active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-default.disabled,\n.btn-primary.disabled,\n.btn-success.disabled,\n.btn-info.disabled,\n.btn-warning.disabled,\n.btn-danger.disabled,\n.btn-default[disabled],\n.btn-primary[disabled],\n.btn-success[disabled],\n.btn-info[disabled],\n.btn-warning[disabled],\n.btn-danger[disabled],\nfieldset[disabled] .btn-default,\nfieldset[disabled] .btn-primary,\nfieldset[disabled] .btn-success,\nfieldset[disabled] .btn-info,\nfieldset[disabled] .btn-warning,\nfieldset[disabled] .btn-danger {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-default .badge,\n.btn-primary .badge,\n.btn-success .badge,\n.btn-info .badge,\n.btn-warning .badge,\n.btn-danger .badge {\n  text-shadow: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n}\n.btn-default {\n  text-shadow: 0 1px 0 #fff;\n  background-image: -webkit-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #e0e0e0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#e0e0e0));\n  background-image:         linear-gradient(to bottom, #fff 0%, #e0e0e0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#ffe0e0e0', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #dbdbdb;\n  border-color: #ccc;\n}\n.btn-default:hover,\n.btn-default:focus {\n  background-color: #e0e0e0;\n  background-position: 0 -15px;\n}\n.btn-default:active,\n.btn-default.active {\n  background-color: #e0e0e0;\n  border-color: #dbdbdb;\n}\n.btn-default.disabled,\n.btn-default[disabled],\nfieldset[disabled] .btn-default,\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus,\n.btn-default.disabled:active,\n.btn-default[disabled]:active,\nfieldset[disabled] .btn-default:active,\n.btn-default.disabled.active,\n.btn-default[disabled].active,\nfieldset[disabled] .btn-default.active {\n  background-color: #e0e0e0;\n  background-image: none;\n}\n.btn-primary {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #265a88 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#265a88));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #265a88 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff265a88', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #245580;\n}\n.btn-primary:hover,\n.btn-primary:focus {\n  background-color: #265a88;\n  background-position: 0 -15px;\n}\n.btn-primary:active,\n.btn-primary.active {\n  background-color: #265a88;\n  border-color: #245580;\n}\n.btn-primary.disabled,\n.btn-primary[disabled],\nfieldset[disabled] .btn-primary,\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus,\n.btn-primary.disabled:active,\n.btn-primary[disabled]:active,\nfieldset[disabled] .btn-primary:active,\n.btn-primary.disabled.active,\n.btn-primary[disabled].active,\nfieldset[disabled] .btn-primary.active {\n  background-color: #265a88;\n  background-image: none;\n}\n.btn-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #419641 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#419641));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #419641 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff419641', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #3e8f3e;\n}\n.btn-success:hover,\n.btn-success:focus {\n  background-color: #419641;\n  background-position: 0 -15px;\n}\n.btn-success:active,\n.btn-success.active {\n  background-color: #419641;\n  border-color: #3e8f3e;\n}\n.btn-success.disabled,\n.btn-success[disabled],\nfieldset[disabled] .btn-success,\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus,\n.btn-success.disabled:active,\n.btn-success[disabled]:active,\nfieldset[disabled] .btn-success:active,\n.btn-success.disabled.active,\n.btn-success[disabled].active,\nfieldset[disabled] .btn-success.active {\n  background-color: #419641;\n  background-image: none;\n}\n.btn-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #2aabd2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#2aabd2));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #2aabd2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff2aabd2', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #28a4c9;\n}\n.btn-info:hover,\n.btn-info:focus {\n  background-color: #2aabd2;\n  background-position: 0 -15px;\n}\n.btn-info:active,\n.btn-info.active {\n  background-color: #2aabd2;\n  border-color: #28a4c9;\n}\n.btn-info.disabled,\n.btn-info[disabled],\nfieldset[disabled] .btn-info,\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus,\n.btn-info.disabled:active,\n.btn-info[disabled]:active,\nfieldset[disabled] .btn-info:active,\n.btn-info.disabled.active,\n.btn-info[disabled].active,\nfieldset[disabled] .btn-info.active {\n  background-color: #2aabd2;\n  background-image: none;\n}\n.btn-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #eb9316 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#eb9316));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #eb9316 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffeb9316', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #e38d13;\n}\n.btn-warning:hover,\n.btn-warning:focus {\n  background-color: #eb9316;\n  background-position: 0 -15px;\n}\n.btn-warning:active,\n.btn-warning.active {\n  background-color: #eb9316;\n  border-color: #e38d13;\n}\n.btn-warning.disabled,\n.btn-warning[disabled],\nfieldset[disabled] .btn-warning,\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus,\n.btn-warning.disabled:active,\n.btn-warning[disabled]:active,\nfieldset[disabled] .btn-warning:active,\n.btn-warning.disabled.active,\n.btn-warning[disabled].active,\nfieldset[disabled] .btn-warning.active {\n  background-color: #eb9316;\n  background-image: none;\n}\n.btn-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c12e2a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c12e2a));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c12e2a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc12e2a', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-color: #b92c28;\n}\n.btn-danger:hover,\n.btn-danger:focus {\n  background-color: #c12e2a;\n  background-position: 0 -15px;\n}\n.btn-danger:active,\n.btn-danger.active {\n  background-color: #c12e2a;\n  border-color: #b92c28;\n}\n.btn-danger.disabled,\n.btn-danger[disabled],\nfieldset[disabled] .btn-danger,\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus,\n.btn-danger.disabled:active,\n.btn-danger[disabled]:active,\nfieldset[disabled] .btn-danger:active,\n.btn-danger.disabled.active,\n.btn-danger[disabled].active,\nfieldset[disabled] .btn-danger.active {\n  background-color: #c12e2a;\n  background-image: none;\n}\n.thumbnail,\n.img-thumbnail {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  background-color: #e8e8e8;\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  background-color: #2e6da4;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.navbar-default {\n  background-image: -webkit-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image:      -o-linear-gradient(top, #fff 0%, #f8f8f8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fff), to(#f8f8f8));\n  background-image:         linear-gradient(to bottom, #fff 0%, #f8f8f8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff', endColorstr='#fff8f8f8', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .15), 0 1px 5px rgba(0, 0, 0, .075);\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image:      -o-linear-gradient(top, #dbdbdb 0%, #e2e2e2 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dbdbdb), to(#e2e2e2));\n  background-image:         linear-gradient(to bottom, #dbdbdb 0%, #e2e2e2 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdbdbdb', endColorstr='#ffe2e2e2', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .075);\n}\n.navbar-brand,\n.navbar-nav > li > a {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .25);\n}\n.navbar-inverse {\n  background-image: -webkit-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image:      -o-linear-gradient(top, #3c3c3c 0%, #222 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#3c3c3c), to(#222));\n  background-image:         linear-gradient(to bottom, #3c3c3c 0%, #222 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff3c3c3c', endColorstr='#ff222222', GradientType=0);\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n  background-repeat: repeat-x;\n  border-radius: 4px;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .active > a {\n  background-image: -webkit-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image:      -o-linear-gradient(top, #080808 0%, #0f0f0f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#080808), to(#0f0f0f));\n  background-image:         linear-gradient(to bottom, #080808 0%, #0f0f0f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff080808', endColorstr='#ff0f0f0f', GradientType=0);\n  background-repeat: repeat-x;\n  -webkit-box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n          box-shadow: inset 0 3px 9px rgba(0, 0, 0, .25);\n}\n.navbar-inverse .navbar-brand,\n.navbar-inverse .navbar-nav > li > a {\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, .25);\n}\n.navbar-static-top,\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  border-radius: 0;\n}\n@media (max-width: 767px) {\n  .navbar .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n    background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n    background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n    background-repeat: repeat-x;\n  }\n}\n.alert {\n  text-shadow: 0 1px 0 rgba(255, 255, 255, .2);\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .25), 0 1px 2px rgba(0, 0, 0, .05);\n}\n.alert-success {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #c8e5bc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#c8e5bc));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #c8e5bc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffc8e5bc', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #b2dba1;\n}\n.alert-info {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #b9def0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#b9def0));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #b9def0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffb9def0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #9acfea;\n}\n.alert-warning {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #f8efc0 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#f8efc0));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #f8efc0 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fff8efc0', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #f5e79e;\n}\n.alert-danger {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #e7c3c3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#e7c3c3));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #e7c3c3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffe7c3c3', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dca7a7;\n}\n.progress {\n  background-image: -webkit-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #ebebeb 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#ebebeb), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #ebebeb 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffebebeb', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #286090 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#286090));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #286090 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff286090', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-success {\n  background-image: -webkit-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image:      -o-linear-gradient(top, #5cb85c 0%, #449d44 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5cb85c), to(#449d44));\n  background-image:         linear-gradient(to bottom, #5cb85c 0%, #449d44 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5cb85c', endColorstr='#ff449d44', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-info {\n  background-image: -webkit-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image:      -o-linear-gradient(top, #5bc0de 0%, #31b0d5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#5bc0de), to(#31b0d5));\n  background-image:         linear-gradient(to bottom, #5bc0de 0%, #31b0d5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de', endColorstr='#ff31b0d5', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-warning {\n  background-image: -webkit-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image:      -o-linear-gradient(top, #f0ad4e 0%, #ec971f 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f0ad4e), to(#ec971f));\n  background-image:         linear-gradient(to bottom, #f0ad4e 0%, #ec971f 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff0ad4e', endColorstr='#ffec971f', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-danger {\n  background-image: -webkit-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image:      -o-linear-gradient(top, #d9534f 0%, #c9302c 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9534f), to(#c9302c));\n  background-image:         linear-gradient(to bottom, #d9534f 0%, #c9302c 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9534f', endColorstr='#ffc9302c', GradientType=0);\n  background-repeat: repeat-x;\n}\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.list-group {\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .075);\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  text-shadow: 0 -1px 0 #286090;\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2b669a 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2b669a));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2b669a 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2b669a', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #2b669a;\n}\n.list-group-item.active .badge,\n.list-group-item.active:hover .badge,\n.list-group-item.active:focus .badge {\n  text-shadow: none;\n}\n.panel {\n  -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 2px rgba(0, 0, 0, .05);\n}\n.panel-default > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image:      -o-linear-gradient(top, #f5f5f5 0%, #e8e8e8 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f5f5f5), to(#e8e8e8));\n  background-image:         linear-gradient(to bottom, #f5f5f5 0%, #e8e8e8 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff5f5f5', endColorstr='#ffe8e8e8', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-primary > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image:      -o-linear-gradient(top, #337ab7 0%, #2e6da4 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#337ab7), to(#2e6da4));\n  background-image:         linear-gradient(to bottom, #337ab7 0%, #2e6da4 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff337ab7', endColorstr='#ff2e6da4', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-success > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image:      -o-linear-gradient(top, #dff0d8 0%, #d0e9c6 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#dff0d8), to(#d0e9c6));\n  background-image:         linear-gradient(to bottom, #dff0d8 0%, #d0e9c6 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffdff0d8', endColorstr='#ffd0e9c6', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-info > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image:      -o-linear-gradient(top, #d9edf7 0%, #c4e3f3 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#d9edf7), to(#c4e3f3));\n  background-image:         linear-gradient(to bottom, #d9edf7 0%, #c4e3f3 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffd9edf7', endColorstr='#ffc4e3f3', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-warning > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image:      -o-linear-gradient(top, #fcf8e3 0%, #faf2cc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#fcf8e3), to(#faf2cc));\n  background-image:         linear-gradient(to bottom, #fcf8e3 0%, #faf2cc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffcf8e3', endColorstr='#fffaf2cc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.panel-danger > .panel-heading {\n  background-image: -webkit-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image:      -o-linear-gradient(top, #f2dede 0%, #ebcccc 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#f2dede), to(#ebcccc));\n  background-image:         linear-gradient(to bottom, #f2dede 0%, #ebcccc 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff2dede', endColorstr='#ffebcccc', GradientType=0);\n  background-repeat: repeat-x;\n}\n.well {\n  background-image: -webkit-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image:      -o-linear-gradient(top, #e8e8e8 0%, #f5f5f5 100%);\n  background-image: -webkit-gradient(linear, left top, left bottom, from(#e8e8e8), to(#f5f5f5));\n  background-image:         linear-gradient(to bottom, #e8e8e8 0%, #f5f5f5 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe8e8e8', endColorstr='#fff5f5f5', GradientType=0);\n  background-repeat: repeat-x;\n  border-color: #dcdcdc;\n  -webkit-box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 3px rgba(0, 0, 0, .05), 0 1px 0 rgba(255, 255, 255, .1);\n}\n/*# sourceMappingURL=bootstrap-theme.css.map */\n"
  },
  {
    "path": "src/lib/bootstrap-3.3.7-dist/css/bootstrap.css",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n */\n/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */\nhtml {\n  font-family: sans-serif;\n  -webkit-text-size-adjust: 100%;\n      -ms-text-size-adjust: 100%;\n}\nbody {\n  margin: 0;\n}\narticle,\naside,\ndetails,\nfigcaption,\nfigure,\nfooter,\nheader,\nhgroup,\nmain,\nmenu,\nnav,\nsection,\nsummary {\n  display: block;\n}\naudio,\ncanvas,\nprogress,\nvideo {\n  display: inline-block;\n  vertical-align: baseline;\n}\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n[hidden],\ntemplate {\n  display: none;\n}\na {\n  background-color: transparent;\n}\na:active,\na:hover {\n  outline: 0;\n}\nabbr[title] {\n  border-bottom: 1px dotted;\n}\nb,\nstrong {\n  font-weight: bold;\n}\ndfn {\n  font-style: italic;\n}\nh1 {\n  margin: .67em 0;\n  font-size: 2em;\n}\nmark {\n  color: #000;\n  background: #ff0;\n}\nsmall {\n  font-size: 80%;\n}\nsub,\nsup {\n  position: relative;\n  font-size: 75%;\n  line-height: 0;\n  vertical-align: baseline;\n}\nsup {\n  top: -.5em;\n}\nsub {\n  bottom: -.25em;\n}\nimg {\n  border: 0;\n}\nsvg:not(:root) {\n  overflow: hidden;\n}\nfigure {\n  margin: 1em 40px;\n}\nhr {\n  height: 0;\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n}\npre {\n  overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: monospace, monospace;\n  font-size: 1em;\n}\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  margin: 0;\n  font: inherit;\n  color: inherit;\n}\nbutton {\n  overflow: visible;\n}\nbutton,\nselect {\n  text-transform: none;\n}\nbutton,\nhtml input[type=\"button\"],\ninput[type=\"reset\"],\ninput[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\nbutton[disabled],\nhtml input[disabled] {\n  cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n  padding: 0;\n  border: 0;\n}\ninput {\n  line-height: normal;\n}\ninput[type=\"checkbox\"],\ninput[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n  padding: 0;\n}\ninput[type=\"number\"]::-webkit-inner-spin-button,\ninput[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: content-box;\n     -moz-box-sizing: content-box;\n          box-sizing: content-box;\n  -webkit-appearance: textfield;\n}\ninput[type=\"search\"]::-webkit-search-cancel-button,\ninput[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\nfieldset {\n  padding: .35em .625em .75em;\n  margin: 0 2px;\n  border: 1px solid #c0c0c0;\n}\nlegend {\n  padding: 0;\n  border: 0;\n}\ntextarea {\n  overflow: auto;\n}\noptgroup {\n  font-weight: bold;\n}\ntable {\n  border-spacing: 0;\n  border-collapse: collapse;\n}\ntd,\nth {\n  padding: 0;\n}\n/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */\n@media print {\n  *,\n  *:before,\n  *:after {\n    color: #000 !important;\n    text-shadow: none !important;\n    background: transparent !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  a,\n  a:visited {\n    text-decoration: underline;\n  }\n  a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  a[href^=\"#\"]:after,\n  a[href^=\"javascript:\"]:after {\n    content: \"\";\n  }\n  pre,\n  blockquote {\n    border: 1px solid #999;\n\n    page-break-inside: avoid;\n  }\n  thead {\n    display: table-header-group;\n  }\n  tr,\n  img {\n    page-break-inside: avoid;\n  }\n  img {\n    max-width: 100% !important;\n  }\n  p,\n  h2,\n  h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  h2,\n  h3 {\n    page-break-after: avoid;\n  }\n  .navbar {\n    display: none;\n  }\n  .btn > .caret,\n  .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .label {\n    border: 1px solid #000;\n  }\n  .table {\n    border-collapse: collapse !important;\n  }\n  .table td,\n  .table th {\n    background-color: #fff !important;\n  }\n  .table-bordered th,\n  .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n@font-face {\n  font-family: 'Glyphicons Halflings';\n\n  src: url('../fonts/glyphicons-halflings-regular.eot');\n  src: url('../fonts/glyphicons-halflings-regular.eot?#iefix') format('embedded-opentype'), url('../fonts/glyphicons-halflings-regular.woff2') format('woff2'), url('../fonts/glyphicons-halflings-regular.woff') format('woff'), url('../fonts/glyphicons-halflings-regular.ttf') format('truetype'), url('../fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular') format('svg');\n}\n.glyphicon {\n  position: relative;\n  top: 1px;\n  display: inline-block;\n  font-family: 'Glyphicons Halflings';\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1;\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.glyphicon-asterisk:before {\n  content: \"\\002a\";\n}\n.glyphicon-plus:before {\n  content: \"\\002b\";\n}\n.glyphicon-euro:before,\n.glyphicon-eur:before {\n  content: \"\\20ac\";\n}\n.glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.glyphicon-music:before {\n  content: \"\\e002\";\n}\n.glyphicon-search:before {\n  content: \"\\e003\";\n}\n.glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.glyphicon-star:before {\n  content: \"\\e006\";\n}\n.glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.glyphicon-user:before {\n  content: \"\\e008\";\n}\n.glyphicon-film:before {\n  content: \"\\e009\";\n}\n.glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.glyphicon-th:before {\n  content: \"\\e011\";\n}\n.glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.glyphicon-off:before {\n  content: \"\\e017\";\n}\n.glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.glyphicon-home:before {\n  content: \"\\e021\";\n}\n.glyphicon-file:before {\n  content: \"\\e022\";\n}\n.glyphicon-time:before {\n  content: \"\\e023\";\n}\n.glyphicon-road:before {\n  content: \"\\e024\";\n}\n.glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.glyphicon-download:before {\n  content: \"\\e026\";\n}\n.glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.glyphicon-book:before {\n  content: \"\\e043\";\n}\n.glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.glyphicon-print:before {\n  content: \"\\e045\";\n}\n.glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.glyphicon-font:before {\n  content: \"\\e047\";\n}\n.glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.glyphicon-list:before {\n  content: \"\\e056\";\n}\n.glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.glyphicon-share:before {\n  content: \"\\e066\";\n}\n.glyphicon-check:before {\n  content: \"\\e067\";\n}\n.glyphicon-move:before {\n  content: \"\\e068\";\n}\n.glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.glyphicon-play:before {\n  content: \"\\e072\";\n}\n.glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.glyphicon-random:before {\n  content: \"\\e110\";\n}\n.glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.glyphicon-link:before {\n  content: \"\\e144\";\n}\n.glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.glyphicon-record:before {\n  content: \"\\e165\";\n}\n.glyphicon-save:before {\n  content: \"\\e166\";\n}\n.glyphicon-open:before {\n  content: \"\\e167\";\n}\n.glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.glyphicon-import:before {\n  content: \"\\e169\";\n}\n.glyphicon-export:before {\n  content: \"\\e170\";\n}\n.glyphicon-send:before {\n  content: \"\\e171\";\n}\n.glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.glyphicon-header:before {\n  content: \"\\e180\";\n}\n.glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.glyphicon-cd:before {\n  content: \"\\e201\";\n}\n.glyphicon-save-file:before {\n  content: \"\\e202\";\n}\n.glyphicon-open-file:before {\n  content: \"\\e203\";\n}\n.glyphicon-level-up:before {\n  content: \"\\e204\";\n}\n.glyphicon-copy:before {\n  content: \"\\e205\";\n}\n.glyphicon-paste:before {\n  content: \"\\e206\";\n}\n.glyphicon-alert:before {\n  content: \"\\e209\";\n}\n.glyphicon-equalizer:before {\n  content: \"\\e210\";\n}\n.glyphicon-king:before {\n  content: \"\\e211\";\n}\n.glyphicon-queen:before {\n  content: \"\\e212\";\n}\n.glyphicon-pawn:before {\n  content: \"\\e213\";\n}\n.glyphicon-bishop:before {\n  content: \"\\e214\";\n}\n.glyphicon-knight:before {\n  content: \"\\e215\";\n}\n.glyphicon-baby-formula:before {\n  content: \"\\e216\";\n}\n.glyphicon-tent:before {\n  content: \"\\26fa\";\n}\n.glyphicon-blackboard:before {\n  content: \"\\e218\";\n}\n.glyphicon-bed:before {\n  content: \"\\e219\";\n}\n.glyphicon-apple:before {\n  content: \"\\f8ff\";\n}\n.glyphicon-erase:before {\n  content: \"\\e221\";\n}\n.glyphicon-hourglass:before {\n  content: \"\\231b\";\n}\n.glyphicon-lamp:before {\n  content: \"\\e223\";\n}\n.glyphicon-duplicate:before {\n  content: \"\\e224\";\n}\n.glyphicon-piggy-bank:before {\n  content: \"\\e225\";\n}\n.glyphicon-scissors:before {\n  content: \"\\e226\";\n}\n.glyphicon-bitcoin:before {\n  content: \"\\e227\";\n}\n.glyphicon-btc:before {\n  content: \"\\e227\";\n}\n.glyphicon-xbt:before {\n  content: \"\\e227\";\n}\n.glyphicon-yen:before {\n  content: \"\\00a5\";\n}\n.glyphicon-jpy:before {\n  content: \"\\00a5\";\n}\n.glyphicon-ruble:before {\n  content: \"\\20bd\";\n}\n.glyphicon-rub:before {\n  content: \"\\20bd\";\n}\n.glyphicon-scale:before {\n  content: \"\\e230\";\n}\n.glyphicon-ice-lolly:before {\n  content: \"\\e231\";\n}\n.glyphicon-ice-lolly-tasted:before {\n  content: \"\\e232\";\n}\n.glyphicon-education:before {\n  content: \"\\e233\";\n}\n.glyphicon-option-horizontal:before {\n  content: \"\\e234\";\n}\n.glyphicon-option-vertical:before {\n  content: \"\\e235\";\n}\n.glyphicon-menu-hamburger:before {\n  content: \"\\e236\";\n}\n.glyphicon-modal-window:before {\n  content: \"\\e237\";\n}\n.glyphicon-oil:before {\n  content: \"\\e238\";\n}\n.glyphicon-grain:before {\n  content: \"\\e239\";\n}\n.glyphicon-sunglasses:before {\n  content: \"\\e240\";\n}\n.glyphicon-text-size:before {\n  content: \"\\e241\";\n}\n.glyphicon-text-color:before {\n  content: \"\\e242\";\n}\n.glyphicon-text-background:before {\n  content: \"\\e243\";\n}\n.glyphicon-object-align-top:before {\n  content: \"\\e244\";\n}\n.glyphicon-object-align-bottom:before {\n  content: \"\\e245\";\n}\n.glyphicon-object-align-horizontal:before {\n  content: \"\\e246\";\n}\n.glyphicon-object-align-left:before {\n  content: \"\\e247\";\n}\n.glyphicon-object-align-vertical:before {\n  content: \"\\e248\";\n}\n.glyphicon-object-align-right:before {\n  content: \"\\e249\";\n}\n.glyphicon-triangle-right:before {\n  content: \"\\e250\";\n}\n.glyphicon-triangle-left:before {\n  content: \"\\e251\";\n}\n.glyphicon-triangle-bottom:before {\n  content: \"\\e252\";\n}\n.glyphicon-triangle-top:before {\n  content: \"\\e253\";\n}\n.glyphicon-console:before {\n  content: \"\\e254\";\n}\n.glyphicon-superscript:before {\n  content: \"\\e255\";\n}\n.glyphicon-subscript:before {\n  content: \"\\e256\";\n}\n.glyphicon-menu-left:before {\n  content: \"\\e257\";\n}\n.glyphicon-menu-right:before {\n  content: \"\\e258\";\n}\n.glyphicon-menu-down:before {\n  content: \"\\e259\";\n}\n.glyphicon-menu-up:before {\n  content: \"\\e260\";\n}\n* {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\n*:before,\n*:after {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\nhtml {\n  font-size: 10px;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\nbody {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #333;\n  background-color: #fff;\n}\ninput,\nbutton,\nselect,\ntextarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\na {\n  color: #337ab7;\n  text-decoration: none;\n}\na:hover,\na:focus {\n  color: #23527c;\n  text-decoration: underline;\n}\na:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\nfigure {\n  margin: 0;\n}\nimg {\n  vertical-align: middle;\n}\n.img-responsive,\n.thumbnail > img,\n.thumbnail a > img,\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.img-rounded {\n  border-radius: 6px;\n}\n.img-thumbnail {\n  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  padding: 4px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: all .2s ease-in-out;\n       -o-transition: all .2s ease-in-out;\n          transition: all .2s ease-in-out;\n}\n.img-circle {\n  border-radius: 50%;\n}\nhr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eee;\n}\n.sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  padding: 0;\n  margin: -1px;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.sr-only-focusable:active,\n.sr-only-focusable:focus {\n  position: static;\n  width: auto;\n  height: auto;\n  margin: 0;\n  overflow: visible;\n  clip: auto;\n}\n[role=\"button\"] {\n  cursor: pointer;\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: inherit;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\nh1 small,\nh2 small,\nh3 small,\nh4 small,\nh5 small,\nh6 small,\n.h1 small,\n.h2 small,\n.h3 small,\n.h4 small,\n.h5 small,\n.h6 small,\nh1 .small,\nh2 .small,\nh3 .small,\nh4 .small,\nh5 .small,\nh6 .small,\n.h1 .small,\n.h2 .small,\n.h3 .small,\n.h4 .small,\n.h5 .small,\n.h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #777;\n}\nh1,\n.h1,\nh2,\n.h2,\nh3,\n.h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\nh1 small,\n.h1 small,\nh2 small,\n.h2 small,\nh3 small,\n.h3 small,\nh1 .small,\n.h1 .small,\nh2 .small,\n.h2 .small,\nh3 .small,\n.h3 .small {\n  font-size: 65%;\n}\nh4,\n.h4,\nh5,\n.h5,\nh6,\n.h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\nh4 small,\n.h4 small,\nh5 small,\n.h5 small,\nh6 small,\n.h6 small,\nh4 .small,\n.h4 .small,\nh5 .small,\n.h5 .small,\nh6 .small,\n.h6 .small {\n  font-size: 75%;\n}\nh1,\n.h1 {\n  font-size: 36px;\n}\nh2,\n.h2 {\n  font-size: 30px;\n}\nh3,\n.h3 {\n  font-size: 24px;\n}\nh4,\n.h4 {\n  font-size: 18px;\n}\nh5,\n.h5 {\n  font-size: 14px;\n}\nh6,\n.h6 {\n  font-size: 12px;\n}\np {\n  margin: 0 0 10px;\n}\n.lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 300;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .lead {\n    font-size: 21px;\n  }\n}\nsmall,\n.small {\n  font-size: 85%;\n}\nmark,\n.mark {\n  padding: .2em;\n  background-color: #fcf8e3;\n}\n.text-left {\n  text-align: left;\n}\n.text-right {\n  text-align: right;\n}\n.text-center {\n  text-align: center;\n}\n.text-justify {\n  text-align: justify;\n}\n.text-nowrap {\n  white-space: nowrap;\n}\n.text-lowercase {\n  text-transform: lowercase;\n}\n.text-uppercase {\n  text-transform: uppercase;\n}\n.text-capitalize {\n  text-transform: capitalize;\n}\n.text-muted {\n  color: #777;\n}\n.text-primary {\n  color: #337ab7;\n}\na.text-primary:hover,\na.text-primary:focus {\n  color: #286090;\n}\n.text-success {\n  color: #3c763d;\n}\na.text-success:hover,\na.text-success:focus {\n  color: #2b542c;\n}\n.text-info {\n  color: #31708f;\n}\na.text-info:hover,\na.text-info:focus {\n  color: #245269;\n}\n.text-warning {\n  color: #8a6d3b;\n}\na.text-warning:hover,\na.text-warning:focus {\n  color: #66512c;\n}\n.text-danger {\n  color: #a94442;\n}\na.text-danger:hover,\na.text-danger:focus {\n  color: #843534;\n}\n.bg-primary {\n  color: #fff;\n  background-color: #337ab7;\n}\na.bg-primary:hover,\na.bg-primary:focus {\n  background-color: #286090;\n}\n.bg-success {\n  background-color: #dff0d8;\n}\na.bg-success:hover,\na.bg-success:focus {\n  background-color: #c1e2b3;\n}\n.bg-info {\n  background-color: #d9edf7;\n}\na.bg-info:hover,\na.bg-info:focus {\n  background-color: #afd9ee;\n}\n.bg-warning {\n  background-color: #fcf8e3;\n}\na.bg-warning:hover,\na.bg-warning:focus {\n  background-color: #f7ecb5;\n}\n.bg-danger {\n  background-color: #f2dede;\n}\na.bg-danger:hover,\na.bg-danger:focus {\n  background-color: #e4b9b9;\n}\n.page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eee;\n}\nul,\nol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\nul ul,\nol ul,\nul ol,\nol ol {\n  margin-bottom: 0;\n}\n.list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.list-inline {\n  padding-left: 0;\n  margin-left: -5px;\n  list-style: none;\n}\n.list-inline > li {\n  display: inline-block;\n  padding-right: 5px;\n  padding-left: 5px;\n}\ndl {\n  margin-top: 0;\n  margin-bottom: 20px;\n}\ndt,\ndd {\n  line-height: 1.42857143;\n}\ndt {\n  font-weight: bold;\n}\ndd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .dl-horizontal dt {\n    float: left;\n    width: 160px;\n    overflow: hidden;\n    clear: left;\n    text-align: right;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n  }\n  .dl-horizontal dd {\n    margin-left: 180px;\n  }\n}\nabbr[title],\nabbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #777;\n}\n.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\nblockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  font-size: 17.5px;\n  border-left: 5px solid #eee;\n}\nblockquote p:last-child,\nblockquote ul:last-child,\nblockquote ol:last-child {\n  margin-bottom: 0;\n}\nblockquote footer,\nblockquote small,\nblockquote .small {\n  display: block;\n  font-size: 80%;\n  line-height: 1.42857143;\n  color: #777;\n}\nblockquote footer:before,\nblockquote small:before,\nblockquote .small:before {\n  content: '\\2014 \\00A0';\n}\n.blockquote-reverse,\nblockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  text-align: right;\n  border-right: 5px solid #eee;\n  border-left: 0;\n}\n.blockquote-reverse footer:before,\nblockquote.pull-right footer:before,\n.blockquote-reverse small:before,\nblockquote.pull-right small:before,\n.blockquote-reverse .small:before,\nblockquote.pull-right .small:before {\n  content: '';\n}\n.blockquote-reverse footer:after,\nblockquote.pull-right footer:after,\n.blockquote-reverse small:after,\nblockquote.pull-right small:after,\n.blockquote-reverse .small:after,\nblockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\naddress {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.42857143;\n}\ncode,\nkbd,\npre,\nsamp {\n  font-family: Menlo, Monaco, Consolas, \"Courier New\", monospace;\n}\ncode {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  border-radius: 4px;\n}\nkbd {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #fff;\n  background-color: #333;\n  border-radius: 3px;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .25);\n}\nkbd kbd {\n  padding: 0;\n  font-size: 100%;\n  font-weight: bold;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\npre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.42857143;\n  color: #333;\n  word-break: break-all;\n  word-wrap: break-word;\n  background-color: #f5f5f5;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\npre code {\n  padding: 0;\n  font-size: inherit;\n  color: inherit;\n  white-space: pre-wrap;\n  background-color: transparent;\n  border-radius: 0;\n}\n.pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.container {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n@media (min-width: 768px) {\n  .container {\n    width: 750px;\n  }\n}\n@media (min-width: 992px) {\n  .container {\n    width: 970px;\n  }\n}\n@media (min-width: 1200px) {\n  .container {\n    width: 1170px;\n  }\n}\n.container-fluid {\n  padding-right: 15px;\n  padding-left: 15px;\n  margin-right: auto;\n  margin-left: auto;\n}\n.row {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n.col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {\n  position: relative;\n  min-height: 1px;\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.col-xs-1, .col-xs-2, .col-xs-3, .col-xs-4, .col-xs-5, .col-xs-6, .col-xs-7, .col-xs-8, .col-xs-9, .col-xs-10, .col-xs-11, .col-xs-12 {\n  float: left;\n}\n.col-xs-12 {\n  width: 100%;\n}\n.col-xs-11 {\n  width: 91.66666667%;\n}\n.col-xs-10 {\n  width: 83.33333333%;\n}\n.col-xs-9 {\n  width: 75%;\n}\n.col-xs-8 {\n  width: 66.66666667%;\n}\n.col-xs-7 {\n  width: 58.33333333%;\n}\n.col-xs-6 {\n  width: 50%;\n}\n.col-xs-5 {\n  width: 41.66666667%;\n}\n.col-xs-4 {\n  width: 33.33333333%;\n}\n.col-xs-3 {\n  width: 25%;\n}\n.col-xs-2 {\n  width: 16.66666667%;\n}\n.col-xs-1 {\n  width: 8.33333333%;\n}\n.col-xs-pull-12 {\n  right: 100%;\n}\n.col-xs-pull-11 {\n  right: 91.66666667%;\n}\n.col-xs-pull-10 {\n  right: 83.33333333%;\n}\n.col-xs-pull-9 {\n  right: 75%;\n}\n.col-xs-pull-8 {\n  right: 66.66666667%;\n}\n.col-xs-pull-7 {\n  right: 58.33333333%;\n}\n.col-xs-pull-6 {\n  right: 50%;\n}\n.col-xs-pull-5 {\n  right: 41.66666667%;\n}\n.col-xs-pull-4 {\n  right: 33.33333333%;\n}\n.col-xs-pull-3 {\n  right: 25%;\n}\n.col-xs-pull-2 {\n  right: 16.66666667%;\n}\n.col-xs-pull-1 {\n  right: 8.33333333%;\n}\n.col-xs-pull-0 {\n  right: auto;\n}\n.col-xs-push-12 {\n  left: 100%;\n}\n.col-xs-push-11 {\n  left: 91.66666667%;\n}\n.col-xs-push-10 {\n  left: 83.33333333%;\n}\n.col-xs-push-9 {\n  left: 75%;\n}\n.col-xs-push-8 {\n  left: 66.66666667%;\n}\n.col-xs-push-7 {\n  left: 58.33333333%;\n}\n.col-xs-push-6 {\n  left: 50%;\n}\n.col-xs-push-5 {\n  left: 41.66666667%;\n}\n.col-xs-push-4 {\n  left: 33.33333333%;\n}\n.col-xs-push-3 {\n  left: 25%;\n}\n.col-xs-push-2 {\n  left: 16.66666667%;\n}\n.col-xs-push-1 {\n  left: 8.33333333%;\n}\n.col-xs-push-0 {\n  left: auto;\n}\n.col-xs-offset-12 {\n  margin-left: 100%;\n}\n.col-xs-offset-11 {\n  margin-left: 91.66666667%;\n}\n.col-xs-offset-10 {\n  margin-left: 83.33333333%;\n}\n.col-xs-offset-9 {\n  margin-left: 75%;\n}\n.col-xs-offset-8 {\n  margin-left: 66.66666667%;\n}\n.col-xs-offset-7 {\n  margin-left: 58.33333333%;\n}\n.col-xs-offset-6 {\n  margin-left: 50%;\n}\n.col-xs-offset-5 {\n  margin-left: 41.66666667%;\n}\n.col-xs-offset-4 {\n  margin-left: 33.33333333%;\n}\n.col-xs-offset-3 {\n  margin-left: 25%;\n}\n.col-xs-offset-2 {\n  margin-left: 16.66666667%;\n}\n.col-xs-offset-1 {\n  margin-left: 8.33333333%;\n}\n.col-xs-offset-0 {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .col-sm-1, .col-sm-2, .col-sm-3, .col-sm-4, .col-sm-5, .col-sm-6, .col-sm-7, .col-sm-8, .col-sm-9, .col-sm-10, .col-sm-11, .col-sm-12 {\n    float: left;\n  }\n  .col-sm-12 {\n    width: 100%;\n  }\n  .col-sm-11 {\n    width: 91.66666667%;\n  }\n  .col-sm-10 {\n    width: 83.33333333%;\n  }\n  .col-sm-9 {\n    width: 75%;\n  }\n  .col-sm-8 {\n    width: 66.66666667%;\n  }\n  .col-sm-7 {\n    width: 58.33333333%;\n  }\n  .col-sm-6 {\n    width: 50%;\n  }\n  .col-sm-5 {\n    width: 41.66666667%;\n  }\n  .col-sm-4 {\n    width: 33.33333333%;\n  }\n  .col-sm-3 {\n    width: 25%;\n  }\n  .col-sm-2 {\n    width: 16.66666667%;\n  }\n  .col-sm-1 {\n    width: 8.33333333%;\n  }\n  .col-sm-pull-12 {\n    right: 100%;\n  }\n  .col-sm-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-sm-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-sm-pull-9 {\n    right: 75%;\n  }\n  .col-sm-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-sm-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-sm-pull-6 {\n    right: 50%;\n  }\n  .col-sm-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-sm-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-sm-pull-3 {\n    right: 25%;\n  }\n  .col-sm-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-sm-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-sm-pull-0 {\n    right: auto;\n  }\n  .col-sm-push-12 {\n    left: 100%;\n  }\n  .col-sm-push-11 {\n    left: 91.66666667%;\n  }\n  .col-sm-push-10 {\n    left: 83.33333333%;\n  }\n  .col-sm-push-9 {\n    left: 75%;\n  }\n  .col-sm-push-8 {\n    left: 66.66666667%;\n  }\n  .col-sm-push-7 {\n    left: 58.33333333%;\n  }\n  .col-sm-push-6 {\n    left: 50%;\n  }\n  .col-sm-push-5 {\n    left: 41.66666667%;\n  }\n  .col-sm-push-4 {\n    left: 33.33333333%;\n  }\n  .col-sm-push-3 {\n    left: 25%;\n  }\n  .col-sm-push-2 {\n    left: 16.66666667%;\n  }\n  .col-sm-push-1 {\n    left: 8.33333333%;\n  }\n  .col-sm-push-0 {\n    left: auto;\n  }\n  .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .col-sm-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-sm-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .col-sm-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-sm-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .col-sm-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-sm-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .col-sm-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-sm-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-sm-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 992px) {\n  .col-md-1, .col-md-2, .col-md-3, .col-md-4, .col-md-5, .col-md-6, .col-md-7, .col-md-8, .col-md-9, .col-md-10, .col-md-11, .col-md-12 {\n    float: left;\n  }\n  .col-md-12 {\n    width: 100%;\n  }\n  .col-md-11 {\n    width: 91.66666667%;\n  }\n  .col-md-10 {\n    width: 83.33333333%;\n  }\n  .col-md-9 {\n    width: 75%;\n  }\n  .col-md-8 {\n    width: 66.66666667%;\n  }\n  .col-md-7 {\n    width: 58.33333333%;\n  }\n  .col-md-6 {\n    width: 50%;\n  }\n  .col-md-5 {\n    width: 41.66666667%;\n  }\n  .col-md-4 {\n    width: 33.33333333%;\n  }\n  .col-md-3 {\n    width: 25%;\n  }\n  .col-md-2 {\n    width: 16.66666667%;\n  }\n  .col-md-1 {\n    width: 8.33333333%;\n  }\n  .col-md-pull-12 {\n    right: 100%;\n  }\n  .col-md-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-md-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-md-pull-9 {\n    right: 75%;\n  }\n  .col-md-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-md-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-md-pull-6 {\n    right: 50%;\n  }\n  .col-md-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-md-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-md-pull-3 {\n    right: 25%;\n  }\n  .col-md-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-md-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-md-pull-0 {\n    right: auto;\n  }\n  .col-md-push-12 {\n    left: 100%;\n  }\n  .col-md-push-11 {\n    left: 91.66666667%;\n  }\n  .col-md-push-10 {\n    left: 83.33333333%;\n  }\n  .col-md-push-9 {\n    left: 75%;\n  }\n  .col-md-push-8 {\n    left: 66.66666667%;\n  }\n  .col-md-push-7 {\n    left: 58.33333333%;\n  }\n  .col-md-push-6 {\n    left: 50%;\n  }\n  .col-md-push-5 {\n    left: 41.66666667%;\n  }\n  .col-md-push-4 {\n    left: 33.33333333%;\n  }\n  .col-md-push-3 {\n    left: 25%;\n  }\n  .col-md-push-2 {\n    left: 16.66666667%;\n  }\n  .col-md-push-1 {\n    left: 8.33333333%;\n  }\n  .col-md-push-0 {\n    left: auto;\n  }\n  .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .col-md-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-md-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .col-md-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-md-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .col-md-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-md-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .col-md-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-md-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-md-offset-0 {\n    margin-left: 0;\n  }\n}\n@media (min-width: 1200px) {\n  .col-lg-1, .col-lg-2, .col-lg-3, .col-lg-4, .col-lg-5, .col-lg-6, .col-lg-7, .col-lg-8, .col-lg-9, .col-lg-10, .col-lg-11, .col-lg-12 {\n    float: left;\n  }\n  .col-lg-12 {\n    width: 100%;\n  }\n  .col-lg-11 {\n    width: 91.66666667%;\n  }\n  .col-lg-10 {\n    width: 83.33333333%;\n  }\n  .col-lg-9 {\n    width: 75%;\n  }\n  .col-lg-8 {\n    width: 66.66666667%;\n  }\n  .col-lg-7 {\n    width: 58.33333333%;\n  }\n  .col-lg-6 {\n    width: 50%;\n  }\n  .col-lg-5 {\n    width: 41.66666667%;\n  }\n  .col-lg-4 {\n    width: 33.33333333%;\n  }\n  .col-lg-3 {\n    width: 25%;\n  }\n  .col-lg-2 {\n    width: 16.66666667%;\n  }\n  .col-lg-1 {\n    width: 8.33333333%;\n  }\n  .col-lg-pull-12 {\n    right: 100%;\n  }\n  .col-lg-pull-11 {\n    right: 91.66666667%;\n  }\n  .col-lg-pull-10 {\n    right: 83.33333333%;\n  }\n  .col-lg-pull-9 {\n    right: 75%;\n  }\n  .col-lg-pull-8 {\n    right: 66.66666667%;\n  }\n  .col-lg-pull-7 {\n    right: 58.33333333%;\n  }\n  .col-lg-pull-6 {\n    right: 50%;\n  }\n  .col-lg-pull-5 {\n    right: 41.66666667%;\n  }\n  .col-lg-pull-4 {\n    right: 33.33333333%;\n  }\n  .col-lg-pull-3 {\n    right: 25%;\n  }\n  .col-lg-pull-2 {\n    right: 16.66666667%;\n  }\n  .col-lg-pull-1 {\n    right: 8.33333333%;\n  }\n  .col-lg-pull-0 {\n    right: auto;\n  }\n  .col-lg-push-12 {\n    left: 100%;\n  }\n  .col-lg-push-11 {\n    left: 91.66666667%;\n  }\n  .col-lg-push-10 {\n    left: 83.33333333%;\n  }\n  .col-lg-push-9 {\n    left: 75%;\n  }\n  .col-lg-push-8 {\n    left: 66.66666667%;\n  }\n  .col-lg-push-7 {\n    left: 58.33333333%;\n  }\n  .col-lg-push-6 {\n    left: 50%;\n  }\n  .col-lg-push-5 {\n    left: 41.66666667%;\n  }\n  .col-lg-push-4 {\n    left: 33.33333333%;\n  }\n  .col-lg-push-3 {\n    left: 25%;\n  }\n  .col-lg-push-2 {\n    left: 16.66666667%;\n  }\n  .col-lg-push-1 {\n    left: 8.33333333%;\n  }\n  .col-lg-push-0 {\n    left: auto;\n  }\n  .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .col-lg-offset-11 {\n    margin-left: 91.66666667%;\n  }\n  .col-lg-offset-10 {\n    margin-left: 83.33333333%;\n  }\n  .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .col-lg-offset-8 {\n    margin-left: 66.66666667%;\n  }\n  .col-lg-offset-7 {\n    margin-left: 58.33333333%;\n  }\n  .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .col-lg-offset-5 {\n    margin-left: 41.66666667%;\n  }\n  .col-lg-offset-4 {\n    margin-left: 33.33333333%;\n  }\n  .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .col-lg-offset-2 {\n    margin-left: 16.66666667%;\n  }\n  .col-lg-offset-1 {\n    margin-left: 8.33333333%;\n  }\n  .col-lg-offset-0 {\n    margin-left: 0;\n  }\n}\ntable {\n  background-color: transparent;\n}\ncaption {\n  padding-top: 8px;\n  padding-bottom: 8px;\n  color: #777;\n  text-align: left;\n}\nth {\n  text-align: left;\n}\n.table {\n  width: 100%;\n  max-width: 100%;\n  margin-bottom: 20px;\n}\n.table > thead > tr > th,\n.table > tbody > tr > th,\n.table > tfoot > tr > th,\n.table > thead > tr > td,\n.table > tbody > tr > td,\n.table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.42857143;\n  vertical-align: top;\n  border-top: 1px solid #ddd;\n}\n.table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #ddd;\n}\n.table > caption + thead > tr:first-child > th,\n.table > colgroup + thead > tr:first-child > th,\n.table > thead:first-child > tr:first-child > th,\n.table > caption + thead > tr:first-child > td,\n.table > colgroup + thead > tr:first-child > td,\n.table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.table > tbody + tbody {\n  border-top: 2px solid #ddd;\n}\n.table .table {\n  background-color: #fff;\n}\n.table-condensed > thead > tr > th,\n.table-condensed > tbody > tr > th,\n.table-condensed > tfoot > tr > th,\n.table-condensed > thead > tr > td,\n.table-condensed > tbody > tr > td,\n.table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.table-bordered {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > tbody > tr > th,\n.table-bordered > tfoot > tr > th,\n.table-bordered > thead > tr > td,\n.table-bordered > tbody > tr > td,\n.table-bordered > tfoot > tr > td {\n  border: 1px solid #ddd;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table-striped > tbody > tr:nth-of-type(odd) {\n  background-color: #f9f9f9;\n}\n.table-hover > tbody > tr:hover {\n  background-color: #f5f5f5;\n}\ntable col[class*=\"col-\"] {\n  position: static;\n  display: table-column;\n  float: none;\n}\ntable td[class*=\"col-\"],\ntable th[class*=\"col-\"] {\n  position: static;\n  display: table-cell;\n  float: none;\n}\n.table > thead > tr > td.active,\n.table > tbody > tr > td.active,\n.table > tfoot > tr > td.active,\n.table > thead > tr > th.active,\n.table > tbody > tr > th.active,\n.table > tfoot > tr > th.active,\n.table > thead > tr.active > td,\n.table > tbody > tr.active > td,\n.table > tfoot > tr.active > td,\n.table > thead > tr.active > th,\n.table > tbody > tr.active > th,\n.table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.table-hover > tbody > tr > td.active:hover,\n.table-hover > tbody > tr > th.active:hover,\n.table-hover > tbody > tr.active:hover > td,\n.table-hover > tbody > tr:hover > .active,\n.table-hover > tbody > tr.active:hover > th {\n  background-color: #e8e8e8;\n}\n.table > thead > tr > td.success,\n.table > tbody > tr > td.success,\n.table > tfoot > tr > td.success,\n.table > thead > tr > th.success,\n.table > tbody > tr > th.success,\n.table > tfoot > tr > th.success,\n.table > thead > tr.success > td,\n.table > tbody > tr.success > td,\n.table > tfoot > tr.success > td,\n.table > thead > tr.success > th,\n.table > tbody > tr.success > th,\n.table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n}\n.table-hover > tbody > tr > td.success:hover,\n.table-hover > tbody > tr > th.success:hover,\n.table-hover > tbody > tr.success:hover > td,\n.table-hover > tbody > tr:hover > .success,\n.table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n}\n.table > thead > tr > td.info,\n.table > tbody > tr > td.info,\n.table > tfoot > tr > td.info,\n.table > thead > tr > th.info,\n.table > tbody > tr > th.info,\n.table > tfoot > tr > th.info,\n.table > thead > tr.info > td,\n.table > tbody > tr.info > td,\n.table > tfoot > tr.info > td,\n.table > thead > tr.info > th,\n.table > tbody > tr.info > th,\n.table > tfoot > tr.info > th {\n  background-color: #d9edf7;\n}\n.table-hover > tbody > tr > td.info:hover,\n.table-hover > tbody > tr > th.info:hover,\n.table-hover > tbody > tr.info:hover > td,\n.table-hover > tbody > tr:hover > .info,\n.table-hover > tbody > tr.info:hover > th {\n  background-color: #c4e3f3;\n}\n.table > thead > tr > td.warning,\n.table > tbody > tr > td.warning,\n.table > tfoot > tr > td.warning,\n.table > thead > tr > th.warning,\n.table > tbody > tr > th.warning,\n.table > tfoot > tr > th.warning,\n.table > thead > tr.warning > td,\n.table > tbody > tr.warning > td,\n.table > tfoot > tr.warning > td,\n.table > thead > tr.warning > th,\n.table > tbody > tr.warning > th,\n.table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n}\n.table-hover > tbody > tr > td.warning:hover,\n.table-hover > tbody > tr > th.warning:hover,\n.table-hover > tbody > tr.warning:hover > td,\n.table-hover > tbody > tr:hover > .warning,\n.table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n}\n.table > thead > tr > td.danger,\n.table > tbody > tr > td.danger,\n.table > tfoot > tr > td.danger,\n.table > thead > tr > th.danger,\n.table > tbody > tr > th.danger,\n.table > tfoot > tr > th.danger,\n.table > thead > tr.danger > td,\n.table > tbody > tr.danger > td,\n.table > tfoot > tr.danger > td,\n.table > thead > tr.danger > th,\n.table > tbody > tr.danger > th,\n.table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n}\n.table-hover > tbody > tr > td.danger:hover,\n.table-hover > tbody > tr > th.danger:hover,\n.table-hover > tbody > tr.danger:hover > td,\n.table-hover > tbody > tr:hover > .danger,\n.table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n}\n.table-responsive {\n  min-height: .01%;\n  overflow-x: auto;\n}\n@media screen and (max-width: 767px) {\n  .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\n    overflow-y: hidden;\n    -ms-overflow-style: -ms-autohiding-scrollbar;\n    border: 1px solid #ddd;\n  }\n  .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .table-responsive > .table > thead > tr > th,\n  .table-responsive > .table > tbody > tr > th,\n  .table-responsive > .table > tfoot > tr > th,\n  .table-responsive > .table > thead > tr > td,\n  .table-responsive > .table > tbody > tr > td,\n  .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\nfieldset {\n  min-width: 0;\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\nlegend {\n  display: block;\n  width: 100%;\n  padding: 0;\n  margin-bottom: 20px;\n  font-size: 21px;\n  line-height: inherit;\n  color: #333;\n  border: 0;\n  border-bottom: 1px solid #e5e5e5;\n}\nlabel {\n  display: inline-block;\n  max-width: 100%;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\ninput[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n     -moz-box-sizing: border-box;\n          box-sizing: border-box;\n}\ninput[type=\"radio\"],\ninput[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  line-height: normal;\n}\ninput[type=\"file\"] {\n  display: block;\n}\ninput[type=\"range\"] {\n  display: block;\n  width: 100%;\n}\nselect[multiple],\nselect[size] {\n  height: auto;\n}\ninput[type=\"file\"]:focus,\ninput[type=\"radio\"]:focus,\ninput[type=\"checkbox\"]:focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\noutput {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n}\n.form-control {\n  display: block;\n  width: 100%;\n  height: 34px;\n  padding: 6px 12px;\n  font-size: 14px;\n  line-height: 1.42857143;\n  color: #555;\n  background-color: #fff;\n  background-image: none;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n  -webkit-transition: border-color ease-in-out .15s, -webkit-box-shadow ease-in-out .15s;\n       -o-transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n          transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.form-control:focus {\n  border-color: #66afe9;\n  outline: 0;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n          box-shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px rgba(102, 175, 233, .6);\n}\n.form-control::-moz-placeholder {\n  color: #999;\n  opacity: 1;\n}\n.form-control:-ms-input-placeholder {\n  color: #999;\n}\n.form-control::-webkit-input-placeholder {\n  color: #999;\n}\n.form-control::-ms-expand {\n  background-color: transparent;\n  border: 0;\n}\n.form-control[disabled],\n.form-control[readonly],\nfieldset[disabled] .form-control {\n  background-color: #eee;\n  opacity: 1;\n}\n.form-control[disabled],\nfieldset[disabled] .form-control {\n  cursor: not-allowed;\n}\ntextarea.form-control {\n  height: auto;\n}\ninput[type=\"search\"] {\n  -webkit-appearance: none;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  input[type=\"date\"].form-control,\n  input[type=\"time\"].form-control,\n  input[type=\"datetime-local\"].form-control,\n  input[type=\"month\"].form-control {\n    line-height: 34px;\n  }\n  input[type=\"date\"].input-sm,\n  input[type=\"time\"].input-sm,\n  input[type=\"datetime-local\"].input-sm,\n  input[type=\"month\"].input-sm,\n  .input-group-sm input[type=\"date\"],\n  .input-group-sm input[type=\"time\"],\n  .input-group-sm input[type=\"datetime-local\"],\n  .input-group-sm input[type=\"month\"] {\n    line-height: 30px;\n  }\n  input[type=\"date\"].input-lg,\n  input[type=\"time\"].input-lg,\n  input[type=\"datetime-local\"].input-lg,\n  input[type=\"month\"].input-lg,\n  .input-group-lg input[type=\"date\"],\n  .input-group-lg input[type=\"time\"],\n  .input-group-lg input[type=\"datetime-local\"],\n  .input-group-lg input[type=\"month\"] {\n    line-height: 46px;\n  }\n}\n.form-group {\n  margin-bottom: 15px;\n}\n.radio,\n.checkbox {\n  position: relative;\n  display: block;\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.radio label,\n.checkbox label {\n  min-height: 20px;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.radio input[type=\"radio\"],\n.radio-inline input[type=\"radio\"],\n.checkbox input[type=\"checkbox\"],\n.checkbox-inline input[type=\"checkbox\"] {\n  position: absolute;\n  margin-top: 4px \\9;\n  margin-left: -20px;\n}\n.radio + .radio,\n.checkbox + .checkbox {\n  margin-top: -5px;\n}\n.radio-inline,\n.checkbox-inline {\n  position: relative;\n  display: inline-block;\n  padding-left: 20px;\n  margin-bottom: 0;\n  font-weight: normal;\n  vertical-align: middle;\n  cursor: pointer;\n}\n.radio-inline + .radio-inline,\n.checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\ninput[type=\"radio\"][disabled],\ninput[type=\"checkbox\"][disabled],\ninput[type=\"radio\"].disabled,\ninput[type=\"checkbox\"].disabled,\nfieldset[disabled] input[type=\"radio\"],\nfieldset[disabled] input[type=\"checkbox\"] {\n  cursor: not-allowed;\n}\n.radio-inline.disabled,\n.checkbox-inline.disabled,\nfieldset[disabled] .radio-inline,\nfieldset[disabled] .checkbox-inline {\n  cursor: not-allowed;\n}\n.radio.disabled label,\n.checkbox.disabled label,\nfieldset[disabled] .radio label,\nfieldset[disabled] .checkbox label {\n  cursor: not-allowed;\n}\n.form-control-static {\n  min-height: 34px;\n  padding-top: 7px;\n  padding-bottom: 7px;\n  margin-bottom: 0;\n}\n.form-control-static.input-lg,\n.form-control-static.input-sm {\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-sm,\nselect[multiple].input-sm {\n  height: auto;\n}\n.form-group-sm .form-control {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.form-group-sm select.form-control {\n  height: 30px;\n  line-height: 30px;\n}\n.form-group-sm textarea.form-control,\n.form-group-sm select[multiple].form-control {\n  height: auto;\n}\n.form-group-sm .form-control-static {\n  height: 30px;\n  min-height: 32px;\n  padding: 6px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.input-lg {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-lg {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-lg,\nselect[multiple].input-lg {\n  height: auto;\n}\n.form-group-lg .form-control {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.form-group-lg select.form-control {\n  height: 46px;\n  line-height: 46px;\n}\n.form-group-lg textarea.form-control,\n.form-group-lg select[multiple].form-control {\n  height: auto;\n}\n.form-group-lg .form-control-static {\n  height: 46px;\n  min-height: 38px;\n  padding: 11px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.has-feedback {\n  position: relative;\n}\n.has-feedback .form-control {\n  padding-right: 42.5px;\n}\n.form-control-feedback {\n  position: absolute;\n  top: 0;\n  right: 0;\n  z-index: 2;\n  display: block;\n  width: 34px;\n  height: 34px;\n  line-height: 34px;\n  text-align: center;\n  pointer-events: none;\n}\n.input-lg + .form-control-feedback,\n.input-group-lg + .form-control-feedback,\n.form-group-lg .form-control + .form-control-feedback {\n  width: 46px;\n  height: 46px;\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback,\n.input-group-sm + .form-control-feedback,\n.form-group-sm .form-control + .form-control-feedback {\n  width: 30px;\n  height: 30px;\n  line-height: 30px;\n}\n.has-success .help-block,\n.has-success .control-label,\n.has-success .radio,\n.has-success .checkbox,\n.has-success .radio-inline,\n.has-success .checkbox-inline,\n.has-success.radio label,\n.has-success.checkbox label,\n.has-success.radio-inline label,\n.has-success.checkbox-inline label {\n  color: #3c763d;\n}\n.has-success .form-control {\n  border-color: #3c763d;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-success .form-control:focus {\n  border-color: #2b542c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #67b168;\n}\n.has-success .input-group-addon {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #3c763d;\n}\n.has-success .form-control-feedback {\n  color: #3c763d;\n}\n.has-warning .help-block,\n.has-warning .control-label,\n.has-warning .radio,\n.has-warning .checkbox,\n.has-warning .radio-inline,\n.has-warning .checkbox-inline,\n.has-warning.radio label,\n.has-warning.checkbox label,\n.has-warning.radio-inline label,\n.has-warning.checkbox-inline label {\n  color: #8a6d3b;\n}\n.has-warning .form-control {\n  border-color: #8a6d3b;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-warning .form-control:focus {\n  border-color: #66512c;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #c0a16b;\n}\n.has-warning .input-group-addon {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #8a6d3b;\n}\n.has-warning .form-control-feedback {\n  color: #8a6d3b;\n}\n.has-error .help-block,\n.has-error .control-label,\n.has-error .radio,\n.has-error .checkbox,\n.has-error .radio-inline,\n.has-error .checkbox-inline,\n.has-error.radio label,\n.has-error.checkbox label,\n.has-error.radio-inline label,\n.has-error.checkbox-inline label {\n  color: #a94442;\n}\n.has-error .form-control {\n  border-color: #a94442;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075);\n}\n.has-error .form-control:focus {\n  border-color: #843534;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 6px #ce8483;\n}\n.has-error .input-group-addon {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #a94442;\n}\n.has-error .form-control-feedback {\n  color: #a94442;\n}\n.has-feedback label ~ .form-control-feedback {\n  top: 25px;\n}\n.has-feedback label.sr-only ~ .form-control-feedback {\n  top: 0;\n}\n.help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .form-inline .form-control-static {\n    display: inline-block;\n  }\n  .form-inline .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .form-inline .input-group .input-group-addon,\n  .form-inline .input-group .input-group-btn,\n  .form-inline .input-group .form-control {\n    width: auto;\n  }\n  .form-inline .input-group > .form-control {\n    width: 100%;\n  }\n  .form-inline .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio,\n  .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .form-inline .radio label,\n  .form-inline .checkbox label {\n    padding-left: 0;\n  }\n  .form-inline .radio input[type=\"radio\"],\n  .form-inline .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .form-inline .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox,\n.form-horizontal .radio-inline,\n.form-horizontal .checkbox-inline {\n  padding-top: 7px;\n  margin-top: 0;\n  margin-bottom: 0;\n}\n.form-horizontal .radio,\n.form-horizontal .checkbox {\n  min-height: 27px;\n}\n.form-horizontal .form-group {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .control-label {\n    padding-top: 7px;\n    margin-bottom: 0;\n    text-align: right;\n  }\n}\n.form-horizontal .has-feedback .form-control-feedback {\n  right: 15px;\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-lg .control-label {\n    padding-top: 11px;\n    font-size: 18px;\n  }\n}\n@media (min-width: 768px) {\n  .form-horizontal .form-group-sm .control-label {\n    padding-top: 6px;\n    font-size: 12px;\n  }\n}\n.btn {\n  display: inline-block;\n  padding: 6px 12px;\n  margin-bottom: 0;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  -ms-touch-action: manipulation;\n      touch-action: manipulation;\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.btn:focus,\n.btn:active:focus,\n.btn.active:focus,\n.btn.focus,\n.btn:active.focus,\n.btn.active.focus {\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.btn:hover,\n.btn:focus,\n.btn.focus {\n  color: #333;\n  text-decoration: none;\n}\n.btn:active,\n.btn.active {\n  background-image: none;\n  outline: 0;\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn.disabled,\n.btn[disabled],\nfieldset[disabled] .btn {\n  cursor: not-allowed;\n  filter: alpha(opacity=65);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  opacity: .65;\n}\na.btn.disabled,\nfieldset[disabled] a.btn {\n  pointer-events: none;\n}\n.btn-default {\n  color: #333;\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default:focus,\n.btn-default.focus {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #8c8c8c;\n}\n.btn-default:hover {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  color: #333;\n  background-color: #e6e6e6;\n  border-color: #adadad;\n}\n.btn-default:active:hover,\n.btn-default.active:hover,\n.open > .dropdown-toggle.btn-default:hover,\n.btn-default:active:focus,\n.btn-default.active:focus,\n.open > .dropdown-toggle.btn-default:focus,\n.btn-default:active.focus,\n.btn-default.active.focus,\n.open > .dropdown-toggle.btn-default.focus {\n  color: #333;\n  background-color: #d4d4d4;\n  border-color: #8c8c8c;\n}\n.btn-default:active,\n.btn-default.active,\n.open > .dropdown-toggle.btn-default {\n  background-image: none;\n}\n.btn-default.disabled:hover,\n.btn-default[disabled]:hover,\nfieldset[disabled] .btn-default:hover,\n.btn-default.disabled:focus,\n.btn-default[disabled]:focus,\nfieldset[disabled] .btn-default:focus,\n.btn-default.disabled.focus,\n.btn-default[disabled].focus,\nfieldset[disabled] .btn-default.focus {\n  background-color: #fff;\n  border-color: #ccc;\n}\n.btn-default .badge {\n  color: #fff;\n  background-color: #333;\n}\n.btn-primary {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary:focus,\n.btn-primary.focus {\n  color: #fff;\n  background-color: #286090;\n  border-color: #122b40;\n}\n.btn-primary:hover {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  color: #fff;\n  background-color: #286090;\n  border-color: #204d74;\n}\n.btn-primary:active:hover,\n.btn-primary.active:hover,\n.open > .dropdown-toggle.btn-primary:hover,\n.btn-primary:active:focus,\n.btn-primary.active:focus,\n.open > .dropdown-toggle.btn-primary:focus,\n.btn-primary:active.focus,\n.btn-primary.active.focus,\n.open > .dropdown-toggle.btn-primary.focus {\n  color: #fff;\n  background-color: #204d74;\n  border-color: #122b40;\n}\n.btn-primary:active,\n.btn-primary.active,\n.open > .dropdown-toggle.btn-primary {\n  background-image: none;\n}\n.btn-primary.disabled:hover,\n.btn-primary[disabled]:hover,\nfieldset[disabled] .btn-primary:hover,\n.btn-primary.disabled:focus,\n.btn-primary[disabled]:focus,\nfieldset[disabled] .btn-primary:focus,\n.btn-primary.disabled.focus,\n.btn-primary[disabled].focus,\nfieldset[disabled] .btn-primary.focus {\n  background-color: #337ab7;\n  border-color: #2e6da4;\n}\n.btn-primary .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.btn-success {\n  color: #fff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success:focus,\n.btn-success.focus {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #255625;\n}\n.btn-success:hover {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  color: #fff;\n  background-color: #449d44;\n  border-color: #398439;\n}\n.btn-success:active:hover,\n.btn-success.active:hover,\n.open > .dropdown-toggle.btn-success:hover,\n.btn-success:active:focus,\n.btn-success.active:focus,\n.open > .dropdown-toggle.btn-success:focus,\n.btn-success:active.focus,\n.btn-success.active.focus,\n.open > .dropdown-toggle.btn-success.focus {\n  color: #fff;\n  background-color: #398439;\n  border-color: #255625;\n}\n.btn-success:active,\n.btn-success.active,\n.open > .dropdown-toggle.btn-success {\n  background-image: none;\n}\n.btn-success.disabled:hover,\n.btn-success[disabled]:hover,\nfieldset[disabled] .btn-success:hover,\n.btn-success.disabled:focus,\n.btn-success[disabled]:focus,\nfieldset[disabled] .btn-success:focus,\n.btn-success.disabled.focus,\n.btn-success[disabled].focus,\nfieldset[disabled] .btn-success.focus {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.btn-success .badge {\n  color: #5cb85c;\n  background-color: #fff;\n}\n.btn-info {\n  color: #fff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info:focus,\n.btn-info.focus {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #1b6d85;\n}\n.btn-info:hover {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  color: #fff;\n  background-color: #31b0d5;\n  border-color: #269abc;\n}\n.btn-info:active:hover,\n.btn-info.active:hover,\n.open > .dropdown-toggle.btn-info:hover,\n.btn-info:active:focus,\n.btn-info.active:focus,\n.open > .dropdown-toggle.btn-info:focus,\n.btn-info:active.focus,\n.btn-info.active.focus,\n.open > .dropdown-toggle.btn-info.focus {\n  color: #fff;\n  background-color: #269abc;\n  border-color: #1b6d85;\n}\n.btn-info:active,\n.btn-info.active,\n.open > .dropdown-toggle.btn-info {\n  background-image: none;\n}\n.btn-info.disabled:hover,\n.btn-info[disabled]:hover,\nfieldset[disabled] .btn-info:hover,\n.btn-info.disabled:focus,\n.btn-info[disabled]:focus,\nfieldset[disabled] .btn-info:focus,\n.btn-info.disabled.focus,\n.btn-info[disabled].focus,\nfieldset[disabled] .btn-info.focus {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.btn-info .badge {\n  color: #5bc0de;\n  background-color: #fff;\n}\n.btn-warning {\n  color: #fff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning:focus,\n.btn-warning.focus {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #985f0d;\n}\n.btn-warning:hover {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  color: #fff;\n  background-color: #ec971f;\n  border-color: #d58512;\n}\n.btn-warning:active:hover,\n.btn-warning.active:hover,\n.open > .dropdown-toggle.btn-warning:hover,\n.btn-warning:active:focus,\n.btn-warning.active:focus,\n.open > .dropdown-toggle.btn-warning:focus,\n.btn-warning:active.focus,\n.btn-warning.active.focus,\n.open > .dropdown-toggle.btn-warning.focus {\n  color: #fff;\n  background-color: #d58512;\n  border-color: #985f0d;\n}\n.btn-warning:active,\n.btn-warning.active,\n.open > .dropdown-toggle.btn-warning {\n  background-image: none;\n}\n.btn-warning.disabled:hover,\n.btn-warning[disabled]:hover,\nfieldset[disabled] .btn-warning:hover,\n.btn-warning.disabled:focus,\n.btn-warning[disabled]:focus,\nfieldset[disabled] .btn-warning:focus,\n.btn-warning.disabled.focus,\n.btn-warning[disabled].focus,\nfieldset[disabled] .btn-warning.focus {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.btn-warning .badge {\n  color: #f0ad4e;\n  background-color: #fff;\n}\n.btn-danger {\n  color: #fff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger:focus,\n.btn-danger.focus {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #761c19;\n}\n.btn-danger:hover {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  color: #fff;\n  background-color: #c9302c;\n  border-color: #ac2925;\n}\n.btn-danger:active:hover,\n.btn-danger.active:hover,\n.open > .dropdown-toggle.btn-danger:hover,\n.btn-danger:active:focus,\n.btn-danger.active:focus,\n.open > .dropdown-toggle.btn-danger:focus,\n.btn-danger:active.focus,\n.btn-danger.active.focus,\n.open > .dropdown-toggle.btn-danger.focus {\n  color: #fff;\n  background-color: #ac2925;\n  border-color: #761c19;\n}\n.btn-danger:active,\n.btn-danger.active,\n.open > .dropdown-toggle.btn-danger {\n  background-image: none;\n}\n.btn-danger.disabled:hover,\n.btn-danger[disabled]:hover,\nfieldset[disabled] .btn-danger:hover,\n.btn-danger.disabled:focus,\n.btn-danger[disabled]:focus,\nfieldset[disabled] .btn-danger:focus,\n.btn-danger.disabled.focus,\n.btn-danger[disabled].focus,\nfieldset[disabled] .btn-danger.focus {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.btn-danger .badge {\n  color: #d9534f;\n  background-color: #fff;\n}\n.btn-link {\n  font-weight: normal;\n  color: #337ab7;\n  border-radius: 0;\n}\n.btn-link,\n.btn-link:active,\n.btn-link.active,\n.btn-link[disabled],\nfieldset[disabled] .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn-link,\n.btn-link:hover,\n.btn-link:focus,\n.btn-link:active {\n  border-color: transparent;\n}\n.btn-link:hover,\n.btn-link:focus {\n  color: #23527c;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.btn-link[disabled]:hover,\nfieldset[disabled] .btn-link:hover,\n.btn-link[disabled]:focus,\nfieldset[disabled] .btn-link:focus {\n  color: #777;\n  text-decoration: none;\n}\n.btn-lg,\n.btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\n.btn-sm,\n.btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-xs,\n.btn-group-xs > .btn {\n  padding: 1px 5px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.btn-block {\n  display: block;\n  width: 100%;\n}\n.btn-block + .btn-block {\n  margin-top: 5px;\n}\ninput[type=\"submit\"].btn-block,\ninput[type=\"reset\"].btn-block,\ninput[type=\"button\"].btn-block {\n  width: 100%;\n}\n.fade {\n  opacity: 0;\n  -webkit-transition: opacity .15s linear;\n       -o-transition: opacity .15s linear;\n          transition: opacity .15s linear;\n}\n.fade.in {\n  opacity: 1;\n}\n.collapse {\n  display: none;\n}\n.collapse.in {\n  display: block;\n}\ntr.collapse.in {\n  display: table-row;\n}\ntbody.collapse.in {\n  display: table-row-group;\n}\n.collapsing {\n  position: relative;\n  height: 0;\n  overflow: hidden;\n  -webkit-transition-timing-function: ease;\n       -o-transition-timing-function: ease;\n          transition-timing-function: ease;\n  -webkit-transition-duration: .35s;\n       -o-transition-duration: .35s;\n          transition-duration: .35s;\n  -webkit-transition-property: height, visibility;\n       -o-transition-property: height, visibility;\n          transition-property: height, visibility;\n}\n.caret {\n  display: inline-block;\n  width: 0;\n  height: 0;\n  margin-left: 2px;\n  vertical-align: middle;\n  border-top: 4px dashed;\n  border-top: 4px solid \\9;\n  border-right: 4px solid transparent;\n  border-left: 4px solid transparent;\n}\n.dropup,\n.dropdown {\n  position: relative;\n}\n.dropdown-toggle:focus {\n  outline: 0;\n}\n.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  font-size: 14px;\n  text-align: left;\n  list-style: none;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .15);\n  border-radius: 4px;\n  -webkit-box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n          box-shadow: 0 6px 12px rgba(0, 0, 0, .175);\n}\n.dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.dropdown-menu > li > a {\n  display: block;\n  padding: 3px 20px;\n  clear: both;\n  font-weight: normal;\n  line-height: 1.42857143;\n  color: #333;\n  white-space: nowrap;\n}\n.dropdown-menu > li > a:hover,\n.dropdown-menu > li > a:focus {\n  color: #262626;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.dropdown-menu > .active > a,\n.dropdown-menu > .active > a:hover,\n.dropdown-menu > .active > a:focus {\n  color: #fff;\n  text-decoration: none;\n  background-color: #337ab7;\n  outline: 0;\n}\n.dropdown-menu > .disabled > a,\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  color: #777;\n}\n.dropdown-menu > .disabled > a:hover,\n.dropdown-menu > .disabled > a:focus {\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n  background-image: none;\n  filter: progid:DXImageTransform.Microsoft.gradient(enabled = false);\n}\n.open > .dropdown-menu {\n  display: block;\n}\n.open > a {\n  outline: 0;\n}\n.dropdown-menu-right {\n  right: 0;\n  left: auto;\n}\n.dropdown-menu-left {\n  right: auto;\n  left: 0;\n}\n.dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.42857143;\n  color: #777;\n  white-space: nowrap;\n}\n.dropdown-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 990;\n}\n.pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.dropup .caret,\n.navbar-fixed-bottom .dropdown .caret {\n  content: \"\";\n  border-top: 0;\n  border-bottom: 4px dashed;\n  border-bottom: 4px solid \\9;\n}\n.dropup .dropdown-menu,\n.navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 2px;\n}\n@media (min-width: 768px) {\n  .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n  .navbar-right .dropdown-menu-left {\n    right: auto;\n    left: 0;\n  }\n}\n.btn-group,\n.btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.btn-group > .btn,\n.btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.btn-group > .btn:hover,\n.btn-group-vertical > .btn:hover,\n.btn-group > .btn:focus,\n.btn-group-vertical > .btn:focus,\n.btn-group > .btn:active,\n.btn-group-vertical > .btn:active,\n.btn-group > .btn.active,\n.btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.btn-group .btn + .btn,\n.btn-group .btn + .btn-group,\n.btn-group .btn-group + .btn,\n.btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.btn-toolbar {\n  margin-left: -5px;\n}\n.btn-toolbar .btn,\n.btn-toolbar .btn-group,\n.btn-toolbar .input-group {\n  float: left;\n}\n.btn-toolbar > .btn,\n.btn-toolbar > .btn-group,\n.btn-toolbar > .input-group {\n  margin-left: 5px;\n}\n.btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.btn-group > .btn:first-child:not(:last-child):not(.dropdown-toggle) {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn:last-child:not(:first-child),\n.btn-group > .dropdown-toggle:not(:first-child) {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group > .btn-group {\n  float: left;\n}\n.btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.btn-group > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group .dropdown-toggle:active,\n.btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.btn-group > .btn + .dropdown-toggle {\n  padding-right: 8px;\n  padding-left: 8px;\n}\n.btn-group > .btn-lg + .dropdown-toggle {\n  padding-right: 12px;\n  padding-left: 12px;\n}\n.btn-group.open .dropdown-toggle {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n          box-shadow: inset 0 3px 5px rgba(0, 0, 0, .125);\n}\n.btn-group.open .dropdown-toggle.btn-link {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.btn .caret {\n  margin-left: 0;\n}\n.btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.btn-group-vertical > .btn,\n.btn-group-vertical > .btn-group,\n.btn-group-vertical > .btn-group > .btn {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.btn-group-vertical > .btn + .btn,\n.btn-group-vertical > .btn + .btn-group,\n.btn-group-vertical > .btn-group + .btn,\n.btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn:first-child:not(:last-child) {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn:last-child:not(:first-child) {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .btn:last-child,\n.btn-group-vertical > .btn-group:first-child:not(:last-child) > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.btn-group-vertical > .btn-group:last-child:not(:first-child) > .btn:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.btn-group-justified > .btn,\n.btn-group-justified > .btn-group {\n  display: table-cell;\n  float: none;\n  width: 1%;\n}\n.btn-group-justified > .btn-group .btn {\n  width: 100%;\n}\n.btn-group-justified > .btn-group .dropdown-menu {\n  left: auto;\n}\n[data-toggle=\"buttons\"] > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"radio\"],\n[data-toggle=\"buttons\"] > .btn input[type=\"checkbox\"],\n[data-toggle=\"buttons\"] > .btn-group > .btn input[type=\"checkbox\"] {\n  position: absolute;\n  clip: rect(0, 0, 0, 0);\n  pointer-events: none;\n}\n.input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.input-group[class*=\"col-\"] {\n  float: none;\n  padding-right: 0;\n  padding-left: 0;\n}\n.input-group .form-control {\n  position: relative;\n  z-index: 2;\n  float: left;\n  width: 100%;\n  margin-bottom: 0;\n}\n.input-group .form-control:focus {\n  z-index: 3;\n}\n.input-group-lg > .form-control,\n.input-group-lg > .input-group-addon,\n.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n  border-radius: 6px;\n}\nselect.input-group-lg > .form-control,\nselect.input-group-lg > .input-group-addon,\nselect.input-group-lg > .input-group-btn > .btn {\n  height: 46px;\n  line-height: 46px;\n}\ntextarea.input-group-lg > .form-control,\ntextarea.input-group-lg > .input-group-addon,\ntextarea.input-group-lg > .input-group-btn > .btn,\nselect[multiple].input-group-lg > .form-control,\nselect[multiple].input-group-lg > .input-group-addon,\nselect[multiple].input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-sm > .form-control,\n.input-group-sm > .input-group-addon,\n.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.input-group-sm > .form-control,\nselect.input-group-sm > .input-group-addon,\nselect.input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.input-group-sm > .form-control,\ntextarea.input-group-sm > .input-group-addon,\ntextarea.input-group-sm > .input-group-btn > .btn,\nselect[multiple].input-group-sm > .form-control,\nselect[multiple].input-group-sm > .input-group-addon,\nselect[multiple].input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.input-group-addon,\n.input-group-btn,\n.input-group .form-control {\n  display: table-cell;\n}\n.input-group-addon:not(:first-child):not(:last-child),\n.input-group-btn:not(:first-child):not(:last-child),\n.input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.input-group-addon,\n.input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555;\n  text-align: center;\n  background-color: #eee;\n  border: 1px solid #ccc;\n  border-radius: 4px;\n}\n.input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.input-group-addon input[type=\"radio\"],\n.input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.input-group .form-control:first-child,\n.input-group-addon:first-child,\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group > .btn,\n.input-group-btn:first-child > .dropdown-toggle,\n.input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle),\n.input-group-btn:last-child > .btn-group:not(:last-child) > .btn {\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n}\n.input-group-addon:first-child {\n  border-right: 0;\n}\n.input-group .form-control:last-child,\n.input-group-addon:last-child,\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group > .btn,\n.input-group-btn:last-child > .dropdown-toggle,\n.input-group-btn:first-child > .btn:not(:first-child),\n.input-group-btn:first-child > .btn-group:not(:first-child) > .btn {\n  border-top-left-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.input-group-addon:last-child {\n  border-left: 0;\n}\n.input-group-btn {\n  position: relative;\n  font-size: 0;\n  white-space: nowrap;\n}\n.input-group-btn > .btn {\n  position: relative;\n}\n.input-group-btn > .btn + .btn {\n  margin-left: -1px;\n}\n.input-group-btn > .btn:hover,\n.input-group-btn > .btn:focus,\n.input-group-btn > .btn:active {\n  z-index: 2;\n}\n.input-group-btn:first-child > .btn,\n.input-group-btn:first-child > .btn-group {\n  margin-right: -1px;\n}\n.input-group-btn:last-child > .btn,\n.input-group-btn:last-child > .btn-group {\n  z-index: 2;\n  margin-left: -1px;\n}\n.nav {\n  padding-left: 0;\n  margin-bottom: 0;\n  list-style: none;\n}\n.nav > li {\n  position: relative;\n  display: block;\n}\n.nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.nav > li > a:hover,\n.nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.nav > li.disabled > a {\n  color: #777;\n}\n.nav > li.disabled > a:hover,\n.nav > li.disabled > a:focus {\n  color: #777;\n  text-decoration: none;\n  cursor: not-allowed;\n  background-color: transparent;\n}\n.nav .open > a,\n.nav .open > a:hover,\n.nav .open > a:focus {\n  background-color: #eee;\n  border-color: #337ab7;\n}\n.nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.nav > li > a > img {\n  max-width: none;\n}\n.nav-tabs {\n  border-bottom: 1px solid #ddd;\n}\n.nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.nav-tabs > li > a {\n  margin-right: 2px;\n  line-height: 1.42857143;\n  border: 1px solid transparent;\n  border-radius: 4px 4px 0 0;\n}\n.nav-tabs > li > a:hover {\n  border-color: #eee #eee #ddd;\n}\n.nav-tabs > li.active > a,\n.nav-tabs > li.active > a:hover,\n.nav-tabs > li.active > a:focus {\n  color: #555;\n  cursor: default;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-bottom-color: transparent;\n}\n.nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.nav-tabs.nav-justified > li {\n  float: none;\n}\n.nav-tabs.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-tabs.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs.nav-justified > .active > a,\n.nav-tabs.nav-justified > .active > a:hover,\n.nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs.nav-justified > .active > a,\n  .nav-tabs.nav-justified > .active > a:hover,\n  .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.nav-pills > li {\n  float: left;\n}\n.nav-pills > li > a {\n  border-radius: 4px;\n}\n.nav-pills > li + li {\n  margin-left: 2px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  color: #fff;\n  background-color: #337ab7;\n}\n.nav-stacked > li {\n  float: none;\n}\n.nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.nav-justified {\n  width: 100%;\n}\n.nav-justified > li {\n  float: none;\n}\n.nav-justified > li > a {\n  margin-bottom: 5px;\n  text-align: center;\n}\n.nav-justified > .dropdown .dropdown-menu {\n  top: auto;\n  left: auto;\n}\n@media (min-width: 768px) {\n  .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.nav-tabs-justified {\n  border-bottom: 0;\n}\n.nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.nav-tabs-justified > .active > a,\n.nav-tabs-justified > .active > a:hover,\n.nav-tabs-justified > .active > a:focus {\n  border: 1px solid #ddd;\n}\n@media (min-width: 768px) {\n  .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #ddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .nav-tabs-justified > .active > a,\n  .nav-tabs-justified > .active > a:hover,\n  .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #fff;\n  }\n}\n.tab-content > .tab-pane {\n  display: none;\n}\n.tab-content > .active {\n  display: block;\n}\n.nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar {\n  position: relative;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n@media (min-width: 768px) {\n  .navbar {\n    border-radius: 4px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-header {\n    float: left;\n  }\n}\n.navbar-collapse {\n  padding-right: 15px;\n  padding-left: 15px;\n  overflow-x: visible;\n  -webkit-overflow-scrolling: touch;\n  border-top: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1);\n}\n.navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-static-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    padding-right: 0;\n    padding-left: 0;\n  }\n}\n.navbar-fixed-top .navbar-collapse,\n.navbar-fixed-bottom .navbar-collapse {\n  max-height: 340px;\n}\n@media (max-device-width: 480px) and (orientation: landscape) {\n  .navbar-fixed-top .navbar-collapse,\n  .navbar-fixed-bottom .navbar-collapse {\n    max-height: 200px;\n  }\n}\n.container > .navbar-header,\n.container-fluid > .navbar-header,\n.container > .navbar-collapse,\n.container-fluid > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .container > .navbar-header,\n  .container-fluid > .navbar-header,\n  .container > .navbar-collapse,\n  .container-fluid > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.navbar-static-top {\n  z-index: 1000;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top,\n.navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  z-index: 1030;\n}\n@media (min-width: 768px) {\n  .navbar-fixed-top,\n  .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.navbar-fixed-top {\n  top: 0;\n  border-width: 0 0 1px;\n}\n.navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n  border-width: 1px 0 0;\n}\n.navbar-brand {\n  float: left;\n  height: 50px;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.navbar-brand:hover,\n.navbar-brand:focus {\n  text-decoration: none;\n}\n.navbar-brand > img {\n  display: block;\n}\n@media (min-width: 768px) {\n  .navbar > .container .navbar-brand,\n  .navbar > .container-fluid .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.navbar-toggle {\n  position: relative;\n  float: right;\n  padding: 9px 10px;\n  margin-top: 8px;\n  margin-right: 15px;\n  margin-bottom: 8px;\n  background-color: transparent;\n  background-image: none;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.navbar-toggle:focus {\n  outline: 0;\n}\n.navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .navbar-toggle {\n    display: none;\n  }\n}\n.navbar-nav {\n  margin: 7.5px -15px;\n}\n.navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .navbar-nav .open .dropdown-menu {\n    position: static;\n    float: none;\n    width: auto;\n    margin-top: 0;\n    background-color: transparent;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  .navbar-nav .open .dropdown-menu > li > a,\n  .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .navbar-nav > li {\n    float: left;\n  }\n  .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n.navbar-form {\n  padding: 10px 15px;\n  margin-top: 8px;\n  margin-right: -15px;\n  margin-bottom: 8px;\n  margin-left: -15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n          box-shadow: inset 0 1px 0 rgba(255, 255, 255, .1), 0 1px 0 rgba(255, 255, 255, .1);\n}\n@media (min-width: 768px) {\n  .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control {\n    display: inline-block;\n    width: auto;\n    vertical-align: middle;\n  }\n  .navbar-form .form-control-static {\n    display: inline-block;\n  }\n  .navbar-form .input-group {\n    display: inline-table;\n    vertical-align: middle;\n  }\n  .navbar-form .input-group .input-group-addon,\n  .navbar-form .input-group .input-group-btn,\n  .navbar-form .input-group .form-control {\n    width: auto;\n  }\n  .navbar-form .input-group > .form-control {\n    width: 100%;\n  }\n  .navbar-form .control-label {\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio,\n  .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .navbar-form .radio label,\n  .navbar-form .checkbox label {\n    padding-left: 0;\n  }\n  .navbar-form .radio input[type=\"radio\"],\n  .navbar-form .checkbox input[type=\"checkbox\"] {\n    position: relative;\n    margin-left: 0;\n  }\n  .navbar-form .has-feedback .form-control-feedback {\n    top: 0;\n  }\n}\n@media (max-width: 767px) {\n  .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n  .navbar-form .form-group:last-child {\n    margin-bottom: 0;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-form {\n    width: auto;\n    padding-top: 0;\n    padding-bottom: 0;\n    margin-right: 0;\n    margin-left: 0;\n    border: 0;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n.navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  margin-bottom: 0;\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.navbar-btn.btn-sm {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.navbar-btn.btn-xs {\n  margin-top: 14px;\n  margin-bottom: 14px;\n}\n.navbar-text {\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .navbar-text {\n    float: left;\n    margin-right: 15px;\n    margin-left: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .navbar-left {\n    float: left !important;\n  }\n  .navbar-right {\n    float: right !important;\n    margin-right: -15px;\n  }\n  .navbar-right ~ .navbar-right {\n    margin-right: 0;\n  }\n}\n.navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-brand {\n  color: #777;\n}\n.navbar-default .navbar-brand:hover,\n.navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.navbar-default .navbar-text {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a {\n  color: #777;\n}\n.navbar-default .navbar-nav > li > a:hover,\n.navbar-default .navbar-nav > li > a:focus {\n  color: #333;\n  background-color: transparent;\n}\n.navbar-default .navbar-nav > .active > a,\n.navbar-default .navbar-nav > .active > a:hover,\n.navbar-default .navbar-nav > .active > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .disabled > a,\n.navbar-default .navbar-nav > .disabled > a:hover,\n.navbar-default .navbar-nav > .disabled > a:focus {\n  color: #ccc;\n  background-color: transparent;\n}\n.navbar-default .navbar-toggle {\n  border-color: #ddd;\n}\n.navbar-default .navbar-toggle:hover,\n.navbar-default .navbar-toggle:focus {\n  background-color: #ddd;\n}\n.navbar-default .navbar-toggle .icon-bar {\n  background-color: #888;\n}\n.navbar-default .navbar-collapse,\n.navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.navbar-default .navbar-nav > .open > a,\n.navbar-default .navbar-nav > .open > a:hover,\n.navbar-default .navbar-nav > .open > a:focus {\n  color: #555;\n  background-color: #e7e7e7;\n}\n@media (max-width: 767px) {\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333;\n    background-color: transparent;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555;\n    background-color: #e7e7e7;\n  }\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #ccc;\n    background-color: transparent;\n  }\n}\n.navbar-default .navbar-link {\n  color: #777;\n}\n.navbar-default .navbar-link:hover {\n  color: #333;\n}\n.navbar-default .btn-link {\n  color: #777;\n}\n.navbar-default .btn-link:hover,\n.navbar-default .btn-link:focus {\n  color: #333;\n}\n.navbar-default .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-default .btn-link:hover,\n.navbar-default .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-default .btn-link:focus {\n  color: #ccc;\n}\n.navbar-inverse {\n  background-color: #222;\n  border-color: #080808;\n}\n.navbar-inverse .navbar-brand {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-brand:hover,\n.navbar-inverse .navbar-brand:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-text {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-nav > li > a:hover,\n.navbar-inverse .navbar-nav > li > a:focus {\n  color: #fff;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-nav > .active > a,\n.navbar-inverse .navbar-nav > .active > a:hover,\n.navbar-inverse .navbar-nav > .active > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n.navbar-inverse .navbar-nav > .disabled > a,\n.navbar-inverse .navbar-nav > .disabled > a:hover,\n.navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444;\n  background-color: transparent;\n}\n.navbar-inverse .navbar-toggle {\n  border-color: #333;\n}\n.navbar-inverse .navbar-toggle:hover,\n.navbar-inverse .navbar-toggle:focus {\n  background-color: #333;\n}\n.navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #fff;\n}\n.navbar-inverse .navbar-collapse,\n.navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.navbar-inverse .navbar-nav > .open > a,\n.navbar-inverse .navbar-nav > .open > a:hover,\n.navbar-inverse .navbar-nav > .open > a:focus {\n  color: #fff;\n  background-color: #080808;\n}\n@media (max-width: 767px) {\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu .divider {\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #9d9d9d;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #fff;\n    background-color: transparent;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #fff;\n    background-color: #080808;\n  }\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444;\n    background-color: transparent;\n  }\n}\n.navbar-inverse .navbar-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .navbar-link:hover {\n  color: #fff;\n}\n.navbar-inverse .btn-link {\n  color: #9d9d9d;\n}\n.navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link:focus {\n  color: #fff;\n}\n.navbar-inverse .btn-link[disabled]:hover,\nfieldset[disabled] .navbar-inverse .btn-link:hover,\n.navbar-inverse .btn-link[disabled]:focus,\nfieldset[disabled] .navbar-inverse .btn-link:focus {\n  color: #444;\n}\n.breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.breadcrumb > li {\n  display: inline-block;\n}\n.breadcrumb > li + li:before {\n  padding: 0 5px;\n  color: #ccc;\n  content: \"/\\00a0\";\n}\n.breadcrumb > .active {\n  color: #777;\n}\n.pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.pagination > li {\n  display: inline;\n}\n.pagination > li > a,\n.pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  margin-left: -1px;\n  line-height: 1.42857143;\n  color: #337ab7;\n  text-decoration: none;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.pagination > li:first-child > a,\n.pagination > li:first-child > span {\n  margin-left: 0;\n  border-top-left-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.pagination > li:last-child > a,\n.pagination > li:last-child > span {\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 4px;\n}\n.pagination > li > a:hover,\n.pagination > li > span:hover,\n.pagination > li > a:focus,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #23527c;\n  background-color: #eee;\n  border-color: #ddd;\n}\n.pagination > .active > a,\n.pagination > .active > span,\n.pagination > .active > a:hover,\n.pagination > .active > span:hover,\n.pagination > .active > a:focus,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  cursor: default;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n  border-color: #ddd;\n}\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n.pagination-lg > li:first-child > a,\n.pagination-lg > li:first-child > span {\n  border-top-left-radius: 6px;\n  border-bottom-left-radius: 6px;\n}\n.pagination-lg > li:last-child > a,\n.pagination-lg > li:last-child > span {\n  border-top-right-radius: 6px;\n  border-bottom-right-radius: 6px;\n}\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n.pagination-sm > li:first-child > a,\n.pagination-sm > li:first-child > span {\n  border-top-left-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.pagination-sm > li:last-child > a,\n.pagination-sm > li:last-child > span {\n  border-top-right-radius: 3px;\n  border-bottom-right-radius: 3px;\n}\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  text-align: center;\n  list-style: none;\n}\n.pager li {\n  display: inline;\n}\n.pager li > a,\n.pager li > span {\n  display: inline-block;\n  padding: 5px 14px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 15px;\n}\n.pager li > a:hover,\n.pager li > a:focus {\n  text-decoration: none;\n  background-color: #eee;\n}\n.pager .next > a,\n.pager .next > span {\n  float: right;\n}\n.pager .previous > a,\n.pager .previous > span {\n  float: left;\n}\n.pager .disabled > a,\n.pager .disabled > a:hover,\n.pager .disabled > a:focus,\n.pager .disabled > span {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #fff;\n}\n.label {\n  display: inline;\n  padding: .2em .6em .3em;\n  font-size: 75%;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: baseline;\n  border-radius: .25em;\n}\na.label:hover,\na.label:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.label:empty {\n  display: none;\n}\n.btn .label {\n  position: relative;\n  top: -1px;\n}\n.label-default {\n  background-color: #777;\n}\n.label-default[href]:hover,\n.label-default[href]:focus {\n  background-color: #5e5e5e;\n}\n.label-primary {\n  background-color: #337ab7;\n}\n.label-primary[href]:hover,\n.label-primary[href]:focus {\n  background-color: #286090;\n}\n.label-success {\n  background-color: #5cb85c;\n}\n.label-success[href]:hover,\n.label-success[href]:focus {\n  background-color: #449d44;\n}\n.label-info {\n  background-color: #5bc0de;\n}\n.label-info[href]:hover,\n.label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.label-warning {\n  background-color: #f0ad4e;\n}\n.label-warning[href]:hover,\n.label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.label-danger {\n  background-color: #d9534f;\n}\n.label-danger[href]:hover,\n.label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\n  font-weight: bold;\n  line-height: 1;\n  color: #fff;\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  background-color: #777;\n  border-radius: 10px;\n}\n.badge:empty {\n  display: none;\n}\n.btn .badge {\n  position: relative;\n  top: -1px;\n}\n.btn-xs .badge,\n.btn-group-xs > .btn .badge {\n  top: 0;\n  padding: 1px 5px;\n}\na.badge:hover,\na.badge:focus {\n  color: #fff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.list-group-item.active > .badge,\n.nav-pills > .active > a > .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.list-group-item > .badge {\n  float: right;\n}\n.list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.jumbotron {\n  padding-top: 30px;\n  padding-bottom: 30px;\n  margin-bottom: 30px;\n  color: inherit;\n  background-color: #eee;\n}\n.jumbotron h1,\n.jumbotron .h1 {\n  color: inherit;\n}\n.jumbotron p {\n  margin-bottom: 15px;\n  font-size: 21px;\n  font-weight: 200;\n}\n.jumbotron > hr {\n  border-top-color: #d5d5d5;\n}\n.container .jumbotron,\n.container-fluid .jumbotron {\n  padding-right: 15px;\n  padding-left: 15px;\n  border-radius: 6px;\n}\n.jumbotron .container {\n  max-width: 100%;\n}\n@media screen and (min-width: 768px) {\n  .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .jumbotron,\n  .container-fluid .jumbotron {\n    padding-right: 60px;\n    padding-left: 60px;\n  }\n  .jumbotron h1,\n  .jumbotron .h1 {\n    font-size: 63px;\n  }\n}\n.thumbnail {\n  display: block;\n  padding: 4px;\n  margin-bottom: 20px;\n  line-height: 1.42857143;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  border-radius: 4px;\n  -webkit-transition: border .2s ease-in-out;\n       -o-transition: border .2s ease-in-out;\n          transition: border .2s ease-in-out;\n}\n.thumbnail > img,\n.thumbnail a > img {\n  margin-right: auto;\n  margin-left: auto;\n}\na.thumbnail:hover,\na.thumbnail:focus,\na.thumbnail.active {\n  border-color: #337ab7;\n}\n.thumbnail .caption {\n  padding: 9px;\n  color: #333;\n}\n.alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.alert .alert-link {\n  font-weight: bold;\n}\n.alert > p,\n.alert > ul {\n  margin-bottom: 0;\n}\n.alert > p + p {\n  margin-top: 5px;\n}\n.alert-dismissable,\n.alert-dismissible {\n  padding-right: 35px;\n}\n.alert-dismissable .close,\n.alert-dismissible .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.alert-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.alert-success .alert-link {\n  color: #2b542c;\n}\n.alert-info {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.alert-info .alert-link {\n  color: #245269;\n}\n.alert-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.alert-warning .alert-link {\n  color: #66512c;\n}\n.alert-danger {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.alert-danger .alert-link {\n  color: #843534;\n}\n@-webkit-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n.progress {\n  height: 20px;\n  margin-bottom: 20px;\n  overflow: hidden;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n          box-shadow: inset 0 1px 2px rgba(0, 0, 0, .1);\n}\n.progress-bar {\n  float: left;\n  width: 0;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\n  color: #fff;\n  text-align: center;\n  background-color: #337ab7;\n  -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n          box-shadow: inset 0 -1px 0 rgba(0, 0, 0, .15);\n  -webkit-transition: width .6s ease;\n       -o-transition: width .6s ease;\n          transition: width .6s ease;\n}\n.progress-striped .progress-bar,\n.progress-bar-striped {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  -webkit-background-size: 40px 40px;\n          background-size: 40px 40px;\n}\n.progress.active .progress-bar,\n.progress-bar.active {\n  -webkit-animation: progress-bar-stripes 2s linear infinite;\n       -o-animation: progress-bar-stripes 2s linear infinite;\n          animation: progress-bar-stripes 2s linear infinite;\n}\n.progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:      -o-linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n  background-image:         linear-gradient(45deg, rgba(255, 255, 255, .15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, .15) 50%, rgba(255, 255, 255, .15) 75%, transparent 75%, transparent);\n}\n.media {\n  margin-top: 15px;\n}\n.media:first-child {\n  margin-top: 0;\n}\n.media,\n.media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.media-body {\n  width: 10000px;\n}\n.media-object {\n  display: block;\n}\n.media-object.img-thumbnail {\n  max-width: none;\n}\n.media-right,\n.media > .pull-right {\n  padding-left: 10px;\n}\n.media-left,\n.media > .pull-left {\n  padding-right: 10px;\n}\n.media-left,\n.media-right,\n.media-body {\n  display: table-cell;\n  vertical-align: top;\n}\n.media-middle {\n  vertical-align: middle;\n}\n.media-bottom {\n  vertical-align: bottom;\n}\n.media-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.list-group {\n  padding-left: 0;\n  margin-bottom: 20px;\n}\n.list-group-item {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n  margin-bottom: -1px;\n  background-color: #fff;\n  border: 1px solid #ddd;\n}\n.list-group-item:first-child {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\na.list-group-item,\nbutton.list-group-item {\n  color: #555;\n}\na.list-group-item .list-group-item-heading,\nbutton.list-group-item .list-group-item-heading {\n  color: #333;\n}\na.list-group-item:hover,\nbutton.list-group-item:hover,\na.list-group-item:focus,\nbutton.list-group-item:focus {\n  color: #555;\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\nbutton.list-group-item {\n  width: 100%;\n  text-align: left;\n}\n.list-group-item.disabled,\n.list-group-item.disabled:hover,\n.list-group-item.disabled:focus {\n  color: #777;\n  cursor: not-allowed;\n  background-color: #eee;\n}\n.list-group-item.disabled .list-group-item-heading,\n.list-group-item.disabled:hover .list-group-item-heading,\n.list-group-item.disabled:focus .list-group-item-heading {\n  color: inherit;\n}\n.list-group-item.disabled .list-group-item-text,\n.list-group-item.disabled:hover .list-group-item-text,\n.list-group-item.disabled:focus .list-group-item-text {\n  color: #777;\n}\n.list-group-item.active,\n.list-group-item.active:hover,\n.list-group-item.active:focus {\n  z-index: 2;\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.list-group-item.active .list-group-item-heading,\n.list-group-item.active:hover .list-group-item-heading,\n.list-group-item.active:focus .list-group-item-heading,\n.list-group-item.active .list-group-item-heading > small,\n.list-group-item.active:hover .list-group-item-heading > small,\n.list-group-item.active:focus .list-group-item-heading > small,\n.list-group-item.active .list-group-item-heading > .small,\n.list-group-item.active:hover .list-group-item-heading > .small,\n.list-group-item.active:focus .list-group-item-heading > .small {\n  color: inherit;\n}\n.list-group-item.active .list-group-item-text,\n.list-group-item.active:hover .list-group-item-text,\n.list-group-item.active:focus .list-group-item-text {\n  color: #c7ddef;\n}\n.list-group-item-success {\n  color: #3c763d;\n  background-color: #dff0d8;\n}\na.list-group-item-success,\nbutton.list-group-item-success {\n  color: #3c763d;\n}\na.list-group-item-success .list-group-item-heading,\nbutton.list-group-item-success .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-success:hover,\nbutton.list-group-item-success:hover,\na.list-group-item-success:focus,\nbutton.list-group-item-success:focus {\n  color: #3c763d;\n  background-color: #d0e9c6;\n}\na.list-group-item-success.active,\nbutton.list-group-item-success.active,\na.list-group-item-success.active:hover,\nbutton.list-group-item-success.active:hover,\na.list-group-item-success.active:focus,\nbutton.list-group-item-success.active:focus {\n  color: #fff;\n  background-color: #3c763d;\n  border-color: #3c763d;\n}\n.list-group-item-info {\n  color: #31708f;\n  background-color: #d9edf7;\n}\na.list-group-item-info,\nbutton.list-group-item-info {\n  color: #31708f;\n}\na.list-group-item-info .list-group-item-heading,\nbutton.list-group-item-info .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-info:hover,\nbutton.list-group-item-info:hover,\na.list-group-item-info:focus,\nbutton.list-group-item-info:focus {\n  color: #31708f;\n  background-color: #c4e3f3;\n}\na.list-group-item-info.active,\nbutton.list-group-item-info.active,\na.list-group-item-info.active:hover,\nbutton.list-group-item-info.active:hover,\na.list-group-item-info.active:focus,\nbutton.list-group-item-info.active:focus {\n  color: #fff;\n  background-color: #31708f;\n  border-color: #31708f;\n}\n.list-group-item-warning {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n}\na.list-group-item-warning,\nbutton.list-group-item-warning {\n  color: #8a6d3b;\n}\na.list-group-item-warning .list-group-item-heading,\nbutton.list-group-item-warning .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-warning:hover,\nbutton.list-group-item-warning:hover,\na.list-group-item-warning:focus,\nbutton.list-group-item-warning:focus {\n  color: #8a6d3b;\n  background-color: #faf2cc;\n}\na.list-group-item-warning.active,\nbutton.list-group-item-warning.active,\na.list-group-item-warning.active:hover,\nbutton.list-group-item-warning.active:hover,\na.list-group-item-warning.active:focus,\nbutton.list-group-item-warning.active:focus {\n  color: #fff;\n  background-color: #8a6d3b;\n  border-color: #8a6d3b;\n}\n.list-group-item-danger {\n  color: #a94442;\n  background-color: #f2dede;\n}\na.list-group-item-danger,\nbutton.list-group-item-danger {\n  color: #a94442;\n}\na.list-group-item-danger .list-group-item-heading,\nbutton.list-group-item-danger .list-group-item-heading {\n  color: inherit;\n}\na.list-group-item-danger:hover,\nbutton.list-group-item-danger:hover,\na.list-group-item-danger:focus,\nbutton.list-group-item-danger:focus {\n  color: #a94442;\n  background-color: #ebcccc;\n}\na.list-group-item-danger.active,\nbutton.list-group-item-danger.active,\na.list-group-item-danger.active:hover,\nbutton.list-group-item-danger.active:hover,\na.list-group-item-danger.active:focus,\nbutton.list-group-item-danger.active:focus {\n  color: #fff;\n  background-color: #a94442;\n  border-color: #a94442;\n}\n.list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.panel {\n  margin-bottom: 20px;\n  background-color: #fff;\n  border: 1px solid transparent;\n  border-radius: 4px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: 0 1px 1px rgba(0, 0, 0, .05);\n}\n.panel-body {\n  padding: 15px;\n}\n.panel-heading {\n  padding: 10px 15px;\n  border-bottom: 1px solid transparent;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel-heading > .dropdown .dropdown-toggle {\n  color: inherit;\n}\n.panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n  color: inherit;\n}\n.panel-title > a,\n.panel-title > small,\n.panel-title > .small,\n.panel-title > small > a,\n.panel-title > .small > a {\n  color: inherit;\n}\n.panel-footer {\n  padding: 10px 15px;\n  background-color: #f5f5f5;\n  border-top: 1px solid #ddd;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .list-group,\n.panel > .panel-collapse > .list-group {\n  margin-bottom: 0;\n}\n.panel > .list-group .list-group-item,\n.panel > .panel-collapse > .list-group .list-group-item {\n  border-width: 1px 0;\n  border-radius: 0;\n}\n.panel > .list-group:first-child .list-group-item:first-child,\n.panel > .panel-collapse > .list-group:first-child .list-group-item:first-child {\n  border-top: 0;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .list-group:last-child .list-group-item:last-child,\n.panel > .panel-collapse > .list-group:last-child .list-group-item:last-child {\n  border-bottom: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .panel-heading + .panel-collapse > .list-group .list-group-item:first-child {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n}\n.panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.list-group + .panel-footer {\n  border-top-width: 0;\n}\n.panel > .table,\n.panel > .table-responsive > .table,\n.panel > .panel-collapse > .table {\n  margin-bottom: 0;\n}\n.panel > .table caption,\n.panel > .table-responsive > .table caption,\n.panel > .panel-collapse > .table caption {\n  padding-right: 15px;\n  padding-left: 15px;\n}\n.panel > .table:first-child,\n.panel > .table-responsive:first-child > .table:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child {\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:first-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:first-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:first-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:first-child {\n  border-top-left-radius: 3px;\n}\n.panel > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child td:last-child,\n.panel > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > thead:first-child > tr:first-child th:last-child,\n.panel > .table:first-child > tbody:first-child > tr:first-child th:last-child,\n.panel > .table-responsive:first-child > .table:first-child > tbody:first-child > tr:first-child th:last-child {\n  border-top-right-radius: 3px;\n}\n.panel > .table:last-child,\n.panel > .table-responsive:last-child > .table:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child {\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:first-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:first-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:first-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:first-child {\n  border-bottom-left-radius: 3px;\n}\n.panel > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child td:last-child,\n.panel > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tbody:last-child > tr:last-child th:last-child,\n.panel > .table:last-child > tfoot:last-child > tr:last-child th:last-child,\n.panel > .table-responsive:last-child > .table:last-child > tfoot:last-child > tr:last-child th:last-child {\n  border-bottom-right-radius: 3px;\n}\n.panel > .panel-body + .table,\n.panel > .panel-body + .table-responsive,\n.panel > .table + .panel-body,\n.panel > .table-responsive + .panel-body {\n  border-top: 1px solid #ddd;\n}\n.panel > .table > tbody:first-child > tr:first-child th,\n.panel > .table > tbody:first-child > tr:first-child td {\n  border-top: 0;\n}\n.panel > .table-bordered,\n.panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.panel > .table-bordered > thead > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.panel > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.panel > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.panel > .table-bordered > thead > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.panel > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.panel > .table-bordered > tfoot > tr > td:first-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.panel > .table-bordered > thead > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.panel > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.panel > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.panel > .table-bordered > thead > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.panel > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.panel > .table-bordered > tfoot > tr > td:last-child,\n.panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.panel > .table-bordered > thead > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > td,\n.panel > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > td,\n.panel > .table-bordered > thead > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > thead > tr:first-child > th,\n.panel > .table-bordered > tbody > tr:first-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:first-child > th {\n  border-bottom: 0;\n}\n.panel > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.panel > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td,\n.panel > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.panel > .table-bordered > tfoot > tr:last-child > th,\n.panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th {\n  border-bottom: 0;\n}\n.panel > .table-responsive {\n  margin-bottom: 0;\n  border: 0;\n}\n.panel-group {\n  margin-bottom: 20px;\n}\n.panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n}\n.panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.panel-group .panel-heading {\n  border-bottom: 0;\n}\n.panel-group .panel-heading + .panel-collapse > .panel-body,\n.panel-group .panel-heading + .panel-collapse > .list-group {\n  border-top: 1px solid #ddd;\n}\n.panel-group .panel-footer {\n  border-top: 0;\n}\n.panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #ddd;\n}\n.panel-default {\n  border-color: #ddd;\n}\n.panel-default > .panel-heading {\n  color: #333;\n  background-color: #f5f5f5;\n  border-color: #ddd;\n}\n.panel-default > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ddd;\n}\n.panel-default > .panel-heading .badge {\n  color: #f5f5f5;\n  background-color: #333;\n}\n.panel-default > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ddd;\n}\n.panel-primary {\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading {\n  color: #fff;\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.panel-primary > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #337ab7;\n}\n.panel-primary > .panel-heading .badge {\n  color: #337ab7;\n  background-color: #fff;\n}\n.panel-primary > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #337ab7;\n}\n.panel-success {\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading {\n  color: #3c763d;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.panel-success > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #d6e9c6;\n}\n.panel-success > .panel-heading .badge {\n  color: #dff0d8;\n  background-color: #3c763d;\n}\n.panel-success > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.panel-info {\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading {\n  color: #31708f;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.panel-info > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #bce8f1;\n}\n.panel-info > .panel-heading .badge {\n  color: #d9edf7;\n  background-color: #31708f;\n}\n.panel-info > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.panel-warning {\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading {\n  color: #8a6d3b;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.panel-warning > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #faebcc;\n}\n.panel-warning > .panel-heading .badge {\n  color: #fcf8e3;\n  background-color: #8a6d3b;\n}\n.panel-warning > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #faebcc;\n}\n.panel-danger {\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading {\n  color: #a94442;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.panel-danger > .panel-heading + .panel-collapse > .panel-body {\n  border-top-color: #ebccd1;\n}\n.panel-danger > .panel-heading .badge {\n  color: #f2dede;\n  background-color: #a94442;\n}\n.panel-danger > .panel-footer + .panel-collapse > .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.embed-responsive {\n  position: relative;\n  display: block;\n  height: 0;\n  padding: 0;\n  overflow: hidden;\n}\n.embed-responsive .embed-responsive-item,\n.embed-responsive iframe,\n.embed-responsive embed,\n.embed-responsive object,\n.embed-responsive video {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n  border: 0;\n}\n.embed-responsive-16by9 {\n  padding-bottom: 56.25%;\n}\n.embed-responsive-4by3 {\n  padding-bottom: 75%;\n}\n.well {\n  min-height: 20px;\n  padding: 19px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border: 1px solid #e3e3e3;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n          box-shadow: inset 0 1px 1px rgba(0, 0, 0, .05);\n}\n.well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, .15);\n}\n.well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.close {\n  float: right;\n  font-size: 21px;\n  font-weight: bold;\n  line-height: 1;\n  color: #000;\n  text-shadow: 0 1px 0 #fff;\n  filter: alpha(opacity=20);\n  opacity: .2;\n}\n.close:hover,\n.close:focus {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\nbutton.close {\n  -webkit-appearance: none;\n  padding: 0;\n  cursor: pointer;\n  background: transparent;\n  border: 0;\n}\n.modal-open {\n  overflow: hidden;\n}\n.modal {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1050;\n  display: none;\n  overflow: hidden;\n  -webkit-overflow-scrolling: touch;\n  outline: 0;\n}\n.modal.fade .modal-dialog {\n  -webkit-transition: -webkit-transform .3s ease-out;\n       -o-transition:      -o-transform .3s ease-out;\n          transition:         transform .3s ease-out;\n  -webkit-transform: translate(0, -25%);\n      -ms-transform: translate(0, -25%);\n       -o-transform: translate(0, -25%);\n          transform: translate(0, -25%);\n}\n.modal.in .modal-dialog {\n  -webkit-transform: translate(0, 0);\n      -ms-transform: translate(0, 0);\n       -o-transform: translate(0, 0);\n          transform: translate(0, 0);\n}\n.modal-open .modal {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.modal-dialog {\n  position: relative;\n  width: auto;\n  margin: 10px;\n}\n.modal-content {\n  position: relative;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #999;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  outline: 0;\n  -webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n          box-shadow: 0 3px 9px rgba(0, 0, 0, .5);\n}\n.modal-backdrop {\n  position: fixed;\n  top: 0;\n  right: 0;\n  bottom: 0;\n  left: 0;\n  z-index: 1040;\n  background-color: #000;\n}\n.modal-backdrop.fade {\n  filter: alpha(opacity=0);\n  opacity: 0;\n}\n.modal-backdrop.in {\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.modal-header {\n  padding: 15px;\n  border-bottom: 1px solid #e5e5e5;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.42857143;\n}\n.modal-body {\n  position: relative;\n  padding: 15px;\n}\n.modal-footer {\n  padding: 15px;\n  text-align: right;\n  border-top: 1px solid #e5e5e5;\n}\n.modal-footer .btn + .btn {\n  margin-bottom: 0;\n  margin-left: 5px;\n}\n.modal-footer .btn-group .btn + .btn {\n  margin-left: -1px;\n}\n.modal-footer .btn-block + .btn-block {\n  margin-left: 0;\n}\n.modal-scrollbar-measure {\n  position: absolute;\n  top: -9999px;\n  width: 50px;\n  height: 50px;\n  overflow: scroll;\n}\n@media (min-width: 768px) {\n  .modal-dialog {\n    width: 600px;\n    margin: 30px auto;\n  }\n  .modal-content {\n    -webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n            box-shadow: 0 5px 15px rgba(0, 0, 0, .5);\n  }\n  .modal-sm {\n    width: 300px;\n  }\n}\n@media (min-width: 992px) {\n  .modal-lg {\n    width: 900px;\n  }\n}\n.tooltip {\n  position: absolute;\n  z-index: 1070;\n  display: block;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 12px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  filter: alpha(opacity=0);\n  opacity: 0;\n\n  line-break: auto;\n}\n.tooltip.in {\n  filter: alpha(opacity=90);\n  opacity: .9;\n}\n.tooltip.top {\n  padding: 5px 0;\n  margin-top: -3px;\n}\n.tooltip.right {\n  padding: 0 5px;\n  margin-left: 3px;\n}\n.tooltip.bottom {\n  padding: 5px 0;\n  margin-top: 3px;\n}\n.tooltip.left {\n  padding: 0 5px;\n  margin-left: -3px;\n}\n.tooltip-inner {\n  max-width: 200px;\n  padding: 3px 8px;\n  color: #fff;\n  text-align: center;\n  background-color: #000;\n  border-radius: 4px;\n}\n.tooltip-arrow {\n  position: absolute;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.tooltip.top .tooltip-arrow {\n  bottom: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-left .tooltip-arrow {\n  right: 5px;\n  bottom: 0;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  margin-bottom: -5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000;\n}\n.tooltip.right .tooltip-arrow {\n  top: 50%;\n  left: 0;\n  margin-top: -5px;\n  border-width: 5px 5px 5px 0;\n  border-right-color: #000;\n}\n.tooltip.left .tooltip-arrow {\n  top: 50%;\n  right: 0;\n  margin-top: -5px;\n  border-width: 5px 0 5px 5px;\n  border-left-color: #000;\n}\n.tooltip.bottom .tooltip-arrow {\n  top: 0;\n  left: 50%;\n  margin-left: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  margin-top: -5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000;\n}\n.popover {\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 1060;\n  display: none;\n  max-width: 276px;\n  padding: 1px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 14px;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.42857143;\n  text-align: left;\n  text-align: start;\n  text-decoration: none;\n  text-shadow: none;\n  text-transform: none;\n  letter-spacing: normal;\n  word-break: normal;\n  word-spacing: normal;\n  word-wrap: normal;\n  white-space: normal;\n  background-color: #fff;\n  -webkit-background-clip: padding-box;\n          background-clip: padding-box;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, .2);\n  border-radius: 6px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n          box-shadow: 0 5px 10px rgba(0, 0, 0, .2);\n\n  line-break: auto;\n}\n.popover.top {\n  margin-top: -10px;\n}\n.popover.right {\n  margin-left: 10px;\n}\n.popover.bottom {\n  margin-top: 10px;\n}\n.popover.left {\n  margin-left: -10px;\n}\n.popover-title {\n  padding: 8px 14px;\n  margin: 0;\n  font-size: 14px;\n  background-color: #f7f7f7;\n  border-bottom: 1px solid #ebebeb;\n  border-radius: 5px 5px 0 0;\n}\n.popover-content {\n  padding: 9px 14px;\n}\n.popover > .arrow,\n.popover > .arrow:after {\n  position: absolute;\n  display: block;\n  width: 0;\n  height: 0;\n  border-color: transparent;\n  border-style: solid;\n}\n.popover > .arrow {\n  border-width: 11px;\n}\n.popover > .arrow:after {\n  content: \"\";\n  border-width: 10px;\n}\n.popover.top > .arrow {\n  bottom: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-color: #999;\n  border-top-color: rgba(0, 0, 0, .25);\n  border-bottom-width: 0;\n}\n.popover.top > .arrow:after {\n  bottom: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-color: #fff;\n  border-bottom-width: 0;\n}\n.popover.right > .arrow {\n  top: 50%;\n  left: -11px;\n  margin-top: -11px;\n  border-right-color: #999;\n  border-right-color: rgba(0, 0, 0, .25);\n  border-left-width: 0;\n}\n.popover.right > .arrow:after {\n  bottom: -10px;\n  left: 1px;\n  content: \" \";\n  border-right-color: #fff;\n  border-left-width: 0;\n}\n.popover.bottom > .arrow {\n  top: -11px;\n  left: 50%;\n  margin-left: -11px;\n  border-top-width: 0;\n  border-bottom-color: #999;\n  border-bottom-color: rgba(0, 0, 0, .25);\n}\n.popover.bottom > .arrow:after {\n  top: 1px;\n  margin-left: -10px;\n  content: \" \";\n  border-top-width: 0;\n  border-bottom-color: #fff;\n}\n.popover.left > .arrow {\n  top: 50%;\n  right: -11px;\n  margin-top: -11px;\n  border-right-width: 0;\n  border-left-color: #999;\n  border-left-color: rgba(0, 0, 0, .25);\n}\n.popover.left > .arrow:after {\n  right: 1px;\n  bottom: -10px;\n  content: \" \";\n  border-right-width: 0;\n  border-left-color: #fff;\n}\n.carousel {\n  position: relative;\n}\n.carousel-inner {\n  position: relative;\n  width: 100%;\n  overflow: hidden;\n}\n.carousel-inner > .item {\n  position: relative;\n  display: none;\n  -webkit-transition: .6s ease-in-out left;\n       -o-transition: .6s ease-in-out left;\n          transition: .6s ease-in-out left;\n}\n.carousel-inner > .item > img,\n.carousel-inner > .item > a > img {\n  line-height: 1;\n}\n@media all and (transform-3d), (-webkit-transform-3d) {\n  .carousel-inner > .item {\n    -webkit-transition: -webkit-transform .6s ease-in-out;\n         -o-transition:      -o-transform .6s ease-in-out;\n            transition:         transform .6s ease-in-out;\n\n    -webkit-backface-visibility: hidden;\n            backface-visibility: hidden;\n    -webkit-perspective: 1000px;\n            perspective: 1000px;\n  }\n  .carousel-inner > .item.next,\n  .carousel-inner > .item.active.right {\n    left: 0;\n    -webkit-transform: translate3d(100%, 0, 0);\n            transform: translate3d(100%, 0, 0);\n  }\n  .carousel-inner > .item.prev,\n  .carousel-inner > .item.active.left {\n    left: 0;\n    -webkit-transform: translate3d(-100%, 0, 0);\n            transform: translate3d(-100%, 0, 0);\n  }\n  .carousel-inner > .item.next.left,\n  .carousel-inner > .item.prev.right,\n  .carousel-inner > .item.active {\n    left: 0;\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n.carousel-inner > .active,\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  display: block;\n}\n.carousel-inner > .active {\n  left: 0;\n}\n.carousel-inner > .next,\n.carousel-inner > .prev {\n  position: absolute;\n  top: 0;\n  width: 100%;\n}\n.carousel-inner > .next {\n  left: 100%;\n}\n.carousel-inner > .prev {\n  left: -100%;\n}\n.carousel-inner > .next.left,\n.carousel-inner > .prev.right {\n  left: 0;\n}\n.carousel-inner > .active.left {\n  left: -100%;\n}\n.carousel-inner > .active.right {\n  left: 100%;\n}\n.carousel-control {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 15%;\n  font-size: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n  background-color: rgba(0, 0, 0, 0);\n  filter: alpha(opacity=50);\n  opacity: .5;\n}\n.carousel-control.left {\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .5)), to(rgba(0, 0, 0, .0001)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .5) 0%, rgba(0, 0, 0, .0001) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control.right {\n  right: 0;\n  left: auto;\n  background-image: -webkit-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image:      -o-linear-gradient(left, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  background-image: -webkit-gradient(linear, left top, right top, from(rgba(0, 0, 0, .0001)), to(rgba(0, 0, 0, .5)));\n  background-image:         linear-gradient(to right, rgba(0, 0, 0, .0001) 0%, rgba(0, 0, 0, .5) 100%);\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1);\n  background-repeat: repeat-x;\n}\n.carousel-control:hover,\n.carousel-control:focus {\n  color: #fff;\n  text-decoration: none;\n  filter: alpha(opacity=90);\n  outline: 0;\n  opacity: .9;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-left,\n.carousel-control .glyphicon-chevron-right {\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .glyphicon-chevron-left {\n  left: 50%;\n  margin-left: -10px;\n}\n.carousel-control .icon-next,\n.carousel-control .glyphicon-chevron-right {\n  right: 50%;\n  margin-right: -10px;\n}\n.carousel-control .icon-prev,\n.carousel-control .icon-next {\n  width: 20px;\n  height: 20px;\n  font-family: serif;\n  line-height: 1;\n}\n.carousel-control .icon-prev:before {\n  content: '\\2039';\n}\n.carousel-control .icon-next:before {\n  content: '\\203a';\n}\n.carousel-indicators {\n  position: absolute;\n  bottom: 10px;\n  left: 50%;\n  z-index: 15;\n  width: 60%;\n  padding-left: 0;\n  margin-left: -30%;\n  text-align: center;\n  list-style: none;\n}\n.carousel-indicators li {\n  display: inline-block;\n  width: 10px;\n  height: 10px;\n  margin: 1px;\n  text-indent: -999px;\n  cursor: pointer;\n  background-color: #000 \\9;\n  background-color: rgba(0, 0, 0, 0);\n  border: 1px solid #fff;\n  border-radius: 10px;\n}\n.carousel-indicators .active {\n  width: 12px;\n  height: 12px;\n  margin: 0;\n  background-color: #fff;\n}\n.carousel-caption {\n  position: absolute;\n  right: 15%;\n  bottom: 20px;\n  left: 15%;\n  z-index: 10;\n  padding-top: 20px;\n  padding-bottom: 20px;\n  color: #fff;\n  text-align: center;\n  text-shadow: 0 1px 2px rgba(0, 0, 0, .6);\n}\n.carousel-caption .btn {\n  text-shadow: none;\n}\n@media screen and (min-width: 768px) {\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-prev,\n  .carousel-control .icon-next {\n    width: 30px;\n    height: 30px;\n    margin-top: -10px;\n    font-size: 30px;\n  }\n  .carousel-control .glyphicon-chevron-left,\n  .carousel-control .icon-prev {\n    margin-left: -10px;\n  }\n  .carousel-control .glyphicon-chevron-right,\n  .carousel-control .icon-next {\n    margin-right: -10px;\n  }\n  .carousel-caption {\n    right: 20%;\n    left: 20%;\n    padding-bottom: 30px;\n  }\n  .carousel-indicators {\n    bottom: 20px;\n  }\n}\n.clearfix:before,\n.clearfix:after,\n.dl-horizontal dd:before,\n.dl-horizontal dd:after,\n.container:before,\n.container:after,\n.container-fluid:before,\n.container-fluid:after,\n.row:before,\n.row:after,\n.form-horizontal .form-group:before,\n.form-horizontal .form-group:after,\n.btn-toolbar:before,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:before,\n.btn-group-vertical > .btn-group:after,\n.nav:before,\n.nav:after,\n.navbar:before,\n.navbar:after,\n.navbar-header:before,\n.navbar-header:after,\n.navbar-collapse:before,\n.navbar-collapse:after,\n.pager:before,\n.pager:after,\n.panel-body:before,\n.panel-body:after,\n.modal-header:before,\n.modal-header:after,\n.modal-footer:before,\n.modal-footer:after {\n  display: table;\n  content: \" \";\n}\n.clearfix:after,\n.dl-horizontal dd:after,\n.container:after,\n.container-fluid:after,\n.row:after,\n.form-horizontal .form-group:after,\n.btn-toolbar:after,\n.btn-group-vertical > .btn-group:after,\n.nav:after,\n.navbar:after,\n.navbar-header:after,\n.navbar-collapse:after,\n.pager:after,\n.panel-body:after,\n.modal-header:after,\n.modal-footer:after {\n  clear: both;\n}\n.center-block {\n  display: block;\n  margin-right: auto;\n  margin-left: auto;\n}\n.pull-right {\n  float: right !important;\n}\n.pull-left {\n  float: left !important;\n}\n.hide {\n  display: none !important;\n}\n.show {\n  display: block !important;\n}\n.invisible {\n  visibility: hidden;\n}\n.text-hide {\n  font: 0/0 a;\n  color: transparent;\n  text-shadow: none;\n  background-color: transparent;\n  border: 0;\n}\n.hidden {\n  display: none !important;\n}\n.affix {\n  position: fixed;\n}\n@-ms-viewport {\n  width: device-width;\n}\n.visible-xs,\n.visible-sm,\n.visible-md,\n.visible-lg {\n  display: none !important;\n}\n.visible-xs-block,\n.visible-xs-inline,\n.visible-xs-inline-block,\n.visible-sm-block,\n.visible-sm-inline,\n.visible-sm-inline-block,\n.visible-md-block,\n.visible-md-inline,\n.visible-md-inline-block,\n.visible-lg-block,\n.visible-lg-inline,\n.visible-lg-inline-block {\n  display: none !important;\n}\n@media (max-width: 767px) {\n  .visible-xs {\n    display: block !important;\n  }\n  table.visible-xs {\n    display: table !important;\n  }\n  tr.visible-xs {\n    display: table-row !important;\n  }\n  th.visible-xs,\n  td.visible-xs {\n    display: table-cell !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-block {\n    display: block !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline {\n    display: inline !important;\n  }\n}\n@media (max-width: 767px) {\n  .visible-xs-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm {\n    display: block !important;\n  }\n  table.visible-sm {\n    display: table !important;\n  }\n  tr.visible-sm {\n    display: table-row !important;\n  }\n  th.visible-sm,\n  td.visible-sm {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-block {\n    display: block !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .visible-sm-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md {\n    display: block !important;\n  }\n  table.visible-md {\n    display: table !important;\n  }\n  tr.visible-md {\n    display: table-row !important;\n  }\n  th.visible-md,\n  td.visible-md {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-block {\n    display: block !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .visible-md-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg {\n    display: block !important;\n  }\n  table.visible-lg {\n    display: table !important;\n  }\n  tr.visible-lg {\n    display: table-row !important;\n  }\n  th.visible-lg,\n  td.visible-lg {\n    display: table-cell !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-block {\n    display: block !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline {\n    display: inline !important;\n  }\n}\n@media (min-width: 1200px) {\n  .visible-lg-inline-block {\n    display: inline-block !important;\n  }\n}\n@media (max-width: 767px) {\n  .hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print {\n  display: none !important;\n}\n@media print {\n  .visible-print {\n    display: block !important;\n  }\n  table.visible-print {\n    display: table !important;\n  }\n  tr.visible-print {\n    display: table-row !important;\n  }\n  th.visible-print,\n  td.visible-print {\n    display: table-cell !important;\n  }\n}\n.visible-print-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-block {\n    display: block !important;\n  }\n}\n.visible-print-inline {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline {\n    display: inline !important;\n  }\n}\n.visible-print-inline-block {\n  display: none !important;\n}\n@media print {\n  .visible-print-inline-block {\n    display: inline-block !important;\n  }\n}\n@media print {\n  .hidden-print {\n    display: none !important;\n  }\n}\n/*# sourceMappingURL=bootstrap.css.map */\n"
  },
  {
    "path": "src/lib/bootstrap-3.3.7-dist/js/bootstrap.js",
    "content": "/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\n\nif (typeof jQuery === 'undefined') {\n  throw new Error('Bootstrap\\'s JavaScript requires jQuery')\n}\n\n+function ($) {\n  'use strict';\n  var version = $.fn.jquery.split(' ')[0].split('.')\n  if ((version[0] < 2 && version[1] < 9) || (version[0] == 1 && version[1] == 9 && version[2] < 1) || (version[0] > 3)) {\n    throw new Error('Bootstrap\\'s JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4')\n  }\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: transition.js v3.3.7\n * http://getbootstrap.com/javascript/#transitions\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CSS TRANSITION SUPPORT (Shoutout: http://www.modernizr.com/)\n  // ============================================================\n\n  function transitionEnd() {\n    var el = document.createElement('bootstrap')\n\n    var transEndEventNames = {\n      WebkitTransition : 'webkitTransitionEnd',\n      MozTransition    : 'transitionend',\n      OTransition      : 'oTransitionEnd otransitionend',\n      transition       : 'transitionend'\n    }\n\n    for (var name in transEndEventNames) {\n      if (el.style[name] !== undefined) {\n        return { end: transEndEventNames[name] }\n      }\n    }\n\n    return false // explicit for ie8 (  ._.)\n  }\n\n  // http://blog.alexmaccaw.com/css-transitions\n  $.fn.emulateTransitionEnd = function (duration) {\n    var called = false\n    var $el = this\n    $(this).one('bsTransitionEnd', function () { called = true })\n    var callback = function () { if (!called) $($el).trigger($.support.transition.end) }\n    setTimeout(callback, duration)\n    return this\n  }\n\n  $(function () {\n    $.support.transition = transitionEnd()\n\n    if (!$.support.transition) return\n\n    $.event.special.bsTransitionEnd = {\n      bindType: $.support.transition.end,\n      delegateType: $.support.transition.end,\n      handle: function (e) {\n        if ($(e.target).is(this)) return e.handleObj.handler.apply(this, arguments)\n      }\n    }\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: alert.js v3.3.7\n * http://getbootstrap.com/javascript/#alerts\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // ALERT CLASS DEFINITION\n  // ======================\n\n  var dismiss = '[data-dismiss=\"alert\"]'\n  var Alert   = function (el) {\n    $(el).on('click', dismiss, this.close)\n  }\n\n  Alert.VERSION = '3.3.7'\n\n  Alert.TRANSITION_DURATION = 150\n\n  Alert.prototype.close = function (e) {\n    var $this    = $(this)\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = $(selector === '#' ? [] : selector)\n\n    if (e) e.preventDefault()\n\n    if (!$parent.length) {\n      $parent = $this.closest('.alert')\n    }\n\n    $parent.trigger(e = $.Event('close.bs.alert'))\n\n    if (e.isDefaultPrevented()) return\n\n    $parent.removeClass('in')\n\n    function removeElement() {\n      // detach from parent, fire event then clean up data\n      $parent.detach().trigger('closed.bs.alert').remove()\n    }\n\n    $.support.transition && $parent.hasClass('fade') ?\n      $parent\n        .one('bsTransitionEnd', removeElement)\n        .emulateTransitionEnd(Alert.TRANSITION_DURATION) :\n      removeElement()\n  }\n\n\n  // ALERT PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.alert')\n\n      if (!data) $this.data('bs.alert', (data = new Alert(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.alert\n\n  $.fn.alert             = Plugin\n  $.fn.alert.Constructor = Alert\n\n\n  // ALERT NO CONFLICT\n  // =================\n\n  $.fn.alert.noConflict = function () {\n    $.fn.alert = old\n    return this\n  }\n\n\n  // ALERT DATA-API\n  // ==============\n\n  $(document).on('click.bs.alert.data-api', dismiss, Alert.prototype.close)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: button.js v3.3.7\n * http://getbootstrap.com/javascript/#buttons\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // BUTTON PUBLIC CLASS DEFINITION\n  // ==============================\n\n  var Button = function (element, options) {\n    this.$element  = $(element)\n    this.options   = $.extend({}, Button.DEFAULTS, options)\n    this.isLoading = false\n  }\n\n  Button.VERSION  = '3.3.7'\n\n  Button.DEFAULTS = {\n    loadingText: 'loading...'\n  }\n\n  Button.prototype.setState = function (state) {\n    var d    = 'disabled'\n    var $el  = this.$element\n    var val  = $el.is('input') ? 'val' : 'html'\n    var data = $el.data()\n\n    state += 'Text'\n\n    if (data.resetText == null) $el.data('resetText', $el[val]())\n\n    // push to event loop to allow forms to submit\n    setTimeout($.proxy(function () {\n      $el[val](data[state] == null ? this.options[state] : data[state])\n\n      if (state == 'loadingText') {\n        this.isLoading = true\n        $el.addClass(d).attr(d, d).prop(d, true)\n      } else if (this.isLoading) {\n        this.isLoading = false\n        $el.removeClass(d).removeAttr(d).prop(d, false)\n      }\n    }, this), 0)\n  }\n\n  Button.prototype.toggle = function () {\n    var changed = true\n    var $parent = this.$element.closest('[data-toggle=\"buttons\"]')\n\n    if ($parent.length) {\n      var $input = this.$element.find('input')\n      if ($input.prop('type') == 'radio') {\n        if ($input.prop('checked')) changed = false\n        $parent.find('.active').removeClass('active')\n        this.$element.addClass('active')\n      } else if ($input.prop('type') == 'checkbox') {\n        if (($input.prop('checked')) !== this.$element.hasClass('active')) changed = false\n        this.$element.toggleClass('active')\n      }\n      $input.prop('checked', this.$element.hasClass('active'))\n      if (changed) $input.trigger('change')\n    } else {\n      this.$element.attr('aria-pressed', !this.$element.hasClass('active'))\n      this.$element.toggleClass('active')\n    }\n  }\n\n\n  // BUTTON PLUGIN DEFINITION\n  // ========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.button')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.button', (data = new Button(this, options)))\n\n      if (option == 'toggle') data.toggle()\n      else if (option) data.setState(option)\n    })\n  }\n\n  var old = $.fn.button\n\n  $.fn.button             = Plugin\n  $.fn.button.Constructor = Button\n\n\n  // BUTTON NO CONFLICT\n  // ==================\n\n  $.fn.button.noConflict = function () {\n    $.fn.button = old\n    return this\n  }\n\n\n  // BUTTON DATA-API\n  // ===============\n\n  $(document)\n    .on('click.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      var $btn = $(e.target).closest('.btn')\n      Plugin.call($btn, 'toggle')\n      if (!($(e.target).is('input[type=\"radio\"], input[type=\"checkbox\"]'))) {\n        // Prevent double click on radios, and the double selections (so cancellation) on checkboxes\n        e.preventDefault()\n        // The target component still receive the focus\n        if ($btn.is('input,button')) $btn.trigger('focus')\n        else $btn.find('input:visible,button:visible').first().trigger('focus')\n      }\n    })\n    .on('focus.bs.button.data-api blur.bs.button.data-api', '[data-toggle^=\"button\"]', function (e) {\n      $(e.target).closest('.btn').toggleClass('focus', /^focus(in)?$/.test(e.type))\n    })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: carousel.js v3.3.7\n * http://getbootstrap.com/javascript/#carousel\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // CAROUSEL CLASS DEFINITION\n  // =========================\n\n  var Carousel = function (element, options) {\n    this.$element    = $(element)\n    this.$indicators = this.$element.find('.carousel-indicators')\n    this.options     = options\n    this.paused      = null\n    this.sliding     = null\n    this.interval    = null\n    this.$active     = null\n    this.$items      = null\n\n    this.options.keyboard && this.$element.on('keydown.bs.carousel', $.proxy(this.keydown, this))\n\n    this.options.pause == 'hover' && !('ontouchstart' in document.documentElement) && this.$element\n      .on('mouseenter.bs.carousel', $.proxy(this.pause, this))\n      .on('mouseleave.bs.carousel', $.proxy(this.cycle, this))\n  }\n\n  Carousel.VERSION  = '3.3.7'\n\n  Carousel.TRANSITION_DURATION = 600\n\n  Carousel.DEFAULTS = {\n    interval: 5000,\n    pause: 'hover',\n    wrap: true,\n    keyboard: true\n  }\n\n  Carousel.prototype.keydown = function (e) {\n    if (/input|textarea/i.test(e.target.tagName)) return\n    switch (e.which) {\n      case 37: this.prev(); break\n      case 39: this.next(); break\n      default: return\n    }\n\n    e.preventDefault()\n  }\n\n  Carousel.prototype.cycle = function (e) {\n    e || (this.paused = false)\n\n    this.interval && clearInterval(this.interval)\n\n    this.options.interval\n      && !this.paused\n      && (this.interval = setInterval($.proxy(this.next, this), this.options.interval))\n\n    return this\n  }\n\n  Carousel.prototype.getItemIndex = function (item) {\n    this.$items = item.parent().children('.item')\n    return this.$items.index(item || this.$active)\n  }\n\n  Carousel.prototype.getItemForDirection = function (direction, active) {\n    var activeIndex = this.getItemIndex(active)\n    var willWrap = (direction == 'prev' && activeIndex === 0)\n                || (direction == 'next' && activeIndex == (this.$items.length - 1))\n    if (willWrap && !this.options.wrap) return active\n    var delta = direction == 'prev' ? -1 : 1\n    var itemIndex = (activeIndex + delta) % this.$items.length\n    return this.$items.eq(itemIndex)\n  }\n\n  Carousel.prototype.to = function (pos) {\n    var that        = this\n    var activeIndex = this.getItemIndex(this.$active = this.$element.find('.item.active'))\n\n    if (pos > (this.$items.length - 1) || pos < 0) return\n\n    if (this.sliding)       return this.$element.one('slid.bs.carousel', function () { that.to(pos) }) // yes, \"slid\"\n    if (activeIndex == pos) return this.pause().cycle()\n\n    return this.slide(pos > activeIndex ? 'next' : 'prev', this.$items.eq(pos))\n  }\n\n  Carousel.prototype.pause = function (e) {\n    e || (this.paused = true)\n\n    if (this.$element.find('.next, .prev').length && $.support.transition) {\n      this.$element.trigger($.support.transition.end)\n      this.cycle(true)\n    }\n\n    this.interval = clearInterval(this.interval)\n\n    return this\n  }\n\n  Carousel.prototype.next = function () {\n    if (this.sliding) return\n    return this.slide('next')\n  }\n\n  Carousel.prototype.prev = function () {\n    if (this.sliding) return\n    return this.slide('prev')\n  }\n\n  Carousel.prototype.slide = function (type, next) {\n    var $active   = this.$element.find('.item.active')\n    var $next     = next || this.getItemForDirection(type, $active)\n    var isCycling = this.interval\n    var direction = type == 'next' ? 'left' : 'right'\n    var that      = this\n\n    if ($next.hasClass('active')) return (this.sliding = false)\n\n    var relatedTarget = $next[0]\n    var slideEvent = $.Event('slide.bs.carousel', {\n      relatedTarget: relatedTarget,\n      direction: direction\n    })\n    this.$element.trigger(slideEvent)\n    if (slideEvent.isDefaultPrevented()) return\n\n    this.sliding = true\n\n    isCycling && this.pause()\n\n    if (this.$indicators.length) {\n      this.$indicators.find('.active').removeClass('active')\n      var $nextIndicator = $(this.$indicators.children()[this.getItemIndex($next)])\n      $nextIndicator && $nextIndicator.addClass('active')\n    }\n\n    var slidEvent = $.Event('slid.bs.carousel', { relatedTarget: relatedTarget, direction: direction }) // yes, \"slid\"\n    if ($.support.transition && this.$element.hasClass('slide')) {\n      $next.addClass(type)\n      $next[0].offsetWidth // force reflow\n      $active.addClass(direction)\n      $next.addClass(direction)\n      $active\n        .one('bsTransitionEnd', function () {\n          $next.removeClass([type, direction].join(' ')).addClass('active')\n          $active.removeClass(['active', direction].join(' '))\n          that.sliding = false\n          setTimeout(function () {\n            that.$element.trigger(slidEvent)\n          }, 0)\n        })\n        .emulateTransitionEnd(Carousel.TRANSITION_DURATION)\n    } else {\n      $active.removeClass('active')\n      $next.addClass('active')\n      this.sliding = false\n      this.$element.trigger(slidEvent)\n    }\n\n    isCycling && this.cycle()\n\n    return this\n  }\n\n\n  // CAROUSEL PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.carousel')\n      var options = $.extend({}, Carousel.DEFAULTS, $this.data(), typeof option == 'object' && option)\n      var action  = typeof option == 'string' ? option : options.slide\n\n      if (!data) $this.data('bs.carousel', (data = new Carousel(this, options)))\n      if (typeof option == 'number') data.to(option)\n      else if (action) data[action]()\n      else if (options.interval) data.pause().cycle()\n    })\n  }\n\n  var old = $.fn.carousel\n\n  $.fn.carousel             = Plugin\n  $.fn.carousel.Constructor = Carousel\n\n\n  // CAROUSEL NO CONFLICT\n  // ====================\n\n  $.fn.carousel.noConflict = function () {\n    $.fn.carousel = old\n    return this\n  }\n\n\n  // CAROUSEL DATA-API\n  // =================\n\n  var clickHandler = function (e) {\n    var href\n    var $this   = $(this)\n    var $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '')) // strip for ie7\n    if (!$target.hasClass('carousel')) return\n    var options = $.extend({}, $target.data(), $this.data())\n    var slideIndex = $this.attr('data-slide-to')\n    if (slideIndex) options.interval = false\n\n    Plugin.call($target, options)\n\n    if (slideIndex) {\n      $target.data('bs.carousel').to(slideIndex)\n    }\n\n    e.preventDefault()\n  }\n\n  $(document)\n    .on('click.bs.carousel.data-api', '[data-slide]', clickHandler)\n    .on('click.bs.carousel.data-api', '[data-slide-to]', clickHandler)\n\n  $(window).on('load', function () {\n    $('[data-ride=\"carousel\"]').each(function () {\n      var $carousel = $(this)\n      Plugin.call($carousel, $carousel.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: collapse.js v3.3.7\n * http://getbootstrap.com/javascript/#collapse\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n/* jshint latedef: false */\n\n+function ($) {\n  'use strict';\n\n  // COLLAPSE PUBLIC CLASS DEFINITION\n  // ================================\n\n  var Collapse = function (element, options) {\n    this.$element      = $(element)\n    this.options       = $.extend({}, Collapse.DEFAULTS, options)\n    this.$trigger      = $('[data-toggle=\"collapse\"][href=\"#' + element.id + '\"],' +\n                           '[data-toggle=\"collapse\"][data-target=\"#' + element.id + '\"]')\n    this.transitioning = null\n\n    if (this.options.parent) {\n      this.$parent = this.getParent()\n    } else {\n      this.addAriaAndCollapsedClass(this.$element, this.$trigger)\n    }\n\n    if (this.options.toggle) this.toggle()\n  }\n\n  Collapse.VERSION  = '3.3.7'\n\n  Collapse.TRANSITION_DURATION = 350\n\n  Collapse.DEFAULTS = {\n    toggle: true\n  }\n\n  Collapse.prototype.dimension = function () {\n    var hasWidth = this.$element.hasClass('width')\n    return hasWidth ? 'width' : 'height'\n  }\n\n  Collapse.prototype.show = function () {\n    if (this.transitioning || this.$element.hasClass('in')) return\n\n    var activesData\n    var actives = this.$parent && this.$parent.children('.panel').children('.in, .collapsing')\n\n    if (actives && actives.length) {\n      activesData = actives.data('bs.collapse')\n      if (activesData && activesData.transitioning) return\n    }\n\n    var startEvent = $.Event('show.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    if (actives && actives.length) {\n      Plugin.call(actives, 'hide')\n      activesData || actives.data('bs.collapse', null)\n    }\n\n    var dimension = this.dimension()\n\n    this.$element\n      .removeClass('collapse')\n      .addClass('collapsing')[dimension](0)\n      .attr('aria-expanded', true)\n\n    this.$trigger\n      .removeClass('collapsed')\n      .attr('aria-expanded', true)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse in')[dimension]('')\n      this.transitioning = 0\n      this.$element\n        .trigger('shown.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    var scrollSize = $.camelCase(['scroll', dimension].join('-'))\n\n    this.$element\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)[dimension](this.$element[0][scrollSize])\n  }\n\n  Collapse.prototype.hide = function () {\n    if (this.transitioning || !this.$element.hasClass('in')) return\n\n    var startEvent = $.Event('hide.bs.collapse')\n    this.$element.trigger(startEvent)\n    if (startEvent.isDefaultPrevented()) return\n\n    var dimension = this.dimension()\n\n    this.$element[dimension](this.$element[dimension]())[0].offsetHeight\n\n    this.$element\n      .addClass('collapsing')\n      .removeClass('collapse in')\n      .attr('aria-expanded', false)\n\n    this.$trigger\n      .addClass('collapsed')\n      .attr('aria-expanded', false)\n\n    this.transitioning = 1\n\n    var complete = function () {\n      this.transitioning = 0\n      this.$element\n        .removeClass('collapsing')\n        .addClass('collapse')\n        .trigger('hidden.bs.collapse')\n    }\n\n    if (!$.support.transition) return complete.call(this)\n\n    this.$element\n      [dimension](0)\n      .one('bsTransitionEnd', $.proxy(complete, this))\n      .emulateTransitionEnd(Collapse.TRANSITION_DURATION)\n  }\n\n  Collapse.prototype.toggle = function () {\n    this[this.$element.hasClass('in') ? 'hide' : 'show']()\n  }\n\n  Collapse.prototype.getParent = function () {\n    return $(this.options.parent)\n      .find('[data-toggle=\"collapse\"][data-parent=\"' + this.options.parent + '\"]')\n      .each($.proxy(function (i, element) {\n        var $element = $(element)\n        this.addAriaAndCollapsedClass(getTargetFromTrigger($element), $element)\n      }, this))\n      .end()\n  }\n\n  Collapse.prototype.addAriaAndCollapsedClass = function ($element, $trigger) {\n    var isOpen = $element.hasClass('in')\n\n    $element.attr('aria-expanded', isOpen)\n    $trigger\n      .toggleClass('collapsed', !isOpen)\n      .attr('aria-expanded', isOpen)\n  }\n\n  function getTargetFromTrigger($trigger) {\n    var href\n    var target = $trigger.attr('data-target')\n      || (href = $trigger.attr('href')) && href.replace(/.*(?=#[^\\s]+$)/, '') // strip for ie7\n\n    return $(target)\n  }\n\n\n  // COLLAPSE PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.collapse')\n      var options = $.extend({}, Collapse.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data && options.toggle && /show|hide/.test(option)) options.toggle = false\n      if (!data) $this.data('bs.collapse', (data = new Collapse(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.collapse\n\n  $.fn.collapse             = Plugin\n  $.fn.collapse.Constructor = Collapse\n\n\n  // COLLAPSE NO CONFLICT\n  // ====================\n\n  $.fn.collapse.noConflict = function () {\n    $.fn.collapse = old\n    return this\n  }\n\n\n  // COLLAPSE DATA-API\n  // =================\n\n  $(document).on('click.bs.collapse.data-api', '[data-toggle=\"collapse\"]', function (e) {\n    var $this   = $(this)\n\n    if (!$this.attr('data-target')) e.preventDefault()\n\n    var $target = getTargetFromTrigger($this)\n    var data    = $target.data('bs.collapse')\n    var option  = data ? 'toggle' : $this.data()\n\n    Plugin.call($target, option)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: dropdown.js v3.3.7\n * http://getbootstrap.com/javascript/#dropdowns\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // DROPDOWN CLASS DEFINITION\n  // =========================\n\n  var backdrop = '.dropdown-backdrop'\n  var toggle   = '[data-toggle=\"dropdown\"]'\n  var Dropdown = function (element) {\n    $(element).on('click.bs.dropdown', this.toggle)\n  }\n\n  Dropdown.VERSION = '3.3.7'\n\n  function getParent($this) {\n    var selector = $this.attr('data-target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    var $parent = selector && $(selector)\n\n    return $parent && $parent.length ? $parent : $this.parent()\n  }\n\n  function clearMenus(e) {\n    if (e && e.which === 3) return\n    $(backdrop).remove()\n    $(toggle).each(function () {\n      var $this         = $(this)\n      var $parent       = getParent($this)\n      var relatedTarget = { relatedTarget: this }\n\n      if (!$parent.hasClass('open')) return\n\n      if (e && e.type == 'click' && /input|textarea/i.test(e.target.tagName) && $.contains($parent[0], e.target)) return\n\n      $parent.trigger(e = $.Event('hide.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this.attr('aria-expanded', 'false')\n      $parent.removeClass('open').trigger($.Event('hidden.bs.dropdown', relatedTarget))\n    })\n  }\n\n  Dropdown.prototype.toggle = function (e) {\n    var $this = $(this)\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    clearMenus()\n\n    if (!isActive) {\n      if ('ontouchstart' in document.documentElement && !$parent.closest('.navbar-nav').length) {\n        // if mobile we use a backdrop because click events don't delegate\n        $(document.createElement('div'))\n          .addClass('dropdown-backdrop')\n          .insertAfter($(this))\n          .on('click', clearMenus)\n      }\n\n      var relatedTarget = { relatedTarget: this }\n      $parent.trigger(e = $.Event('show.bs.dropdown', relatedTarget))\n\n      if (e.isDefaultPrevented()) return\n\n      $this\n        .trigger('focus')\n        .attr('aria-expanded', 'true')\n\n      $parent\n        .toggleClass('open')\n        .trigger($.Event('shown.bs.dropdown', relatedTarget))\n    }\n\n    return false\n  }\n\n  Dropdown.prototype.keydown = function (e) {\n    if (!/(38|40|27|32)/.test(e.which) || /input|textarea/i.test(e.target.tagName)) return\n\n    var $this = $(this)\n\n    e.preventDefault()\n    e.stopPropagation()\n\n    if ($this.is('.disabled, :disabled')) return\n\n    var $parent  = getParent($this)\n    var isActive = $parent.hasClass('open')\n\n    if (!isActive && e.which != 27 || isActive && e.which == 27) {\n      if (e.which == 27) $parent.find(toggle).trigger('focus')\n      return $this.trigger('click')\n    }\n\n    var desc = ' li:not(.disabled):visible a'\n    var $items = $parent.find('.dropdown-menu' + desc)\n\n    if (!$items.length) return\n\n    var index = $items.index(e.target)\n\n    if (e.which == 38 && index > 0)                 index--         // up\n    if (e.which == 40 && index < $items.length - 1) index++         // down\n    if (!~index)                                    index = 0\n\n    $items.eq(index).trigger('focus')\n  }\n\n\n  // DROPDOWN PLUGIN DEFINITION\n  // ==========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.dropdown')\n\n      if (!data) $this.data('bs.dropdown', (data = new Dropdown(this)))\n      if (typeof option == 'string') data[option].call($this)\n    })\n  }\n\n  var old = $.fn.dropdown\n\n  $.fn.dropdown             = Plugin\n  $.fn.dropdown.Constructor = Dropdown\n\n\n  // DROPDOWN NO CONFLICT\n  // ====================\n\n  $.fn.dropdown.noConflict = function () {\n    $.fn.dropdown = old\n    return this\n  }\n\n\n  // APPLY TO STANDARD DROPDOWN ELEMENTS\n  // ===================================\n\n  $(document)\n    .on('click.bs.dropdown.data-api', clearMenus)\n    .on('click.bs.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n    .on('click.bs.dropdown.data-api', toggle, Dropdown.prototype.toggle)\n    .on('keydown.bs.dropdown.data-api', toggle, Dropdown.prototype.keydown)\n    .on('keydown.bs.dropdown.data-api', '.dropdown-menu', Dropdown.prototype.keydown)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: modal.js v3.3.7\n * http://getbootstrap.com/javascript/#modals\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // MODAL CLASS DEFINITION\n  // ======================\n\n  var Modal = function (element, options) {\n    this.options             = options\n    this.$body               = $(document.body)\n    this.$element            = $(element)\n    this.$dialog             = this.$element.find('.modal-dialog')\n    this.$backdrop           = null\n    this.isShown             = null\n    this.originalBodyPad     = null\n    this.scrollbarWidth      = 0\n    this.ignoreBackdropClick = false\n\n    if (this.options.remote) {\n      this.$element\n        .find('.modal-content')\n        .load(this.options.remote, $.proxy(function () {\n          this.$element.trigger('loaded.bs.modal')\n        }, this))\n    }\n  }\n\n  Modal.VERSION  = '3.3.7'\n\n  Modal.TRANSITION_DURATION = 300\n  Modal.BACKDROP_TRANSITION_DURATION = 150\n\n  Modal.DEFAULTS = {\n    backdrop: true,\n    keyboard: true,\n    show: true\n  }\n\n  Modal.prototype.toggle = function (_relatedTarget) {\n    return this.isShown ? this.hide() : this.show(_relatedTarget)\n  }\n\n  Modal.prototype.show = function (_relatedTarget) {\n    var that = this\n    var e    = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })\n\n    this.$element.trigger(e)\n\n    if (this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = true\n\n    this.checkScrollbar()\n    this.setScrollbar()\n    this.$body.addClass('modal-open')\n\n    this.escape()\n    this.resize()\n\n    this.$element.on('click.dismiss.bs.modal', '[data-dismiss=\"modal\"]', $.proxy(this.hide, this))\n\n    this.$dialog.on('mousedown.dismiss.bs.modal', function () {\n      that.$element.one('mouseup.dismiss.bs.modal', function (e) {\n        if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true\n      })\n    })\n\n    this.backdrop(function () {\n      var transition = $.support.transition && that.$element.hasClass('fade')\n\n      if (!that.$element.parent().length) {\n        that.$element.appendTo(that.$body) // don't move modals dom position\n      }\n\n      that.$element\n        .show()\n        .scrollTop(0)\n\n      that.adjustDialog()\n\n      if (transition) {\n        that.$element[0].offsetWidth // force reflow\n      }\n\n      that.$element.addClass('in')\n\n      that.enforceFocus()\n\n      var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })\n\n      transition ?\n        that.$dialog // wait for modal to slide in\n          .one('bsTransitionEnd', function () {\n            that.$element.trigger('focus').trigger(e)\n          })\n          .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n        that.$element.trigger('focus').trigger(e)\n    })\n  }\n\n  Modal.prototype.hide = function (e) {\n    if (e) e.preventDefault()\n\n    e = $.Event('hide.bs.modal')\n\n    this.$element.trigger(e)\n\n    if (!this.isShown || e.isDefaultPrevented()) return\n\n    this.isShown = false\n\n    this.escape()\n    this.resize()\n\n    $(document).off('focusin.bs.modal')\n\n    this.$element\n      .removeClass('in')\n      .off('click.dismiss.bs.modal')\n      .off('mouseup.dismiss.bs.modal')\n\n    this.$dialog.off('mousedown.dismiss.bs.modal')\n\n    $.support.transition && this.$element.hasClass('fade') ?\n      this.$element\n        .one('bsTransitionEnd', $.proxy(this.hideModal, this))\n        .emulateTransitionEnd(Modal.TRANSITION_DURATION) :\n      this.hideModal()\n  }\n\n  Modal.prototype.enforceFocus = function () {\n    $(document)\n      .off('focusin.bs.modal') // guard against infinite focus loop\n      .on('focusin.bs.modal', $.proxy(function (e) {\n        if (document !== e.target &&\n            this.$element[0] !== e.target &&\n            !this.$element.has(e.target).length) {\n          this.$element.trigger('focus')\n        }\n      }, this))\n  }\n\n  Modal.prototype.escape = function () {\n    if (this.isShown && this.options.keyboard) {\n      this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {\n        e.which == 27 && this.hide()\n      }, this))\n    } else if (!this.isShown) {\n      this.$element.off('keydown.dismiss.bs.modal')\n    }\n  }\n\n  Modal.prototype.resize = function () {\n    if (this.isShown) {\n      $(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))\n    } else {\n      $(window).off('resize.bs.modal')\n    }\n  }\n\n  Modal.prototype.hideModal = function () {\n    var that = this\n    this.$element.hide()\n    this.backdrop(function () {\n      that.$body.removeClass('modal-open')\n      that.resetAdjustments()\n      that.resetScrollbar()\n      that.$element.trigger('hidden.bs.modal')\n    })\n  }\n\n  Modal.prototype.removeBackdrop = function () {\n    this.$backdrop && this.$backdrop.remove()\n    this.$backdrop = null\n  }\n\n  Modal.prototype.backdrop = function (callback) {\n    var that = this\n    var animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n    if (this.isShown && this.options.backdrop) {\n      var doAnimate = $.support.transition && animate\n\n      this.$backdrop = $(document.createElement('div'))\n        .addClass('modal-backdrop ' + animate)\n        .appendTo(this.$body)\n\n      this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {\n        if (this.ignoreBackdropClick) {\n          this.ignoreBackdropClick = false\n          return\n        }\n        if (e.target !== e.currentTarget) return\n        this.options.backdrop == 'static'\n          ? this.$element[0].focus()\n          : this.hide()\n      }, this))\n\n      if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n      this.$backdrop.addClass('in')\n\n      if (!callback) return\n\n      doAnimate ?\n        this.$backdrop\n          .one('bsTransitionEnd', callback)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callback()\n\n    } else if (!this.isShown && this.$backdrop) {\n      this.$backdrop.removeClass('in')\n\n      var callbackRemove = function () {\n        that.removeBackdrop()\n        callback && callback()\n      }\n      $.support.transition && this.$element.hasClass('fade') ?\n        this.$backdrop\n          .one('bsTransitionEnd', callbackRemove)\n          .emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :\n        callbackRemove()\n\n    } else if (callback) {\n      callback()\n    }\n  }\n\n  // these following methods are used to handle overflowing modals\n\n  Modal.prototype.handleUpdate = function () {\n    this.adjustDialog()\n  }\n\n  Modal.prototype.adjustDialog = function () {\n    var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight\n\n    this.$element.css({\n      paddingLeft:  !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',\n      paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''\n    })\n  }\n\n  Modal.prototype.resetAdjustments = function () {\n    this.$element.css({\n      paddingLeft: '',\n      paddingRight: ''\n    })\n  }\n\n  Modal.prototype.checkScrollbar = function () {\n    var fullWindowWidth = window.innerWidth\n    if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8\n      var documentElementRect = document.documentElement.getBoundingClientRect()\n      fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)\n    }\n    this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth\n    this.scrollbarWidth = this.measureScrollbar()\n  }\n\n  Modal.prototype.setScrollbar = function () {\n    var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)\n    this.originalBodyPad = document.body.style.paddingRight || ''\n    if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)\n  }\n\n  Modal.prototype.resetScrollbar = function () {\n    this.$body.css('padding-right', this.originalBodyPad)\n  }\n\n  Modal.prototype.measureScrollbar = function () { // thx walsh\n    var scrollDiv = document.createElement('div')\n    scrollDiv.className = 'modal-scrollbar-measure'\n    this.$body.append(scrollDiv)\n    var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth\n    this.$body[0].removeChild(scrollDiv)\n    return scrollbarWidth\n  }\n\n\n  // MODAL PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option, _relatedTarget) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.modal')\n      var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)\n\n      if (!data) $this.data('bs.modal', (data = new Modal(this, options)))\n      if (typeof option == 'string') data[option](_relatedTarget)\n      else if (options.show) data.show(_relatedTarget)\n    })\n  }\n\n  var old = $.fn.modal\n\n  $.fn.modal             = Plugin\n  $.fn.modal.Constructor = Modal\n\n\n  // MODAL NO CONFLICT\n  // =================\n\n  $.fn.modal.noConflict = function () {\n    $.fn.modal = old\n    return this\n  }\n\n\n  // MODAL DATA-API\n  // ==============\n\n  $(document).on('click.bs.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n    var $this   = $(this)\n    var href    = $this.attr('href')\n    var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) // strip for ie7\n    var option  = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())\n\n    if ($this.is('a')) e.preventDefault()\n\n    $target.one('show.bs.modal', function (showEvent) {\n      if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown\n      $target.one('hidden.bs.modal', function () {\n        $this.is(':visible') && $this.trigger('focus')\n      })\n    })\n    Plugin.call($target, option, this)\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tooltip.js v3.3.7\n * http://getbootstrap.com/javascript/#tooltip\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TOOLTIP PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Tooltip = function (element, options) {\n    this.type       = null\n    this.options    = null\n    this.enabled    = null\n    this.timeout    = null\n    this.hoverState = null\n    this.$element   = null\n    this.inState    = null\n\n    this.init('tooltip', element, options)\n  }\n\n  Tooltip.VERSION  = '3.3.7'\n\n  Tooltip.TRANSITION_DURATION = 150\n\n  Tooltip.DEFAULTS = {\n    animation: true,\n    placement: 'top',\n    selector: false,\n    template: '<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    container: false,\n    viewport: {\n      selector: 'body',\n      padding: 0\n    }\n  }\n\n  Tooltip.prototype.init = function (type, element, options) {\n    this.enabled   = true\n    this.type      = type\n    this.$element  = $(element)\n    this.options   = this.getOptions(options)\n    this.$viewport = this.options.viewport && $($.isFunction(this.options.viewport) ? this.options.viewport.call(this, this.$element) : (this.options.viewport.selector || this.options.viewport))\n    this.inState   = { click: false, hover: false, focus: false }\n\n    if (this.$element[0] instanceof document.constructor && !this.options.selector) {\n      throw new Error('`selector` option must be specified when initializing ' + this.type + ' on the window.document object!')\n    }\n\n    var triggers = this.options.trigger.split(' ')\n\n    for (var i = triggers.length; i--;) {\n      var trigger = triggers[i]\n\n      if (trigger == 'click') {\n        this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n      } else if (trigger != 'manual') {\n        var eventIn  = trigger == 'hover' ? 'mouseenter' : 'focusin'\n        var eventOut = trigger == 'hover' ? 'mouseleave' : 'focusout'\n\n        this.$element.on(eventIn  + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n        this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n      }\n    }\n\n    this.options.selector ?\n      (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n      this.fixTitle()\n  }\n\n  Tooltip.prototype.getDefaults = function () {\n    return Tooltip.DEFAULTS\n  }\n\n  Tooltip.prototype.getOptions = function (options) {\n    options = $.extend({}, this.getDefaults(), this.$element.data(), options)\n\n    if (options.delay && typeof options.delay == 'number') {\n      options.delay = {\n        show: options.delay,\n        hide: options.delay\n      }\n    }\n\n    return options\n  }\n\n  Tooltip.prototype.getDelegateOptions = function () {\n    var options  = {}\n    var defaults = this.getDefaults()\n\n    this._options && $.each(this._options, function (key, value) {\n      if (defaults[key] != value) options[key] = value\n    })\n\n    return options\n  }\n\n  Tooltip.prototype.enter = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusin' ? 'focus' : 'hover'] = true\n    }\n\n    if (self.tip().hasClass('in') || self.hoverState == 'in') {\n      self.hoverState = 'in'\n      return\n    }\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'in'\n\n    if (!self.options.delay || !self.options.delay.show) return self.show()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'in') self.show()\n    }, self.options.delay.show)\n  }\n\n  Tooltip.prototype.isInStateTrue = function () {\n    for (var key in this.inState) {\n      if (this.inState[key]) return true\n    }\n\n    return false\n  }\n\n  Tooltip.prototype.leave = function (obj) {\n    var self = obj instanceof this.constructor ?\n      obj : $(obj.currentTarget).data('bs.' + this.type)\n\n    if (!self) {\n      self = new this.constructor(obj.currentTarget, this.getDelegateOptions())\n      $(obj.currentTarget).data('bs.' + this.type, self)\n    }\n\n    if (obj instanceof $.Event) {\n      self.inState[obj.type == 'focusout' ? 'focus' : 'hover'] = false\n    }\n\n    if (self.isInStateTrue()) return\n\n    clearTimeout(self.timeout)\n\n    self.hoverState = 'out'\n\n    if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n    self.timeout = setTimeout(function () {\n      if (self.hoverState == 'out') self.hide()\n    }, self.options.delay.hide)\n  }\n\n  Tooltip.prototype.show = function () {\n    var e = $.Event('show.bs.' + this.type)\n\n    if (this.hasContent() && this.enabled) {\n      this.$element.trigger(e)\n\n      var inDom = $.contains(this.$element[0].ownerDocument.documentElement, this.$element[0])\n      if (e.isDefaultPrevented() || !inDom) return\n      var that = this\n\n      var $tip = this.tip()\n\n      var tipId = this.getUID(this.type)\n\n      this.setContent()\n      $tip.attr('id', tipId)\n      this.$element.attr('aria-describedby', tipId)\n\n      if (this.options.animation) $tip.addClass('fade')\n\n      var placement = typeof this.options.placement == 'function' ?\n        this.options.placement.call(this, $tip[0], this.$element[0]) :\n        this.options.placement\n\n      var autoToken = /\\s?auto?\\s?/i\n      var autoPlace = autoToken.test(placement)\n      if (autoPlace) placement = placement.replace(autoToken, '') || 'top'\n\n      $tip\n        .detach()\n        .css({ top: 0, left: 0, display: 'block' })\n        .addClass(placement)\n        .data('bs.' + this.type, this)\n\n      this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n      this.$element.trigger('inserted.bs.' + this.type)\n\n      var pos          = this.getPosition()\n      var actualWidth  = $tip[0].offsetWidth\n      var actualHeight = $tip[0].offsetHeight\n\n      if (autoPlace) {\n        var orgPlacement = placement\n        var viewportDim = this.getPosition(this.$viewport)\n\n        placement = placement == 'bottom' && pos.bottom + actualHeight > viewportDim.bottom ? 'top'    :\n                    placement == 'top'    && pos.top    - actualHeight < viewportDim.top    ? 'bottom' :\n                    placement == 'right'  && pos.right  + actualWidth  > viewportDim.width  ? 'left'   :\n                    placement == 'left'   && pos.left   - actualWidth  < viewportDim.left   ? 'right'  :\n                    placement\n\n        $tip\n          .removeClass(orgPlacement)\n          .addClass(placement)\n      }\n\n      var calculatedOffset = this.getCalculatedOffset(placement, pos, actualWidth, actualHeight)\n\n      this.applyPlacement(calculatedOffset, placement)\n\n      var complete = function () {\n        var prevHoverState = that.hoverState\n        that.$element.trigger('shown.bs.' + that.type)\n        that.hoverState = null\n\n        if (prevHoverState == 'out') that.leave(that)\n      }\n\n      $.support.transition && this.$tip.hasClass('fade') ?\n        $tip\n          .one('bsTransitionEnd', complete)\n          .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n        complete()\n    }\n  }\n\n  Tooltip.prototype.applyPlacement = function (offset, placement) {\n    var $tip   = this.tip()\n    var width  = $tip[0].offsetWidth\n    var height = $tip[0].offsetHeight\n\n    // manually read margins because getBoundingClientRect includes difference\n    var marginTop = parseInt($tip.css('margin-top'), 10)\n    var marginLeft = parseInt($tip.css('margin-left'), 10)\n\n    // we must check for NaN for ie 8/9\n    if (isNaN(marginTop))  marginTop  = 0\n    if (isNaN(marginLeft)) marginLeft = 0\n\n    offset.top  += marginTop\n    offset.left += marginLeft\n\n    // $.fn.offset doesn't round pixel values\n    // so we use setOffset directly with our own function B-0\n    $.offset.setOffset($tip[0], $.extend({\n      using: function (props) {\n        $tip.css({\n          top: Math.round(props.top),\n          left: Math.round(props.left)\n        })\n      }\n    }, offset), 0)\n\n    $tip.addClass('in')\n\n    // check to see if placing tip in new offset caused the tip to resize itself\n    var actualWidth  = $tip[0].offsetWidth\n    var actualHeight = $tip[0].offsetHeight\n\n    if (placement == 'top' && actualHeight != height) {\n      offset.top = offset.top + height - actualHeight\n    }\n\n    var delta = this.getViewportAdjustedDelta(placement, offset, actualWidth, actualHeight)\n\n    if (delta.left) offset.left += delta.left\n    else offset.top += delta.top\n\n    var isVertical          = /top|bottom/.test(placement)\n    var arrowDelta          = isVertical ? delta.left * 2 - width + actualWidth : delta.top * 2 - height + actualHeight\n    var arrowOffsetPosition = isVertical ? 'offsetWidth' : 'offsetHeight'\n\n    $tip.offset(offset)\n    this.replaceArrow(arrowDelta, $tip[0][arrowOffsetPosition], isVertical)\n  }\n\n  Tooltip.prototype.replaceArrow = function (delta, dimension, isVertical) {\n    this.arrow()\n      .css(isVertical ? 'left' : 'top', 50 * (1 - delta / dimension) + '%')\n      .css(isVertical ? 'top' : 'left', '')\n  }\n\n  Tooltip.prototype.setContent = function () {\n    var $tip  = this.tip()\n    var title = this.getTitle()\n\n    $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n    $tip.removeClass('fade in top bottom left right')\n  }\n\n  Tooltip.prototype.hide = function (callback) {\n    var that = this\n    var $tip = $(this.$tip)\n    var e    = $.Event('hide.bs.' + this.type)\n\n    function complete() {\n      if (that.hoverState != 'in') $tip.detach()\n      if (that.$element) { // TODO: Check whether guarding this code with this `if` is really necessary.\n        that.$element\n          .removeAttr('aria-describedby')\n          .trigger('hidden.bs.' + that.type)\n      }\n      callback && callback()\n    }\n\n    this.$element.trigger(e)\n\n    if (e.isDefaultPrevented()) return\n\n    $tip.removeClass('in')\n\n    $.support.transition && $tip.hasClass('fade') ?\n      $tip\n        .one('bsTransitionEnd', complete)\n        .emulateTransitionEnd(Tooltip.TRANSITION_DURATION) :\n      complete()\n\n    this.hoverState = null\n\n    return this\n  }\n\n  Tooltip.prototype.fixTitle = function () {\n    var $e = this.$element\n    if ($e.attr('title') || typeof $e.attr('data-original-title') != 'string') {\n      $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n    }\n  }\n\n  Tooltip.prototype.hasContent = function () {\n    return this.getTitle()\n  }\n\n  Tooltip.prototype.getPosition = function ($element) {\n    $element   = $element || this.$element\n\n    var el     = $element[0]\n    var isBody = el.tagName == 'BODY'\n\n    var elRect    = el.getBoundingClientRect()\n    if (elRect.width == null) {\n      // width and height are missing in IE8, so compute them manually; see https://github.com/twbs/bootstrap/issues/14093\n      elRect = $.extend({}, elRect, { width: elRect.right - elRect.left, height: elRect.bottom - elRect.top })\n    }\n    var isSvg = window.SVGElement && el instanceof window.SVGElement\n    // Avoid using $.offset() on SVGs since it gives incorrect results in jQuery 3.\n    // See https://github.com/twbs/bootstrap/issues/20280\n    var elOffset  = isBody ? { top: 0, left: 0 } : (isSvg ? null : $element.offset())\n    var scroll    = { scroll: isBody ? document.documentElement.scrollTop || document.body.scrollTop : $element.scrollTop() }\n    var outerDims = isBody ? { width: $(window).width(), height: $(window).height() } : null\n\n    return $.extend({}, elRect, scroll, outerDims, elOffset)\n  }\n\n  Tooltip.prototype.getCalculatedOffset = function (placement, pos, actualWidth, actualHeight) {\n    return placement == 'bottom' ? { top: pos.top + pos.height,   left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'top'    ? { top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2 } :\n           placement == 'left'   ? { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth } :\n        /* placement == 'right' */ { top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width }\n\n  }\n\n  Tooltip.prototype.getViewportAdjustedDelta = function (placement, pos, actualWidth, actualHeight) {\n    var delta = { top: 0, left: 0 }\n    if (!this.$viewport) return delta\n\n    var viewportPadding = this.options.viewport && this.options.viewport.padding || 0\n    var viewportDimensions = this.getPosition(this.$viewport)\n\n    if (/right|left/.test(placement)) {\n      var topEdgeOffset    = pos.top - viewportPadding - viewportDimensions.scroll\n      var bottomEdgeOffset = pos.top + viewportPadding - viewportDimensions.scroll + actualHeight\n      if (topEdgeOffset < viewportDimensions.top) { // top overflow\n        delta.top = viewportDimensions.top - topEdgeOffset\n      } else if (bottomEdgeOffset > viewportDimensions.top + viewportDimensions.height) { // bottom overflow\n        delta.top = viewportDimensions.top + viewportDimensions.height - bottomEdgeOffset\n      }\n    } else {\n      var leftEdgeOffset  = pos.left - viewportPadding\n      var rightEdgeOffset = pos.left + viewportPadding + actualWidth\n      if (leftEdgeOffset < viewportDimensions.left) { // left overflow\n        delta.left = viewportDimensions.left - leftEdgeOffset\n      } else if (rightEdgeOffset > viewportDimensions.right) { // right overflow\n        delta.left = viewportDimensions.left + viewportDimensions.width - rightEdgeOffset\n      }\n    }\n\n    return delta\n  }\n\n  Tooltip.prototype.getTitle = function () {\n    var title\n    var $e = this.$element\n    var o  = this.options\n\n    title = $e.attr('data-original-title')\n      || (typeof o.title == 'function' ? o.title.call($e[0]) :  o.title)\n\n    return title\n  }\n\n  Tooltip.prototype.getUID = function (prefix) {\n    do prefix += ~~(Math.random() * 1000000)\n    while (document.getElementById(prefix))\n    return prefix\n  }\n\n  Tooltip.prototype.tip = function () {\n    if (!this.$tip) {\n      this.$tip = $(this.options.template)\n      if (this.$tip.length != 1) {\n        throw new Error(this.type + ' `template` option must consist of exactly 1 top-level element!')\n      }\n    }\n    return this.$tip\n  }\n\n  Tooltip.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.tooltip-arrow'))\n  }\n\n  Tooltip.prototype.enable = function () {\n    this.enabled = true\n  }\n\n  Tooltip.prototype.disable = function () {\n    this.enabled = false\n  }\n\n  Tooltip.prototype.toggleEnabled = function () {\n    this.enabled = !this.enabled\n  }\n\n  Tooltip.prototype.toggle = function (e) {\n    var self = this\n    if (e) {\n      self = $(e.currentTarget).data('bs.' + this.type)\n      if (!self) {\n        self = new this.constructor(e.currentTarget, this.getDelegateOptions())\n        $(e.currentTarget).data('bs.' + this.type, self)\n      }\n    }\n\n    if (e) {\n      self.inState.click = !self.inState.click\n      if (self.isInStateTrue()) self.enter(self)\n      else self.leave(self)\n    } else {\n      self.tip().hasClass('in') ? self.leave(self) : self.enter(self)\n    }\n  }\n\n  Tooltip.prototype.destroy = function () {\n    var that = this\n    clearTimeout(this.timeout)\n    this.hide(function () {\n      that.$element.off('.' + that.type).removeData('bs.' + that.type)\n      if (that.$tip) {\n        that.$tip.detach()\n      }\n      that.$tip = null\n      that.$arrow = null\n      that.$viewport = null\n      that.$element = null\n    })\n  }\n\n\n  // TOOLTIP PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.tooltip')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.tooltip', (data = new Tooltip(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tooltip\n\n  $.fn.tooltip             = Plugin\n  $.fn.tooltip.Constructor = Tooltip\n\n\n  // TOOLTIP NO CONFLICT\n  // ===================\n\n  $.fn.tooltip.noConflict = function () {\n    $.fn.tooltip = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: popover.js v3.3.7\n * http://getbootstrap.com/javascript/#popovers\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // POPOVER PUBLIC CLASS DEFINITION\n  // ===============================\n\n  var Popover = function (element, options) {\n    this.init('popover', element, options)\n  }\n\n  if (!$.fn.tooltip) throw new Error('Popover requires tooltip.js')\n\n  Popover.VERSION  = '3.3.7'\n\n  Popover.DEFAULTS = $.extend({}, $.fn.tooltip.Constructor.DEFAULTS, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'\n  })\n\n\n  // NOTE: POPOVER EXTENDS tooltip.js\n  // ================================\n\n  Popover.prototype = $.extend({}, $.fn.tooltip.Constructor.prototype)\n\n  Popover.prototype.constructor = Popover\n\n  Popover.prototype.getDefaults = function () {\n    return Popover.DEFAULTS\n  }\n\n  Popover.prototype.setContent = function () {\n    var $tip    = this.tip()\n    var title   = this.getTitle()\n    var content = this.getContent()\n\n    $tip.find('.popover-title')[this.options.html ? 'html' : 'text'](title)\n    $tip.find('.popover-content').children().detach().end()[ // we use append for html objects to maintain js events\n      this.options.html ? (typeof content == 'string' ? 'html' : 'append') : 'text'\n    ](content)\n\n    $tip.removeClass('fade top bottom left right in')\n\n    // IE8 doesn't accept hiding via the `:empty` pseudo selector, we have to do\n    // this manually by checking the contents.\n    if (!$tip.find('.popover-title').html()) $tip.find('.popover-title').hide()\n  }\n\n  Popover.prototype.hasContent = function () {\n    return this.getTitle() || this.getContent()\n  }\n\n  Popover.prototype.getContent = function () {\n    var $e = this.$element\n    var o  = this.options\n\n    return $e.attr('data-content')\n      || (typeof o.content == 'function' ?\n            o.content.call($e[0]) :\n            o.content)\n  }\n\n  Popover.prototype.arrow = function () {\n    return (this.$arrow = this.$arrow || this.tip().find('.arrow'))\n  }\n\n\n  // POPOVER PLUGIN DEFINITION\n  // =========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.popover')\n      var options = typeof option == 'object' && option\n\n      if (!data && /destroy|hide/.test(option)) return\n      if (!data) $this.data('bs.popover', (data = new Popover(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.popover\n\n  $.fn.popover             = Plugin\n  $.fn.popover.Constructor = Popover\n\n\n  // POPOVER NO CONFLICT\n  // ===================\n\n  $.fn.popover.noConflict = function () {\n    $.fn.popover = old\n    return this\n  }\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: scrollspy.js v3.3.7\n * http://getbootstrap.com/javascript/#scrollspy\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // SCROLLSPY CLASS DEFINITION\n  // ==========================\n\n  function ScrollSpy(element, options) {\n    this.$body          = $(document.body)\n    this.$scrollElement = $(element).is(document.body) ? $(window) : $(element)\n    this.options        = $.extend({}, ScrollSpy.DEFAULTS, options)\n    this.selector       = (this.options.target || '') + ' .nav li > a'\n    this.offsets        = []\n    this.targets        = []\n    this.activeTarget   = null\n    this.scrollHeight   = 0\n\n    this.$scrollElement.on('scroll.bs.scrollspy', $.proxy(this.process, this))\n    this.refresh()\n    this.process()\n  }\n\n  ScrollSpy.VERSION  = '3.3.7'\n\n  ScrollSpy.DEFAULTS = {\n    offset: 10\n  }\n\n  ScrollSpy.prototype.getScrollHeight = function () {\n    return this.$scrollElement[0].scrollHeight || Math.max(this.$body[0].scrollHeight, document.documentElement.scrollHeight)\n  }\n\n  ScrollSpy.prototype.refresh = function () {\n    var that          = this\n    var offsetMethod  = 'offset'\n    var offsetBase    = 0\n\n    this.offsets      = []\n    this.targets      = []\n    this.scrollHeight = this.getScrollHeight()\n\n    if (!$.isWindow(this.$scrollElement[0])) {\n      offsetMethod = 'position'\n      offsetBase   = this.$scrollElement.scrollTop()\n    }\n\n    this.$body\n      .find(this.selector)\n      .map(function () {\n        var $el   = $(this)\n        var href  = $el.data('target') || $el.attr('href')\n        var $href = /^#./.test(href) && $(href)\n\n        return ($href\n          && $href.length\n          && $href.is(':visible')\n          && [[$href[offsetMethod]().top + offsetBase, href]]) || null\n      })\n      .sort(function (a, b) { return a[0] - b[0] })\n      .each(function () {\n        that.offsets.push(this[0])\n        that.targets.push(this[1])\n      })\n  }\n\n  ScrollSpy.prototype.process = function () {\n    var scrollTop    = this.$scrollElement.scrollTop() + this.options.offset\n    var scrollHeight = this.getScrollHeight()\n    var maxScroll    = this.options.offset + scrollHeight - this.$scrollElement.height()\n    var offsets      = this.offsets\n    var targets      = this.targets\n    var activeTarget = this.activeTarget\n    var i\n\n    if (this.scrollHeight != scrollHeight) {\n      this.refresh()\n    }\n\n    if (scrollTop >= maxScroll) {\n      return activeTarget != (i = targets[targets.length - 1]) && this.activate(i)\n    }\n\n    if (activeTarget && scrollTop < offsets[0]) {\n      this.activeTarget = null\n      return this.clear()\n    }\n\n    for (i = offsets.length; i--;) {\n      activeTarget != targets[i]\n        && scrollTop >= offsets[i]\n        && (offsets[i + 1] === undefined || scrollTop < offsets[i + 1])\n        && this.activate(targets[i])\n    }\n  }\n\n  ScrollSpy.prototype.activate = function (target) {\n    this.activeTarget = target\n\n    this.clear()\n\n    var selector = this.selector +\n      '[data-target=\"' + target + '\"],' +\n      this.selector + '[href=\"' + target + '\"]'\n\n    var active = $(selector)\n      .parents('li')\n      .addClass('active')\n\n    if (active.parent('.dropdown-menu').length) {\n      active = active\n        .closest('li.dropdown')\n        .addClass('active')\n    }\n\n    active.trigger('activate.bs.scrollspy')\n  }\n\n  ScrollSpy.prototype.clear = function () {\n    $(this.selector)\n      .parentsUntil(this.options.target, '.active')\n      .removeClass('active')\n  }\n\n\n  // SCROLLSPY PLUGIN DEFINITION\n  // ===========================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.scrollspy')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.scrollspy', (data = new ScrollSpy(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.scrollspy\n\n  $.fn.scrollspy             = Plugin\n  $.fn.scrollspy.Constructor = ScrollSpy\n\n\n  // SCROLLSPY NO CONFLICT\n  // =====================\n\n  $.fn.scrollspy.noConflict = function () {\n    $.fn.scrollspy = old\n    return this\n  }\n\n\n  // SCROLLSPY DATA-API\n  // ==================\n\n  $(window).on('load.bs.scrollspy.data-api', function () {\n    $('[data-spy=\"scroll\"]').each(function () {\n      var $spy = $(this)\n      Plugin.call($spy, $spy.data())\n    })\n  })\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: tab.js v3.3.7\n * http://getbootstrap.com/javascript/#tabs\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // TAB CLASS DEFINITION\n  // ====================\n\n  var Tab = function (element) {\n    // jscs:disable requireDollarBeforejQueryAssignment\n    this.element = $(element)\n    // jscs:enable requireDollarBeforejQueryAssignment\n  }\n\n  Tab.VERSION = '3.3.7'\n\n  Tab.TRANSITION_DURATION = 150\n\n  Tab.prototype.show = function () {\n    var $this    = this.element\n    var $ul      = $this.closest('ul:not(.dropdown-menu)')\n    var selector = $this.data('target')\n\n    if (!selector) {\n      selector = $this.attr('href')\n      selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') // strip for ie7\n    }\n\n    if ($this.parent('li').hasClass('active')) return\n\n    var $previous = $ul.find('.active:last a')\n    var hideEvent = $.Event('hide.bs.tab', {\n      relatedTarget: $this[0]\n    })\n    var showEvent = $.Event('show.bs.tab', {\n      relatedTarget: $previous[0]\n    })\n\n    $previous.trigger(hideEvent)\n    $this.trigger(showEvent)\n\n    if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) return\n\n    var $target = $(selector)\n\n    this.activate($this.closest('li'), $ul)\n    this.activate($target, $target.parent(), function () {\n      $previous.trigger({\n        type: 'hidden.bs.tab',\n        relatedTarget: $this[0]\n      })\n      $this.trigger({\n        type: 'shown.bs.tab',\n        relatedTarget: $previous[0]\n      })\n    })\n  }\n\n  Tab.prototype.activate = function (element, container, callback) {\n    var $active    = container.find('> .active')\n    var transition = callback\n      && $.support.transition\n      && ($active.length && $active.hasClass('fade') || !!container.find('> .fade').length)\n\n    function next() {\n      $active\n        .removeClass('active')\n        .find('> .dropdown-menu > .active')\n          .removeClass('active')\n        .end()\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', false)\n\n      element\n        .addClass('active')\n        .find('[data-toggle=\"tab\"]')\n          .attr('aria-expanded', true)\n\n      if (transition) {\n        element[0].offsetWidth // reflow for transition\n        element.addClass('in')\n      } else {\n        element.removeClass('fade')\n      }\n\n      if (element.parent('.dropdown-menu').length) {\n        element\n          .closest('li.dropdown')\n            .addClass('active')\n          .end()\n          .find('[data-toggle=\"tab\"]')\n            .attr('aria-expanded', true)\n      }\n\n      callback && callback()\n    }\n\n    $active.length && transition ?\n      $active\n        .one('bsTransitionEnd', next)\n        .emulateTransitionEnd(Tab.TRANSITION_DURATION) :\n      next()\n\n    $active.removeClass('in')\n  }\n\n\n  // TAB PLUGIN DEFINITION\n  // =====================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this = $(this)\n      var data  = $this.data('bs.tab')\n\n      if (!data) $this.data('bs.tab', (data = new Tab(this)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.tab\n\n  $.fn.tab             = Plugin\n  $.fn.tab.Constructor = Tab\n\n\n  // TAB NO CONFLICT\n  // ===============\n\n  $.fn.tab.noConflict = function () {\n    $.fn.tab = old\n    return this\n  }\n\n\n  // TAB DATA-API\n  // ============\n\n  var clickHandler = function (e) {\n    e.preventDefault()\n    Plugin.call($(this), 'show')\n  }\n\n  $(document)\n    .on('click.bs.tab.data-api', '[data-toggle=\"tab\"]', clickHandler)\n    .on('click.bs.tab.data-api', '[data-toggle=\"pill\"]', clickHandler)\n\n}(jQuery);\n\n/* ========================================================================\n * Bootstrap: affix.js v3.3.7\n * http://getbootstrap.com/javascript/#affix\n * ========================================================================\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n * ======================================================================== */\n\n\n+function ($) {\n  'use strict';\n\n  // AFFIX CLASS DEFINITION\n  // ======================\n\n  var Affix = function (element, options) {\n    this.options = $.extend({}, Affix.DEFAULTS, options)\n\n    this.$target = $(this.options.target)\n      .on('scroll.bs.affix.data-api', $.proxy(this.checkPosition, this))\n      .on('click.bs.affix.data-api',  $.proxy(this.checkPositionWithEventLoop, this))\n\n    this.$element     = $(element)\n    this.affixed      = null\n    this.unpin        = null\n    this.pinnedOffset = null\n\n    this.checkPosition()\n  }\n\n  Affix.VERSION  = '3.3.7'\n\n  Affix.RESET    = 'affix affix-top affix-bottom'\n\n  Affix.DEFAULTS = {\n    offset: 0,\n    target: window\n  }\n\n  Affix.prototype.getState = function (scrollHeight, height, offsetTop, offsetBottom) {\n    var scrollTop    = this.$target.scrollTop()\n    var position     = this.$element.offset()\n    var targetHeight = this.$target.height()\n\n    if (offsetTop != null && this.affixed == 'top') return scrollTop < offsetTop ? 'top' : false\n\n    if (this.affixed == 'bottom') {\n      if (offsetTop != null) return (scrollTop + this.unpin <= position.top) ? false : 'bottom'\n      return (scrollTop + targetHeight <= scrollHeight - offsetBottom) ? false : 'bottom'\n    }\n\n    var initializing   = this.affixed == null\n    var colliderTop    = initializing ? scrollTop : position.top\n    var colliderHeight = initializing ? targetHeight : height\n\n    if (offsetTop != null && scrollTop <= offsetTop) return 'top'\n    if (offsetBottom != null && (colliderTop + colliderHeight >= scrollHeight - offsetBottom)) return 'bottom'\n\n    return false\n  }\n\n  Affix.prototype.getPinnedOffset = function () {\n    if (this.pinnedOffset) return this.pinnedOffset\n    this.$element.removeClass(Affix.RESET).addClass('affix')\n    var scrollTop = this.$target.scrollTop()\n    var position  = this.$element.offset()\n    return (this.pinnedOffset = position.top - scrollTop)\n  }\n\n  Affix.prototype.checkPositionWithEventLoop = function () {\n    setTimeout($.proxy(this.checkPosition, this), 1)\n  }\n\n  Affix.prototype.checkPosition = function () {\n    if (!this.$element.is(':visible')) return\n\n    var height       = this.$element.height()\n    var offset       = this.options.offset\n    var offsetTop    = offset.top\n    var offsetBottom = offset.bottom\n    var scrollHeight = Math.max($(document).height(), $(document.body).height())\n\n    if (typeof offset != 'object')         offsetBottom = offsetTop = offset\n    if (typeof offsetTop == 'function')    offsetTop    = offset.top(this.$element)\n    if (typeof offsetBottom == 'function') offsetBottom = offset.bottom(this.$element)\n\n    var affix = this.getState(scrollHeight, height, offsetTop, offsetBottom)\n\n    if (this.affixed != affix) {\n      if (this.unpin != null) this.$element.css('top', '')\n\n      var affixType = 'affix' + (affix ? '-' + affix : '')\n      var e         = $.Event(affixType + '.bs.affix')\n\n      this.$element.trigger(e)\n\n      if (e.isDefaultPrevented()) return\n\n      this.affixed = affix\n      this.unpin = affix == 'bottom' ? this.getPinnedOffset() : null\n\n      this.$element\n        .removeClass(Affix.RESET)\n        .addClass(affixType)\n        .trigger(affixType.replace('affix', 'affixed') + '.bs.affix')\n    }\n\n    if (affix == 'bottom') {\n      this.$element.offset({\n        top: scrollHeight - height - offsetBottom\n      })\n    }\n  }\n\n\n  // AFFIX PLUGIN DEFINITION\n  // =======================\n\n  function Plugin(option) {\n    return this.each(function () {\n      var $this   = $(this)\n      var data    = $this.data('bs.affix')\n      var options = typeof option == 'object' && option\n\n      if (!data) $this.data('bs.affix', (data = new Affix(this, options)))\n      if (typeof option == 'string') data[option]()\n    })\n  }\n\n  var old = $.fn.affix\n\n  $.fn.affix             = Plugin\n  $.fn.affix.Constructor = Affix\n\n\n  // AFFIX NO CONFLICT\n  // =================\n\n  $.fn.affix.noConflict = function () {\n    $.fn.affix = old\n    return this\n  }\n\n\n  // AFFIX DATA-API\n  // ==============\n\n  $(window).on('load', function () {\n    $('[data-spy=\"affix\"]').each(function () {\n      var $spy = $(this)\n      var data = $spy.data()\n\n      data.offset = data.offset || {}\n\n      if (data.offsetBottom != null) data.offset.bottom = data.offsetBottom\n      if (data.offsetTop    != null) data.offset.top    = data.offsetTop\n\n      Plugin.call($spy, data)\n    })\n  })\n\n}(jQuery);\n"
  },
  {
    "path": "src/lib/bootstrap-3.3.7-dist/js/npm.js",
    "content": "// This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.\nrequire('../../js/transition.js')\nrequire('../../js/alert.js')\nrequire('../../js/button.js')\nrequire('../../js/carousel.js')\nrequire('../../js/collapse.js')\nrequire('../../js/dropdown.js')\nrequire('../../js/modal.js')\nrequire('../../js/tooltip.js')\nrequire('../../js/popover.js')\nrequire('../../js/scrollspy.js')\nrequire('../../js/tab.js')\nrequire('../../js/affix.js')"
  },
  {
    "path": "src/lib/decimal.js",
    "content": ";(function (globalScope) {\n  'use strict';\n\n\n  /*\n   *  decimal.js v10.3.1\n   *  An arbitrary-precision Decimal type for JavaScript.\n   *  https://github.com/MikeMcl/decimal.js\n   *  Copyright (c) 2021 Michael Mclaughlin <M8ch88l@gmail.com>\n   *  MIT Licence\n   */\n\n\n  // -----------------------------------  EDITABLE DEFAULTS  ------------------------------------ //\n\n\n    // The maximum exponent magnitude.\n    // The limit on the value of `toExpNeg`, `toExpPos`, `minE` and `maxE`.\n  var EXP_LIMIT = 9e15,                      // 0 to 9e15\n\n    // The limit on the value of `precision`, and on the value of the first argument to\n    // `toDecimalPlaces`, `toExponential`, `toFixed`, `toPrecision` and `toSignificantDigits`.\n    MAX_DIGITS = 1e9,                        // 0 to 1e9\n\n    // Base conversion alphabet.\n    NUMERALS = '0123456789abcdef',\n\n    // The natural logarithm of 10 (1025 digits).\n    LN10 = '2.3025850929940456840179914546843642076011014886287729760333279009675726096773524802359972050895982983419677840422862486334095254650828067566662873690987816894829072083255546808437998948262331985283935053089653777326288461633662222876982198867465436674744042432743651550489343149393914796194044002221051017141748003688084012647080685567743216228355220114804663715659121373450747856947683463616792101806445070648000277502684916746550586856935673420670581136429224554405758925724208241314695689016758940256776311356919292033376587141660230105703089634572075440370847469940168269282808481184289314848524948644871927809676271275775397027668605952496716674183485704422507197965004714951050492214776567636938662976979522110718264549734772662425709429322582798502585509785265383207606726317164309505995087807523710333101197857547331541421808427543863591778117054309827482385045648019095610299291824318237525357709750539565187697510374970888692180205189339507238539205144634197265287286965110862571492198849978748873771345686209167058',\n\n    // Pi (1025 digits).\n    PI = '3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679821480865132823066470938446095505822317253594081284811174502841027019385211055596446229489549303819644288109756659334461284756482337867831652712019091456485669234603486104543266482133936072602491412737245870066063155881748815209209628292540917153643678925903600113305305488204665213841469519415116094330572703657595919530921861173819326117931051185480744623799627495673518857527248912279381830119491298336733624406566430860213949463952247371907021798609437027705392171762931767523846748184676694051320005681271452635608277857713427577896091736371787214684409012249534301465495853710507922796892589235420199561121290219608640344181598136297747713099605187072113499999983729780499510597317328160963185950244594553469083026425223082533446850352619311881710100031378387528865875332083814206171776691473035982534904287554687311595628638823537875937519577818577805321712268066130019278766111959092164201989380952572010654858632789',\n\n\n    // The initial configuration properties of the Decimal constructor.\n    DEFAULTS = {\n\n      // These values must be integers within the stated ranges (inclusive).\n      // Most of these values can be changed at run-time using the `Decimal.config` method.\n\n      // The maximum number of significant digits of the result of a calculation or base conversion.\n      // E.g. `Decimal.config({ precision: 20 });`\n      precision: 20,                         // 1 to MAX_DIGITS\n\n      // The rounding mode used when rounding to `precision`.\n      //\n      // ROUND_UP         0 Away from zero.\n      // ROUND_DOWN       1 Towards zero.\n      // ROUND_CEIL       2 Towards +Infinity.\n      // ROUND_FLOOR      3 Towards -Infinity.\n      // ROUND_HALF_UP    4 Towards nearest neighbour. If equidistant, up.\n      // ROUND_HALF_DOWN  5 Towards nearest neighbour. If equidistant, down.\n      // ROUND_HALF_EVEN  6 Towards nearest neighbour. If equidistant, towards even neighbour.\n      // ROUND_HALF_CEIL  7 Towards nearest neighbour. If equidistant, towards +Infinity.\n      // ROUND_HALF_FLOOR 8 Towards nearest neighbour. If equidistant, towards -Infinity.\n      //\n      // E.g.\n      // `Decimal.rounding = 4;`\n      // `Decimal.rounding = Decimal.ROUND_HALF_UP;`\n      rounding: 4,                           // 0 to 8\n\n      // The modulo mode used when calculating the modulus: a mod n.\n      // The quotient (q = a / n) is calculated according to the corresponding rounding mode.\n      // The remainder (r) is calculated as: r = a - n * q.\n      //\n      // UP         0 The remainder is positive if the dividend is negative, else is negative.\n      // DOWN       1 The remainder has the same sign as the dividend (JavaScript %).\n      // FLOOR      3 The remainder has the same sign as the divisor (Python %).\n      // HALF_EVEN  6 The IEEE 754 remainder function.\n      // EUCLID     9 Euclidian division. q = sign(n) * floor(a / abs(n)). Always positive.\n      //\n      // Truncated division (1), floored division (3), the IEEE 754 remainder (6), and Euclidian\n      // division (9) are commonly used for the modulus operation. The other rounding modes can also\n      // be used, but they may not give useful results.\n      modulo: 1,                             // 0 to 9\n\n      // The exponent value at and beneath which `toString` returns exponential notation.\n      // JavaScript numbers: -7\n      toExpNeg: -7,                          // 0 to -EXP_LIMIT\n\n      // The exponent value at and above which `toString` returns exponential notation.\n      // JavaScript numbers: 21\n      toExpPos:  21,                         // 0 to EXP_LIMIT\n\n      // The minimum exponent value, beneath which underflow to zero occurs.\n      // JavaScript numbers: -324  (5e-324)\n      minE: -EXP_LIMIT,                      // -1 to -EXP_LIMIT\n\n      // The maximum exponent value, above which overflow to Infinity occurs.\n      // JavaScript numbers: 308  (1.7976931348623157e+308)\n      maxE: EXP_LIMIT,                       // 1 to EXP_LIMIT\n\n      // Whether to use cryptographically-secure random number generation, if available.\n      crypto: false                          // true/false\n    },\n\n\n  // ----------------------------------- END OF EDITABLE DEFAULTS ------------------------------- //\n\n\n    Decimal, inexact, noConflict, quadrant,\n    external = true,\n\n    decimalError = '[DecimalError] ',\n    invalidArgument = decimalError + 'Invalid argument: ',\n    precisionLimitExceeded = decimalError + 'Precision limit exceeded',\n    cryptoUnavailable = decimalError + 'crypto unavailable',\n    tag = '[object Decimal]',\n\n    mathfloor = Math.floor,\n    mathpow = Math.pow,\n\n    isBinary = /^0b([01]+(\\.[01]*)?|\\.[01]+)(p[+-]?\\d+)?$/i,\n    isHex = /^0x([0-9a-f]+(\\.[0-9a-f]*)?|\\.[0-9a-f]+)(p[+-]?\\d+)?$/i,\n    isOctal = /^0o([0-7]+(\\.[0-7]*)?|\\.[0-7]+)(p[+-]?\\d+)?$/i,\n    isDecimal = /^(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i,\n\n    BASE = 1e7,\n    LOG_BASE = 7,\n    MAX_SAFE_INTEGER = 9007199254740991,\n\n    LN10_PRECISION = LN10.length - 1,\n    PI_PRECISION = PI.length - 1,\n\n    // Decimal.prototype object\n    P = { toStringTag: tag };\n\n\n  // Decimal prototype methods\n\n\n  /*\n   *  absoluteValue             abs\n   *  ceil\n   *  clampedTo                 clamp\n   *  comparedTo                cmp\n   *  cosine                    cos\n   *  cubeRoot                  cbrt\n   *  decimalPlaces             dp\n   *  dividedBy                 div\n   *  dividedToIntegerBy        divToInt\n   *  equals                    eq\n   *  floor\n   *  greaterThan               gt\n   *  greaterThanOrEqualTo      gte\n   *  hyperbolicCosine          cosh\n   *  hyperbolicSine            sinh\n   *  hyperbolicTangent         tanh\n   *  inverseCosine             acos\n   *  inverseHyperbolicCosine   acosh\n   *  inverseHyperbolicSine     asinh\n   *  inverseHyperbolicTangent  atanh\n   *  inverseSine               asin\n   *  inverseTangent            atan\n   *  isFinite\n   *  isInteger                 isInt\n   *  isNaN\n   *  isNegative                isNeg\n   *  isPositive                isPos\n   *  isZero\n   *  lessThan                  lt\n   *  lessThanOrEqualTo         lte\n   *  logarithm                 log\n   *  [maximum]                 [max]\n   *  [minimum]                 [min]\n   *  minus                     sub\n   *  modulo                    mod\n   *  naturalExponential        exp\n   *  naturalLogarithm          ln\n   *  negated                   neg\n   *  plus                      add\n   *  precision                 sd\n   *  round\n   *  sine                      sin\n   *  squareRoot                sqrt\n   *  tangent                   tan\n   *  times                     mul\n   *  toBinary\n   *  toDecimalPlaces           toDP\n   *  toExponential\n   *  toFixed\n   *  toFraction\n   *  toHexadecimal             toHex\n   *  toNearest\n   *  toNumber\n   *  toOctal\n   *  toPower                   pow\n   *  toPrecision\n   *  toSignificantDigits       toSD\n   *  toString\n   *  truncated                 trunc\n   *  valueOf                   toJSON\n   */\n\n\n  /*\n   * Return a new Decimal whose value is the absolute value of this Decimal.\n   *\n   */\n  P.absoluteValue = P.abs = function () {\n    var x = new this.constructor(this);\n    if (x.s < 0) x.s = 1;\n    return finalise(x);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\n   * direction of positive Infinity.\n   *\n   */\n  P.ceil = function () {\n    return finalise(new this.constructor(this), this.e + 1, 2);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal clamped to the range\n   * delineated by `min` and `max`.\n   *\n   * min {number|string|Decimal}\n   * max {number|string|Decimal}\n   *\n   */\n  P.clampedTo = P.clamp = function (min, max) {\n    var k,\n      x = this,\n      Ctor = x.constructor;\n    min = new Ctor(min);\n    max = new Ctor(max);\n    if (!min.s || !max.s) return new Ctor(NaN);\n    if (min.gt(max)) throw Error(invalidArgument + max);\n    k = x.cmp(min);\n    return k < 0 ? min : x.cmp(max) > 0 ? max : new Ctor(x);\n  };\n\n\n  /*\n   * Return\n   *   1    if the value of this Decimal is greater than the value of `y`,\n   *  -1    if the value of this Decimal is less than the value of `y`,\n   *   0    if they have the same value,\n   *   NaN  if the value of either Decimal is NaN.\n   *\n   */\n  P.comparedTo = P.cmp = function (y) {\n    var i, j, xdL, ydL,\n      x = this,\n      xd = x.d,\n      yd = (y = new x.constructor(y)).d,\n      xs = x.s,\n      ys = y.s;\n\n    // Either NaN or ±Infinity?\n    if (!xd || !yd) {\n      return !xs || !ys ? NaN : xs !== ys ? xs : xd === yd ? 0 : !xd ^ xs < 0 ? 1 : -1;\n    }\n\n    // Either zero?\n    if (!xd[0] || !yd[0]) return xd[0] ? xs : yd[0] ? -ys : 0;\n\n    // Signs differ?\n    if (xs !== ys) return xs;\n\n    // Compare exponents.\n    if (x.e !== y.e) return x.e > y.e ^ xs < 0 ? 1 : -1;\n\n    xdL = xd.length;\n    ydL = yd.length;\n\n    // Compare digit by digit.\n    for (i = 0, j = xdL < ydL ? xdL : ydL; i < j; ++i) {\n      if (xd[i] !== yd[i]) return xd[i] > yd[i] ^ xs < 0 ? 1 : -1;\n    }\n\n    // Compare lengths.\n    return xdL === ydL ? 0 : xdL > ydL ^ xs < 0 ? 1 : -1;\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the cosine of the value in radians of this Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-1, 1]\n   *\n   * cos(0)         = 1\n   * cos(-0)        = 1\n   * cos(Infinity)  = NaN\n   * cos(-Infinity) = NaN\n   * cos(NaN)       = NaN\n   *\n   */\n  P.cosine = P.cos = function () {\n    var pr, rm,\n      x = this,\n      Ctor = x.constructor;\n\n    if (!x.d) return new Ctor(NaN);\n\n    // cos(0) = cos(-0) = 1\n    if (!x.d[0]) return new Ctor(1);\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\n    Ctor.rounding = 1;\n\n    x = cosine(Ctor, toLessThanHalfPi(Ctor, x));\n\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return finalise(quadrant == 2 || quadrant == 3 ? x.neg() : x, pr, rm, true);\n  };\n\n\n  /*\n   *\n   * Return a new Decimal whose value is the cube root of the value of this Decimal, rounded to\n   * `precision` significant digits using rounding mode `rounding`.\n   *\n   *  cbrt(0)  =  0\n   *  cbrt(-0) = -0\n   *  cbrt(1)  =  1\n   *  cbrt(-1) = -1\n   *  cbrt(N)  =  N\n   *  cbrt(-I) = -I\n   *  cbrt(I)  =  I\n   *\n   * Math.cbrt(x) = (x < 0 ? -Math.pow(-x, 1/3) : Math.pow(x, 1/3))\n   *\n   */\n  P.cubeRoot = P.cbrt = function () {\n    var e, m, n, r, rep, s, sd, t, t3, t3plusx,\n      x = this,\n      Ctor = x.constructor;\n\n    if (!x.isFinite() || x.isZero()) return new Ctor(x);\n    external = false;\n\n    // Initial estimate.\n    s = x.s * mathpow(x.s * x, 1 / 3);\n\n     // Math.cbrt underflow/overflow?\n     // Pass x to Math.pow as integer, then adjust the exponent of the result.\n    if (!s || Math.abs(s) == 1 / 0) {\n      n = digitsToString(x.d);\n      e = x.e;\n\n      // Adjust n exponent so it is a multiple of 3 away from x exponent.\n      if (s = (e - n.length + 1) % 3) n += (s == 1 || s == -2 ? '0' : '00');\n      s = mathpow(n, 1 / 3);\n\n      // Rarely, e may be one less than the result exponent value.\n      e = mathfloor((e + 1) / 3) - (e % 3 == (e < 0 ? -1 : 2));\n\n      if (s == 1 / 0) {\n        n = '5e' + e;\n      } else {\n        n = s.toExponential();\n        n = n.slice(0, n.indexOf('e') + 1) + e;\n      }\n\n      r = new Ctor(n);\n      r.s = x.s;\n    } else {\n      r = new Ctor(s.toString());\n    }\n\n    sd = (e = Ctor.precision) + 3;\n\n    // Halley's method.\n    // TODO? Compare Newton's method.\n    for (;;) {\n      t = r;\n      t3 = t.times(t).times(t);\n      t3plusx = t3.plus(x);\n      r = divide(t3plusx.plus(x).times(t), t3plusx.plus(t3), sd + 2, 1);\n\n      // TODO? Replace with for-loop and checkRoundingDigits.\n      if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\n        n = n.slice(sd - 3, sd + 1);\n\n        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or 4999\n        // , i.e. approaching a rounding boundary, continue the iteration.\n        if (n == '9999' || !rep && n == '4999') {\n\n          // On the first iteration only, check to see if rounding up gives the exact result as the\n          // nines may infinitely repeat.\n          if (!rep) {\n            finalise(t, e + 1, 0);\n\n            if (t.times(t).times(t).eq(x)) {\n              r = t;\n              break;\n            }\n          }\n\n          sd += 4;\n          rep = 1;\n        } else {\n\n          // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\n          // If not, then there are further digits and m will be truthy.\n          if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\n\n            // Truncate to the first rounding digit.\n            finalise(r, e + 1, 1);\n            m = !r.times(r).times(r).eq(x);\n          }\n\n          break;\n        }\n      }\n    }\n\n    external = true;\n\n    return finalise(r, e, Ctor.rounding, m);\n  };\n\n\n  /*\n   * Return the number of decimal places of the value of this Decimal.\n   *\n   */\n  P.decimalPlaces = P.dp = function () {\n    var w,\n      d = this.d,\n      n = NaN;\n\n    if (d) {\n      w = d.length - 1;\n      n = (w - mathfloor(this.e / LOG_BASE)) * LOG_BASE;\n\n      // Subtract the number of trailing zeros of the last word.\n      w = d[w];\n      if (w) for (; w % 10 == 0; w /= 10) n--;\n      if (n < 0) n = 0;\n    }\n\n    return n;\n  };\n\n\n  /*\n   *  n / 0 = I\n   *  n / N = N\n   *  n / I = 0\n   *  0 / n = 0\n   *  0 / 0 = N\n   *  0 / N = N\n   *  0 / I = 0\n   *  N / n = N\n   *  N / 0 = N\n   *  N / N = N\n   *  N / I = N\n   *  I / n = I\n   *  I / 0 = I\n   *  I / N = N\n   *  I / I = N\n   *\n   * Return a new Decimal whose value is the value of this Decimal divided by `y`, rounded to\n   * `precision` significant digits using rounding mode `rounding`.\n   *\n   */\n  P.dividedBy = P.div = function (y) {\n    return divide(this, new this.constructor(y));\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the integer part of dividing the value of this Decimal\n   * by the value of `y`, rounded to `precision` significant digits using rounding mode `rounding`.\n   *\n   */\n  P.dividedToIntegerBy = P.divToInt = function (y) {\n    var x = this,\n      Ctor = x.constructor;\n    return finalise(divide(x, new Ctor(y), 0, 1, 1), Ctor.precision, Ctor.rounding);\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false.\n   *\n   */\n  P.equals = P.eq = function (y) {\n    return this.cmp(y) === 0;\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number in the\n   * direction of negative Infinity.\n   *\n   */\n  P.floor = function () {\n    return finalise(new this.constructor(this), this.e + 1, 3);\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is greater than the value of `y`, otherwise return\n   * false.\n   *\n   */\n  P.greaterThan = P.gt = function (y) {\n    return this.cmp(y) > 0;\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is greater than or equal to the value of `y`,\n   * otherwise return false.\n   *\n   */\n  P.greaterThanOrEqualTo = P.gte = function (y) {\n    var k = this.cmp(y);\n    return k == 1 || k === 0;\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the hyperbolic cosine of the value in radians of this\n   * Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [1, Infinity]\n   *\n   * cosh(x) = 1 + x^2/2! + x^4/4! + x^6/6! + ...\n   *\n   * cosh(0)         = 1\n   * cosh(-0)        = 1\n   * cosh(Infinity)  = Infinity\n   * cosh(-Infinity) = Infinity\n   * cosh(NaN)       = NaN\n   *\n   *  x        time taken (ms)   result\n   * 1000      9                 9.8503555700852349694e+433\n   * 10000     25                4.4034091128314607936e+4342\n   * 100000    171               1.4033316802130615897e+43429\n   * 1000000   3817              1.5166076984010437725e+434294\n   * 10000000  abandoned after 2 minute wait\n   *\n   * TODO? Compare performance of cosh(x) = 0.5 * (exp(x) + exp(-x))\n   *\n   */\n  P.hyperbolicCosine = P.cosh = function () {\n    var k, n, pr, rm, len,\n      x = this,\n      Ctor = x.constructor,\n      one = new Ctor(1);\n\n    if (!x.isFinite()) return new Ctor(x.s ? 1 / 0 : NaN);\n    if (x.isZero()) return one;\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\n    Ctor.rounding = 1;\n    len = x.d.length;\n\n    // Argument reduction: cos(4x) = 1 - 8cos^2(x) + 8cos^4(x) + 1\n    // i.e. cos(x) = 1 - cos^2(x/4)(8 - 8cos^2(x/4))\n\n    // Estimate the optimum number of times to use the argument reduction.\n    // TODO? Estimation reused from cosine() and may not be optimal here.\n    if (len < 32) {\n      k = Math.ceil(len / 3);\n      n = (1 / tinyPow(4, k)).toString();\n    } else {\n      k = 16;\n      n = '2.3283064365386962890625e-10';\n    }\n\n    x = taylorSeries(Ctor, 1, x.times(n), new Ctor(1), true);\n\n    // Reverse argument reduction\n    var cosh2_x,\n      i = k,\n      d8 = new Ctor(8);\n    for (; i--;) {\n      cosh2_x = x.times(x);\n      x = one.minus(cosh2_x.times(d8.minus(cosh2_x.times(d8))));\n    }\n\n    return finalise(x, Ctor.precision = pr, Ctor.rounding = rm, true);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the hyperbolic sine of the value in radians of this\n   * Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-Infinity, Infinity]\n   *\n   * sinh(x) = x + x^3/3! + x^5/5! + x^7/7! + ...\n   *\n   * sinh(0)         = 0\n   * sinh(-0)        = -0\n   * sinh(Infinity)  = Infinity\n   * sinh(-Infinity) = -Infinity\n   * sinh(NaN)       = NaN\n   *\n   * x        time taken (ms)\n   * 10       2 ms\n   * 100      5 ms\n   * 1000     14 ms\n   * 10000    82 ms\n   * 100000   886 ms            1.4033316802130615897e+43429\n   * 200000   2613 ms\n   * 300000   5407 ms\n   * 400000   8824 ms\n   * 500000   13026 ms          8.7080643612718084129e+217146\n   * 1000000  48543 ms\n   *\n   * TODO? Compare performance of sinh(x) = 0.5 * (exp(x) - exp(-x))\n   *\n   */\n  P.hyperbolicSine = P.sinh = function () {\n    var k, pr, rm, len,\n      x = this,\n      Ctor = x.constructor;\n\n    if (!x.isFinite() || x.isZero()) return new Ctor(x);\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    Ctor.precision = pr + Math.max(x.e, x.sd()) + 4;\n    Ctor.rounding = 1;\n    len = x.d.length;\n\n    if (len < 3) {\n      x = taylorSeries(Ctor, 2, x, x, true);\n    } else {\n\n      // Alternative argument reduction: sinh(3x) = sinh(x)(3 + 4sinh^2(x))\n      // i.e. sinh(x) = sinh(x/3)(3 + 4sinh^2(x/3))\n      // 3 multiplications and 1 addition\n\n      // Argument reduction: sinh(5x) = sinh(x)(5 + sinh^2(x)(20 + 16sinh^2(x)))\n      // i.e. sinh(x) = sinh(x/5)(5 + sinh^2(x/5)(20 + 16sinh^2(x/5)))\n      // 4 multiplications and 2 additions\n\n      // Estimate the optimum number of times to use the argument reduction.\n      k = 1.4 * Math.sqrt(len);\n      k = k > 16 ? 16 : k | 0;\n\n      x = x.times(1 / tinyPow(5, k));\n      x = taylorSeries(Ctor, 2, x, x, true);\n\n      // Reverse argument reduction\n      var sinh2_x,\n        d5 = new Ctor(5),\n        d16 = new Ctor(16),\n        d20 = new Ctor(20);\n      for (; k--;) {\n        sinh2_x = x.times(x);\n        x = x.times(d5.plus(sinh2_x.times(d16.times(sinh2_x).plus(d20))));\n      }\n    }\n\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return finalise(x, pr, rm, true);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the hyperbolic tangent of the value in radians of this\n   * Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-1, 1]\n   *\n   * tanh(x) = sinh(x) / cosh(x)\n   *\n   * tanh(0)         = 0\n   * tanh(-0)        = -0\n   * tanh(Infinity)  = 1\n   * tanh(-Infinity) = -1\n   * tanh(NaN)       = NaN\n   *\n   */\n  P.hyperbolicTangent = P.tanh = function () {\n    var pr, rm,\n      x = this,\n      Ctor = x.constructor;\n\n    if (!x.isFinite()) return new Ctor(x.s);\n    if (x.isZero()) return new Ctor(x);\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    Ctor.precision = pr + 7;\n    Ctor.rounding = 1;\n\n    return divide(x.sinh(), x.cosh(), Ctor.precision = pr, Ctor.rounding = rm);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the arccosine (inverse cosine) in radians of the value of\n   * this Decimal.\n   *\n   * Domain: [-1, 1]\n   * Range: [0, pi]\n   *\n   * acos(x) = pi/2 - asin(x)\n   *\n   * acos(0)       = pi/2\n   * acos(-0)      = pi/2\n   * acos(1)       = 0\n   * acos(-1)      = pi\n   * acos(1/2)     = pi/3\n   * acos(-1/2)    = 2*pi/3\n   * acos(|x| > 1) = NaN\n   * acos(NaN)     = NaN\n   *\n   */\n  P.inverseCosine = P.acos = function () {\n    var halfPi,\n      x = this,\n      Ctor = x.constructor,\n      k = x.abs().cmp(1),\n      pr = Ctor.precision,\n      rm = Ctor.rounding;\n\n    if (k !== -1) {\n      return k === 0\n        // |x| is 1\n        ? x.isNeg() ? getPi(Ctor, pr, rm) : new Ctor(0)\n        // |x| > 1 or x is NaN\n        : new Ctor(NaN);\n    }\n\n    if (x.isZero()) return getPi(Ctor, pr + 4, rm).times(0.5);\n\n    // TODO? Special case acos(0.5) = pi/3 and acos(-0.5) = 2*pi/3\n\n    Ctor.precision = pr + 6;\n    Ctor.rounding = 1;\n\n    x = x.asin();\n    halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\n\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return halfPi.minus(x);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the inverse of the hyperbolic cosine in radians of the\n   * value of this Decimal.\n   *\n   * Domain: [1, Infinity]\n   * Range: [0, Infinity]\n   *\n   * acosh(x) = ln(x + sqrt(x^2 - 1))\n   *\n   * acosh(x < 1)     = NaN\n   * acosh(NaN)       = NaN\n   * acosh(Infinity)  = Infinity\n   * acosh(-Infinity) = NaN\n   * acosh(0)         = NaN\n   * acosh(-0)        = NaN\n   * acosh(1)         = 0\n   * acosh(-1)        = NaN\n   *\n   */\n  P.inverseHyperbolicCosine = P.acosh = function () {\n    var pr, rm,\n      x = this,\n      Ctor = x.constructor;\n\n    if (x.lte(1)) return new Ctor(x.eq(1) ? 0 : NaN);\n    if (!x.isFinite()) return new Ctor(x);\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    Ctor.precision = pr + Math.max(Math.abs(x.e), x.sd()) + 4;\n    Ctor.rounding = 1;\n    external = false;\n\n    x = x.times(x).minus(1).sqrt().plus(x);\n\n    external = true;\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return x.ln();\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the inverse of the hyperbolic sine in radians of the value\n   * of this Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-Infinity, Infinity]\n   *\n   * asinh(x) = ln(x + sqrt(x^2 + 1))\n   *\n   * asinh(NaN)       = NaN\n   * asinh(Infinity)  = Infinity\n   * asinh(-Infinity) = -Infinity\n   * asinh(0)         = 0\n   * asinh(-0)        = -0\n   *\n   */\n  P.inverseHyperbolicSine = P.asinh = function () {\n    var pr, rm,\n      x = this,\n      Ctor = x.constructor;\n\n    if (!x.isFinite() || x.isZero()) return new Ctor(x);\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    Ctor.precision = pr + 2 * Math.max(Math.abs(x.e), x.sd()) + 6;\n    Ctor.rounding = 1;\n    external = false;\n\n    x = x.times(x).plus(1).sqrt().plus(x);\n\n    external = true;\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return x.ln();\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the inverse of the hyperbolic tangent in radians of the\n   * value of this Decimal.\n   *\n   * Domain: [-1, 1]\n   * Range: [-Infinity, Infinity]\n   *\n   * atanh(x) = 0.5 * ln((1 + x) / (1 - x))\n   *\n   * atanh(|x| > 1)   = NaN\n   * atanh(NaN)       = NaN\n   * atanh(Infinity)  = NaN\n   * atanh(-Infinity) = NaN\n   * atanh(0)         = 0\n   * atanh(-0)        = -0\n   * atanh(1)         = Infinity\n   * atanh(-1)        = -Infinity\n   *\n   */\n  P.inverseHyperbolicTangent = P.atanh = function () {\n    var pr, rm, wpr, xsd,\n      x = this,\n      Ctor = x.constructor;\n\n    if (!x.isFinite()) return new Ctor(NaN);\n    if (x.e >= 0) return new Ctor(x.abs().eq(1) ? x.s / 0 : x.isZero() ? x : NaN);\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    xsd = x.sd();\n\n    if (Math.max(xsd, pr) < 2 * -x.e - 1) return finalise(new Ctor(x), pr, rm, true);\n\n    Ctor.precision = wpr = xsd - x.e;\n\n    x = divide(x.plus(1), new Ctor(1).minus(x), wpr + pr, 1);\n\n    Ctor.precision = pr + 4;\n    Ctor.rounding = 1;\n\n    x = x.ln();\n\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return x.times(0.5);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the arcsine (inverse sine) in radians of the value of this\n   * Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-pi/2, pi/2]\n   *\n   * asin(x) = 2*atan(x/(1 + sqrt(1 - x^2)))\n   *\n   * asin(0)       = 0\n   * asin(-0)      = -0\n   * asin(1/2)     = pi/6\n   * asin(-1/2)    = -pi/6\n   * asin(1)       = pi/2\n   * asin(-1)      = -pi/2\n   * asin(|x| > 1) = NaN\n   * asin(NaN)     = NaN\n   *\n   * TODO? Compare performance of Taylor series.\n   *\n   */\n  P.inverseSine = P.asin = function () {\n    var halfPi, k,\n      pr, rm,\n      x = this,\n      Ctor = x.constructor;\n\n    if (x.isZero()) return new Ctor(x);\n\n    k = x.abs().cmp(1);\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n\n    if (k !== -1) {\n\n      // |x| is 1\n      if (k === 0) {\n        halfPi = getPi(Ctor, pr + 4, rm).times(0.5);\n        halfPi.s = x.s;\n        return halfPi;\n      }\n\n      // |x| > 1 or x is NaN\n      return new Ctor(NaN);\n    }\n\n    // TODO? Special case asin(1/2) = pi/6 and asin(-1/2) = -pi/6\n\n    Ctor.precision = pr + 6;\n    Ctor.rounding = 1;\n\n    x = x.div(new Ctor(1).minus(x.times(x)).sqrt().plus(1)).atan();\n\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return x.times(2);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the arctangent (inverse tangent) in radians of the value\n   * of this Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-pi/2, pi/2]\n   *\n   * atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\n   *\n   * atan(0)         = 0\n   * atan(-0)        = -0\n   * atan(1)         = pi/4\n   * atan(-1)        = -pi/4\n   * atan(Infinity)  = pi/2\n   * atan(-Infinity) = -pi/2\n   * atan(NaN)       = NaN\n   *\n   */\n  P.inverseTangent = P.atan = function () {\n    var i, j, k, n, px, t, r, wpr, x2,\n      x = this,\n      Ctor = x.constructor,\n      pr = Ctor.precision,\n      rm = Ctor.rounding;\n\n    if (!x.isFinite()) {\n      if (!x.s) return new Ctor(NaN);\n      if (pr + 4 <= PI_PRECISION) {\n        r = getPi(Ctor, pr + 4, rm).times(0.5);\n        r.s = x.s;\n        return r;\n      }\n    } else if (x.isZero()) {\n      return new Ctor(x);\n    } else if (x.abs().eq(1) && pr + 4 <= PI_PRECISION) {\n      r = getPi(Ctor, pr + 4, rm).times(0.25);\n      r.s = x.s;\n      return r;\n    }\n\n    Ctor.precision = wpr = pr + 10;\n    Ctor.rounding = 1;\n\n    // TODO? if (x >= 1 && pr <= PI_PRECISION) atan(x) = halfPi * x.s - atan(1 / x);\n\n    // Argument reduction\n    // Ensure |x| < 0.42\n    // atan(x) = 2 * atan(x / (1 + sqrt(1 + x^2)))\n\n    k = Math.min(28, wpr / LOG_BASE + 2 | 0);\n\n    for (i = k; i; --i) x = x.div(x.times(x).plus(1).sqrt().plus(1));\n\n    external = false;\n\n    j = Math.ceil(wpr / LOG_BASE);\n    n = 1;\n    x2 = x.times(x);\n    r = new Ctor(x);\n    px = x;\n\n    // atan(x) = x - x^3/3 + x^5/5 - x^7/7 + ...\n    for (; i !== -1;) {\n      px = px.times(x2);\n      t = r.minus(px.div(n += 2));\n\n      px = px.times(x2);\n      r = t.plus(px.div(n += 2));\n\n      if (r.d[j] !== void 0) for (i = j; r.d[i] === t.d[i] && i--;);\n    }\n\n    if (k) r = r.times(2 << (k - 1));\n\n    external = true;\n\n    return finalise(r, Ctor.precision = pr, Ctor.rounding = rm, true);\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is a finite number, otherwise return false.\n   *\n   */\n  P.isFinite = function () {\n    return !!this.d;\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is an integer, otherwise return false.\n   *\n   */\n  P.isInteger = P.isInt = function () {\n    return !!this.d && mathfloor(this.e / LOG_BASE) > this.d.length - 2;\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is NaN, otherwise return false.\n   *\n   */\n  P.isNaN = function () {\n    return !this.s;\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is negative, otherwise return false.\n   *\n   */\n  P.isNegative = P.isNeg = function () {\n    return this.s < 0;\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is positive, otherwise return false.\n   *\n   */\n  P.isPositive = P.isPos = function () {\n    return this.s > 0;\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is 0 or -0, otherwise return false.\n   *\n   */\n  P.isZero = function () {\n    return !!this.d && this.d[0] === 0;\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is less than `y`, otherwise return false.\n   *\n   */\n  P.lessThan = P.lt = function (y) {\n    return this.cmp(y) < 0;\n  };\n\n\n  /*\n   * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false.\n   *\n   */\n  P.lessThanOrEqualTo = P.lte = function (y) {\n    return this.cmp(y) < 1;\n  };\n\n\n  /*\n   * Return the logarithm of the value of this Decimal to the specified base, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * If no base is specified, return log[10](arg).\n   *\n   * log[base](arg) = ln(arg) / ln(base)\n   *\n   * The result will always be correctly rounded if the base of the log is 10, and 'almost always'\n   * otherwise:\n   *\n   * Depending on the rounding mode, the result may be incorrectly rounded if the first fifteen\n   * rounding digits are [49]99999999999999 or [50]00000000000000. In that case, the maximum error\n   * between the result and the correctly rounded result will be one ulp (unit in the last place).\n   *\n   * log[-b](a)       = NaN\n   * log[0](a)        = NaN\n   * log[1](a)        = NaN\n   * log[NaN](a)      = NaN\n   * log[Infinity](a) = NaN\n   * log[b](0)        = -Infinity\n   * log[b](-0)       = -Infinity\n   * log[b](-a)       = NaN\n   * log[b](1)        = 0\n   * log[b](Infinity) = Infinity\n   * log[b](NaN)      = NaN\n   *\n   * [base] {number|string|Decimal} The base of the logarithm.\n   *\n   */\n  P.logarithm = P.log = function (base) {\n    var isBase10, d, denominator, k, inf, num, sd, r,\n      arg = this,\n      Ctor = arg.constructor,\n      pr = Ctor.precision,\n      rm = Ctor.rounding,\n      guard = 5;\n\n    // Default base is 10.\n    if (base == null) {\n      base = new Ctor(10);\n      isBase10 = true;\n    } else {\n      base = new Ctor(base);\n      d = base.d;\n\n      // Return NaN if base is negative, or non-finite, or is 0 or 1.\n      if (base.s < 0 || !d || !d[0] || base.eq(1)) return new Ctor(NaN);\n\n      isBase10 = base.eq(10);\n    }\n\n    d = arg.d;\n\n    // Is arg negative, non-finite, 0 or 1?\n    if (arg.s < 0 || !d || !d[0] || arg.eq(1)) {\n      return new Ctor(d && !d[0] ? -1 / 0 : arg.s != 1 ? NaN : d ? 0 : 1 / 0);\n    }\n\n    // The result will have a non-terminating decimal expansion if base is 10 and arg is not an\n    // integer power of 10.\n    if (isBase10) {\n      if (d.length > 1) {\n        inf = true;\n      } else {\n        for (k = d[0]; k % 10 === 0;) k /= 10;\n        inf = k !== 1;\n      }\n    }\n\n    external = false;\n    sd = pr + guard;\n    num = naturalLogarithm(arg, sd);\n    denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\n\n    // The result will have 5 rounding digits.\n    r = divide(num, denominator, sd, 1);\n\n    // If at a rounding boundary, i.e. the result's rounding digits are [49]9999 or [50]0000,\n    // calculate 10 further digits.\n    //\n    // If the result is known to have an infinite decimal expansion, repeat this until it is clear\n    // that the result is above or below the boundary. Otherwise, if after calculating the 10\n    // further digits, the last 14 are nines, round up and assume the result is exact.\n    // Also assume the result is exact if the last 14 are zero.\n    //\n    // Example of a result that will be incorrectly rounded:\n    // log[1048576](4503599627370502) = 2.60000000000000009610279511444746...\n    // The above result correctly rounded using ROUND_CEIL to 1 decimal place should be 2.7, but it\n    // will be given as 2.6 as there are 15 zeros immediately after the requested decimal place, so\n    // the exact result would be assumed to be 2.6, which rounded using ROUND_CEIL to 1 decimal\n    // place is still 2.6.\n    if (checkRoundingDigits(r.d, k = pr, rm)) {\n\n      do {\n        sd += 10;\n        num = naturalLogarithm(arg, sd);\n        denominator = isBase10 ? getLn10(Ctor, sd + 10) : naturalLogarithm(base, sd);\n        r = divide(num, denominator, sd, 1);\n\n        if (!inf) {\n\n          // Check for 14 nines from the 2nd rounding digit, as the first may be 4.\n          if (+digitsToString(r.d).slice(k + 1, k + 15) + 1 == 1e14) {\n            r = finalise(r, pr + 1, 0);\n          }\n\n          break;\n        }\n      } while (checkRoundingDigits(r.d, k += 10, rm));\n    }\n\n    external = true;\n\n    return finalise(r, pr, rm);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the maximum of the arguments and the value of this Decimal.\n   *\n   * arguments {number|string|Decimal}\n   *\n  P.max = function () {\n    Array.prototype.push.call(arguments, this);\n    return maxOrMin(this.constructor, arguments, 'lt');\n  };\n   */\n\n\n  /*\n   * Return a new Decimal whose value is the minimum of the arguments and the value of this Decimal.\n   *\n   * arguments {number|string|Decimal}\n   *\n  P.min = function () {\n    Array.prototype.push.call(arguments, this);\n    return maxOrMin(this.constructor, arguments, 'gt');\n  };\n   */\n\n\n  /*\n   *  n - 0 = n\n   *  n - N = N\n   *  n - I = -I\n   *  0 - n = -n\n   *  0 - 0 = 0\n   *  0 - N = N\n   *  0 - I = -I\n   *  N - n = N\n   *  N - 0 = N\n   *  N - N = N\n   *  N - I = N\n   *  I - n = I\n   *  I - 0 = I\n   *  I - N = N\n   *  I - I = N\n   *\n   * Return a new Decimal whose value is the value of this Decimal minus `y`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   */\n  P.minus = P.sub = function (y) {\n    var d, e, i, j, k, len, pr, rm, xd, xe, xLTy, yd,\n      x = this,\n      Ctor = x.constructor;\n\n    y = new Ctor(y);\n\n    // If either is not finite...\n    if (!x.d || !y.d) {\n\n      // Return NaN if either is NaN.\n      if (!x.s || !y.s) y = new Ctor(NaN);\n\n      // Return y negated if x is finite and y is ±Infinity.\n      else if (x.d) y.s = -y.s;\n\n      // Return x if y is finite and x is ±Infinity.\n      // Return x if both are ±Infinity with different signs.\n      // Return NaN if both are ±Infinity with the same sign.\n      else y = new Ctor(y.d || x.s !== y.s ? x : NaN);\n\n      return y;\n    }\n\n    // If signs differ...\n    if (x.s != y.s) {\n      y.s = -y.s;\n      return x.plus(y);\n    }\n\n    xd = x.d;\n    yd = y.d;\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n\n    // If either is zero...\n    if (!xd[0] || !yd[0]) {\n\n      // Return y negated if x is zero and y is non-zero.\n      if (yd[0]) y.s = -y.s;\n\n      // Return x if y is zero and x is non-zero.\n      else if (xd[0]) y = new Ctor(x);\n\n      // Return zero if both are zero.\n      // From IEEE 754 (2008) 6.3: 0 - 0 = -0 - -0 = -0 when rounding to -Infinity.\n      else return new Ctor(rm === 3 ? -0 : 0);\n\n      return external ? finalise(y, pr, rm) : y;\n    }\n\n    // x and y are finite, non-zero numbers with the same sign.\n\n    // Calculate base 1e7 exponents.\n    e = mathfloor(y.e / LOG_BASE);\n    xe = mathfloor(x.e / LOG_BASE);\n\n    xd = xd.slice();\n    k = xe - e;\n\n    // If base 1e7 exponents differ...\n    if (k) {\n      xLTy = k < 0;\n\n      if (xLTy) {\n        d = xd;\n        k = -k;\n        len = yd.length;\n      } else {\n        d = yd;\n        e = xe;\n        len = xd.length;\n      }\n\n      // Numbers with massively different exponents would result in a very high number of\n      // zeros needing to be prepended, but this can be avoided while still ensuring correct\n      // rounding by limiting the number of zeros to `Math.ceil(pr / LOG_BASE) + 2`.\n      i = Math.max(Math.ceil(pr / LOG_BASE), len) + 2;\n\n      if (k > i) {\n        k = i;\n        d.length = 1;\n      }\n\n      // Prepend zeros to equalise exponents.\n      d.reverse();\n      for (i = k; i--;) d.push(0);\n      d.reverse();\n\n    // Base 1e7 exponents equal.\n    } else {\n\n      // Check digits to determine which is the bigger number.\n\n      i = xd.length;\n      len = yd.length;\n      xLTy = i < len;\n      if (xLTy) len = i;\n\n      for (i = 0; i < len; i++) {\n        if (xd[i] != yd[i]) {\n          xLTy = xd[i] < yd[i];\n          break;\n        }\n      }\n\n      k = 0;\n    }\n\n    if (xLTy) {\n      d = xd;\n      xd = yd;\n      yd = d;\n      y.s = -y.s;\n    }\n\n    len = xd.length;\n\n    // Append zeros to `xd` if shorter.\n    // Don't add zeros to `yd` if shorter as subtraction only needs to start at `yd` length.\n    for (i = yd.length - len; i > 0; --i) xd[len++] = 0;\n\n    // Subtract yd from xd.\n    for (i = yd.length; i > k;) {\n\n      if (xd[--i] < yd[i]) {\n        for (j = i; j && xd[--j] === 0;) xd[j] = BASE - 1;\n        --xd[j];\n        xd[i] += BASE;\n      }\n\n      xd[i] -= yd[i];\n    }\n\n    // Remove trailing zeros.\n    for (; xd[--len] === 0;) xd.pop();\n\n    // Remove leading zeros and adjust exponent accordingly.\n    for (; xd[0] === 0; xd.shift()) --e;\n\n    // Zero?\n    if (!xd[0]) return new Ctor(rm === 3 ? -0 : 0);\n\n    y.d = xd;\n    y.e = getBase10Exponent(xd, e);\n\n    return external ? finalise(y, pr, rm) : y;\n  };\n\n\n  /*\n   *   n % 0 =  N\n   *   n % N =  N\n   *   n % I =  n\n   *   0 % n =  0\n   *  -0 % n = -0\n   *   0 % 0 =  N\n   *   0 % N =  N\n   *   0 % I =  0\n   *   N % n =  N\n   *   N % 0 =  N\n   *   N % N =  N\n   *   N % I =  N\n   *   I % n =  N\n   *   I % 0 =  N\n   *   I % N =  N\n   *   I % I =  N\n   *\n   * Return a new Decimal whose value is the value of this Decimal modulo `y`, rounded to\n   * `precision` significant digits using rounding mode `rounding`.\n   *\n   * The result depends on the modulo mode.\n   *\n   */\n  P.modulo = P.mod = function (y) {\n    var q,\n      x = this,\n      Ctor = x.constructor;\n\n    y = new Ctor(y);\n\n    // Return NaN if x is ±Infinity or NaN, or y is NaN or ±0.\n    if (!x.d || !y.s || y.d && !y.d[0]) return new Ctor(NaN);\n\n    // Return x if y is ±Infinity or x is ±0.\n    if (!y.d || x.d && !x.d[0]) {\n      return finalise(new Ctor(x), Ctor.precision, Ctor.rounding);\n    }\n\n    // Prevent rounding of intermediate calculations.\n    external = false;\n\n    if (Ctor.modulo == 9) {\n\n      // Euclidian division: q = sign(y) * floor(x / abs(y))\n      // result = x - q * y    where  0 <= result < abs(y)\n      q = divide(x, y.abs(), 0, 3, 1);\n      q.s *= y.s;\n    } else {\n      q = divide(x, y, 0, Ctor.modulo, 1);\n    }\n\n    q = q.times(y);\n\n    external = true;\n\n    return x.minus(q);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the natural exponential of the value of this Decimal,\n   * i.e. the base e raised to the power the value of this Decimal, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   */\n  P.naturalExponential = P.exp = function () {\n    return naturalExponential(this);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the natural logarithm of the value of this Decimal,\n   * rounded to `precision` significant digits using rounding mode `rounding`.\n   *\n   */\n  P.naturalLogarithm = P.ln = function () {\n    return naturalLogarithm(this);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by\n   * -1.\n   *\n   */\n  P.negated = P.neg = function () {\n    var x = new this.constructor(this);\n    x.s = -x.s;\n    return finalise(x);\n  };\n\n\n  /*\n   *  n + 0 = n\n   *  n + N = N\n   *  n + I = I\n   *  0 + n = n\n   *  0 + 0 = 0\n   *  0 + N = N\n   *  0 + I = I\n   *  N + n = N\n   *  N + 0 = N\n   *  N + N = N\n   *  N + I = N\n   *  I + n = I\n   *  I + 0 = I\n   *  I + N = N\n   *  I + I = I\n   *\n   * Return a new Decimal whose value is the value of this Decimal plus `y`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   */\n  P.plus = P.add = function (y) {\n    var carry, d, e, i, k, len, pr, rm, xd, yd,\n      x = this,\n      Ctor = x.constructor;\n\n    y = new Ctor(y);\n\n    // If either is not finite...\n    if (!x.d || !y.d) {\n\n      // Return NaN if either is NaN.\n      if (!x.s || !y.s) y = new Ctor(NaN);\n\n      // Return x if y is finite and x is ±Infinity.\n      // Return x if both are ±Infinity with the same sign.\n      // Return NaN if both are ±Infinity with different signs.\n      // Return y if x is finite and y is ±Infinity.\n      else if (!x.d) y = new Ctor(y.d || x.s === y.s ? x : NaN);\n\n      return y;\n    }\n\n     // If signs differ...\n    if (x.s != y.s) {\n      y.s = -y.s;\n      return x.minus(y);\n    }\n\n    xd = x.d;\n    yd = y.d;\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n\n    // If either is zero...\n    if (!xd[0] || !yd[0]) {\n\n      // Return x if y is zero.\n      // Return y if y is non-zero.\n      if (!yd[0]) y = new Ctor(x);\n\n      return external ? finalise(y, pr, rm) : y;\n    }\n\n    // x and y are finite, non-zero numbers with the same sign.\n\n    // Calculate base 1e7 exponents.\n    k = mathfloor(x.e / LOG_BASE);\n    e = mathfloor(y.e / LOG_BASE);\n\n    xd = xd.slice();\n    i = k - e;\n\n    // If base 1e7 exponents differ...\n    if (i) {\n\n      if (i < 0) {\n        d = xd;\n        i = -i;\n        len = yd.length;\n      } else {\n        d = yd;\n        e = k;\n        len = xd.length;\n      }\n\n      // Limit number of zeros prepended to max(ceil(pr / LOG_BASE), len) + 1.\n      k = Math.ceil(pr / LOG_BASE);\n      len = k > len ? k + 1 : len + 1;\n\n      if (i > len) {\n        i = len;\n        d.length = 1;\n      }\n\n      // Prepend zeros to equalise exponents. Note: Faster to use reverse then do unshifts.\n      d.reverse();\n      for (; i--;) d.push(0);\n      d.reverse();\n    }\n\n    len = xd.length;\n    i = yd.length;\n\n    // If yd is longer than xd, swap xd and yd so xd points to the longer array.\n    if (len - i < 0) {\n      i = len;\n      d = yd;\n      yd = xd;\n      xd = d;\n    }\n\n    // Only start adding at yd.length - 1 as the further digits of xd can be left as they are.\n    for (carry = 0; i;) {\n      carry = (xd[--i] = xd[i] + yd[i] + carry) / BASE | 0;\n      xd[i] %= BASE;\n    }\n\n    if (carry) {\n      xd.unshift(carry);\n      ++e;\n    }\n\n    // Remove trailing zeros.\n    // No need to check for zero, as +x + +y != 0 && -x + -y != 0\n    for (len = xd.length; xd[--len] == 0;) xd.pop();\n\n    y.d = xd;\n    y.e = getBase10Exponent(xd, e);\n\n    return external ? finalise(y, pr, rm) : y;\n  };\n\n\n  /*\n   * Return the number of significant digits of the value of this Decimal.\n   *\n   * [z] {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0.\n   *\n   */\n  P.precision = P.sd = function (z) {\n    var k,\n      x = this;\n\n    if (z !== void 0 && z !== !!z && z !== 1 && z !== 0) throw Error(invalidArgument + z);\n\n    if (x.d) {\n      k = getPrecision(x.d);\n      if (z && x.e + 1 > k) k = x.e + 1;\n    } else {\n      k = NaN;\n    }\n\n    return k;\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using\n   * rounding mode `rounding`.\n   *\n   */\n  P.round = function () {\n    var x = this,\n      Ctor = x.constructor;\n\n    return finalise(new Ctor(x), x.e + 1, Ctor.rounding);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the sine of the value in radians of this Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-1, 1]\n   *\n   * sin(x) = x - x^3/3! + x^5/5! - ...\n   *\n   * sin(0)         = 0\n   * sin(-0)        = -0\n   * sin(Infinity)  = NaN\n   * sin(-Infinity) = NaN\n   * sin(NaN)       = NaN\n   *\n   */\n  P.sine = P.sin = function () {\n    var pr, rm,\n      x = this,\n      Ctor = x.constructor;\n\n    if (!x.isFinite()) return new Ctor(NaN);\n    if (x.isZero()) return new Ctor(x);\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    Ctor.precision = pr + Math.max(x.e, x.sd()) + LOG_BASE;\n    Ctor.rounding = 1;\n\n    x = sine(Ctor, toLessThanHalfPi(Ctor, x));\n\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return finalise(quadrant > 2 ? x.neg() : x, pr, rm, true);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the square root of this Decimal, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   *  sqrt(-n) =  N\n   *  sqrt(N)  =  N\n   *  sqrt(-I) =  N\n   *  sqrt(I)  =  I\n   *  sqrt(0)  =  0\n   *  sqrt(-0) = -0\n   *\n   */\n  P.squareRoot = P.sqrt = function () {\n    var m, n, sd, r, rep, t,\n      x = this,\n      d = x.d,\n      e = x.e,\n      s = x.s,\n      Ctor = x.constructor;\n\n    // Negative/NaN/Infinity/zero?\n    if (s !== 1 || !d || !d[0]) {\n      return new Ctor(!s || s < 0 && (!d || d[0]) ? NaN : d ? x : 1 / 0);\n    }\n\n    external = false;\n\n    // Initial estimate.\n    s = Math.sqrt(+x);\n\n    // Math.sqrt underflow/overflow?\n    // Pass x to Math.sqrt as integer, then adjust the exponent of the result.\n    if (s == 0 || s == 1 / 0) {\n      n = digitsToString(d);\n\n      if ((n.length + e) % 2 == 0) n += '0';\n      s = Math.sqrt(n);\n      e = mathfloor((e + 1) / 2) - (e < 0 || e % 2);\n\n      if (s == 1 / 0) {\n        n = '5e' + e;\n      } else {\n        n = s.toExponential();\n        n = n.slice(0, n.indexOf('e') + 1) + e;\n      }\n\n      r = new Ctor(n);\n    } else {\n      r = new Ctor(s.toString());\n    }\n\n    sd = (e = Ctor.precision) + 3;\n\n    // Newton-Raphson iteration.\n    for (;;) {\n      t = r;\n      r = t.plus(divide(x, t, sd + 2, 1)).times(0.5);\n\n      // TODO? Replace with for-loop and checkRoundingDigits.\n      if (digitsToString(t.d).slice(0, sd) === (n = digitsToString(r.d)).slice(0, sd)) {\n        n = n.slice(sd - 3, sd + 1);\n\n        // The 4th rounding digit may be in error by -1 so if the 4 rounding digits are 9999 or\n        // 4999, i.e. approaching a rounding boundary, continue the iteration.\n        if (n == '9999' || !rep && n == '4999') {\n\n          // On the first iteration only, check to see if rounding up gives the exact result as the\n          // nines may infinitely repeat.\n          if (!rep) {\n            finalise(t, e + 1, 0);\n\n            if (t.times(t).eq(x)) {\n              r = t;\n              break;\n            }\n          }\n\n          sd += 4;\n          rep = 1;\n        } else {\n\n          // If the rounding digits are null, 0{0,4} or 50{0,3}, check for an exact result.\n          // If not, then there are further digits and m will be truthy.\n          if (!+n || !+n.slice(1) && n.charAt(0) == '5') {\n\n            // Truncate to the first rounding digit.\n            finalise(r, e + 1, 1);\n            m = !r.times(r).eq(x);\n          }\n\n          break;\n        }\n      }\n    }\n\n    external = true;\n\n    return finalise(r, e, Ctor.rounding, m);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the tangent of the value in radians of this Decimal.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-Infinity, Infinity]\n   *\n   * tan(0)         = 0\n   * tan(-0)        = -0\n   * tan(Infinity)  = NaN\n   * tan(-Infinity) = NaN\n   * tan(NaN)       = NaN\n   *\n   */\n  P.tangent = P.tan = function () {\n    var pr, rm,\n      x = this,\n      Ctor = x.constructor;\n\n    if (!x.isFinite()) return new Ctor(NaN);\n    if (x.isZero()) return new Ctor(x);\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n    Ctor.precision = pr + 10;\n    Ctor.rounding = 1;\n\n    x = x.sin();\n    x.s = 1;\n    x = divide(x, new Ctor(1).minus(x.times(x)).sqrt(), pr + 10, 0);\n\n    Ctor.precision = pr;\n    Ctor.rounding = rm;\n\n    return finalise(quadrant == 2 || quadrant == 4 ? x.neg() : x, pr, rm, true);\n  };\n\n\n  /*\n   *  n * 0 = 0\n   *  n * N = N\n   *  n * I = I\n   *  0 * n = 0\n   *  0 * 0 = 0\n   *  0 * N = N\n   *  0 * I = N\n   *  N * n = N\n   *  N * 0 = N\n   *  N * N = N\n   *  N * I = N\n   *  I * n = I\n   *  I * 0 = N\n   *  I * N = N\n   *  I * I = I\n   *\n   * Return a new Decimal whose value is this Decimal times `y`, rounded to `precision` significant\n   * digits using rounding mode `rounding`.\n   *\n   */\n  P.times = P.mul = function (y) {\n    var carry, e, i, k, r, rL, t, xdL, ydL,\n      x = this,\n      Ctor = x.constructor,\n      xd = x.d,\n      yd = (y = new Ctor(y)).d;\n\n    y.s *= x.s;\n\n     // If either is NaN, ±Infinity or ±0...\n    if (!xd || !xd[0] || !yd || !yd[0]) {\n\n      return new Ctor(!y.s || xd && !xd[0] && !yd || yd && !yd[0] && !xd\n\n        // Return NaN if either is NaN.\n        // Return NaN if x is ±0 and y is ±Infinity, or y is ±0 and x is ±Infinity.\n        ? NaN\n\n        // Return ±Infinity if either is ±Infinity.\n        // Return ±0 if either is ±0.\n        : !xd || !yd ? y.s / 0 : y.s * 0);\n    }\n\n    e = mathfloor(x.e / LOG_BASE) + mathfloor(y.e / LOG_BASE);\n    xdL = xd.length;\n    ydL = yd.length;\n\n    // Ensure xd points to the longer array.\n    if (xdL < ydL) {\n      r = xd;\n      xd = yd;\n      yd = r;\n      rL = xdL;\n      xdL = ydL;\n      ydL = rL;\n    }\n\n    // Initialise the result array with zeros.\n    r = [];\n    rL = xdL + ydL;\n    for (i = rL; i--;) r.push(0);\n\n    // Multiply!\n    for (i = ydL; --i >= 0;) {\n      carry = 0;\n      for (k = xdL + i; k > i;) {\n        t = r[k] + yd[i] * xd[k - i - 1] + carry;\n        r[k--] = t % BASE | 0;\n        carry = t / BASE | 0;\n      }\n\n      r[k] = (r[k] + carry) % BASE | 0;\n    }\n\n    // Remove trailing zeros.\n    for (; !r[--rL];) r.pop();\n\n    if (carry) ++e;\n    else r.shift();\n\n    y.d = r;\n    y.e = getBase10Exponent(r, e);\n\n    return external ? finalise(y, Ctor.precision, Ctor.rounding) : y;\n  };\n\n\n  /*\n   * Return a string representing the value of this Decimal in base 2, round to `sd` significant\n   * digits using rounding mode `rm`.\n   *\n   * If the optional `sd` argument is present then return binary exponential notation.\n   *\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   */\n  P.toBinary = function (sd, rm) {\n    return toStringBinary(this, 2, sd, rm);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp`\n   * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted.\n   *\n   * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal.\n   *\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   */\n  P.toDecimalPlaces = P.toDP = function (dp, rm) {\n    var x = this,\n      Ctor = x.constructor;\n\n    x = new Ctor(x);\n    if (dp === void 0) return x;\n\n    checkInt32(dp, 0, MAX_DIGITS);\n\n    if (rm === void 0) rm = Ctor.rounding;\n    else checkInt32(rm, 0, 8);\n\n    return finalise(x, dp + x.e + 1, rm);\n  };\n\n\n  /*\n   * Return a string representing the value of this Decimal in exponential notation rounded to\n   * `dp` fixed decimal places using rounding mode `rounding`.\n   *\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   */\n  P.toExponential = function (dp, rm) {\n    var str,\n      x = this,\n      Ctor = x.constructor;\n\n    if (dp === void 0) {\n      str = finiteToString(x, true);\n    } else {\n      checkInt32(dp, 0, MAX_DIGITS);\n\n      if (rm === void 0) rm = Ctor.rounding;\n      else checkInt32(rm, 0, 8);\n\n      x = finalise(new Ctor(x), dp + 1, rm);\n      str = finiteToString(x, true, dp + 1);\n    }\n\n    return x.isNeg() && !x.isZero() ? '-' + str : str;\n  };\n\n\n  /*\n   * Return a string representing the value of this Decimal in normal (fixed-point) notation to\n   * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is\n   * omitted.\n   *\n   * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'.\n   *\n   * [dp] {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\n   * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\n   * (-0).toFixed(3) is '0.000'.\n   * (-0.5).toFixed(0) is '-0'.\n   *\n   */\n  P.toFixed = function (dp, rm) {\n    var str, y,\n      x = this,\n      Ctor = x.constructor;\n\n    if (dp === void 0) {\n      str = finiteToString(x);\n    } else {\n      checkInt32(dp, 0, MAX_DIGITS);\n\n      if (rm === void 0) rm = Ctor.rounding;\n      else checkInt32(rm, 0, 8);\n\n      y = finalise(new Ctor(x), dp + x.e + 1, rm);\n      str = finiteToString(y, false, dp + y.e + 1);\n    }\n\n    // To determine whether to add the minus sign look at the value before it was rounded,\n    // i.e. look at `x` rather than `y`.\n    return x.isNeg() && !x.isZero() ? '-' + str : str;\n  };\n\n\n  /*\n   * Return an array representing the value of this Decimal as a simple fraction with an integer\n   * numerator and an integer denominator.\n   *\n   * The denominator will be a positive non-zero value less than or equal to the specified maximum\n   * denominator. If a maximum denominator is not specified, the denominator will be the lowest\n   * value necessary to represent the number exactly.\n   *\n   * [maxD] {number|string|Decimal} Maximum denominator. Integer >= 1 and < Infinity.\n   *\n   */\n  P.toFraction = function (maxD) {\n    var d, d0, d1, d2, e, k, n, n0, n1, pr, q, r,\n      x = this,\n      xd = x.d,\n      Ctor = x.constructor;\n\n    if (!xd) return new Ctor(x);\n\n    n1 = d0 = new Ctor(1);\n    d1 = n0 = new Ctor(0);\n\n    d = new Ctor(d1);\n    e = d.e = getPrecision(xd) - x.e - 1;\n    k = e % LOG_BASE;\n    d.d[0] = mathpow(10, k < 0 ? LOG_BASE + k : k);\n\n    if (maxD == null) {\n\n      // d is 10**e, the minimum max-denominator needed.\n      maxD = e > 0 ? d : n1;\n    } else {\n      n = new Ctor(maxD);\n      if (!n.isInt() || n.lt(n1)) throw Error(invalidArgument + n);\n      maxD = n.gt(d) ? (e > 0 ? d : n1) : n;\n    }\n\n    external = false;\n    n = new Ctor(digitsToString(xd));\n    pr = Ctor.precision;\n    Ctor.precision = e = xd.length * LOG_BASE * 2;\n\n    for (;;)  {\n      q = divide(n, d, 0, 1, 1);\n      d2 = d0.plus(q.times(d1));\n      if (d2.cmp(maxD) == 1) break;\n      d0 = d1;\n      d1 = d2;\n      d2 = n1;\n      n1 = n0.plus(q.times(d2));\n      n0 = d2;\n      d2 = d;\n      d = n.minus(q.times(d2));\n      n = d2;\n    }\n\n    d2 = divide(maxD.minus(d0), d1, 0, 1, 1);\n    n0 = n0.plus(d2.times(n1));\n    d0 = d0.plus(d2.times(d1));\n    n0.s = n1.s = x.s;\n\n    // Determine which fraction is closer to x, n0/d0 or n1/d1?\n    r = divide(n1, d1, e, 1).minus(x).abs().cmp(divide(n0, d0, e, 1).minus(x).abs()) < 1\n        ? [n1, d1] : [n0, d0];\n\n    Ctor.precision = pr;\n    external = true;\n\n    return r;\n  };\n\n\n  /*\n   * Return a string representing the value of this Decimal in base 16, round to `sd` significant\n   * digits using rounding mode `rm`.\n   *\n   * If the optional `sd` argument is present then return binary exponential notation.\n   *\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   */\n  P.toHexadecimal = P.toHex = function (sd, rm) {\n    return toStringBinary(this, 16, sd, rm);\n  };\n\n\n  /*\n   * Returns a new Decimal whose value is the nearest multiple of `y` in the direction of rounding\n   * mode `rm`, or `Decimal.rounding` if `rm` is omitted, to the value of this Decimal.\n   *\n   * The return value will always have the same sign as this Decimal, unless either this Decimal\n   * or `y` is NaN, in which case the return value will be also be NaN.\n   *\n   * The return value is not affected by the value of `precision`.\n   *\n   * y {number|string|Decimal} The magnitude to round to a multiple of.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   * 'toNearest() rounding mode not an integer: {rm}'\n   * 'toNearest() rounding mode out of range: {rm}'\n   *\n   */\n  P.toNearest = function (y, rm) {\n    var x = this,\n      Ctor = x.constructor;\n\n    x = new Ctor(x);\n\n    if (y == null) {\n\n      // If x is not finite, return x.\n      if (!x.d) return x;\n\n      y = new Ctor(1);\n      rm = Ctor.rounding;\n    } else {\n      y = new Ctor(y);\n      if (rm === void 0) {\n        rm = Ctor.rounding;\n      } else {\n        checkInt32(rm, 0, 8);\n      }\n\n      // If x is not finite, return x if y is not NaN, else NaN.\n      if (!x.d) return y.s ? x : y;\n\n      // If y is not finite, return Infinity with the sign of x if y is Infinity, else NaN.\n      if (!y.d) {\n        if (y.s) y.s = x.s;\n        return y;\n      }\n    }\n\n    // If y is not zero, calculate the nearest multiple of y to x.\n    if (y.d[0]) {\n      external = false;\n      x = divide(x, y, 0, rm, 1).times(y);\n      external = true;\n      finalise(x);\n\n    // If y is zero, return zero with the sign of x.\n    } else {\n      y.s = x.s;\n      x = y;\n    }\n\n    return x;\n  };\n\n\n  /*\n   * Return the value of this Decimal converted to a number primitive.\n   * Zero keeps its sign.\n   *\n   */\n  P.toNumber = function () {\n    return +this;\n  };\n\n\n  /*\n   * Return a string representing the value of this Decimal in base 8, round to `sd` significant\n   * digits using rounding mode `rm`.\n   *\n   * If the optional `sd` argument is present then return binary exponential notation.\n   *\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   */\n  P.toOctal = function (sd, rm) {\n    return toStringBinary(this, 8, sd, rm);\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, rounded\n   * to `precision` significant digits using rounding mode `rounding`.\n   *\n   * ECMAScript compliant.\n   *\n   *   pow(x, NaN)                           = NaN\n   *   pow(x, ±0)                            = 1\n\n   *   pow(NaN, non-zero)                    = NaN\n   *   pow(abs(x) > 1, +Infinity)            = +Infinity\n   *   pow(abs(x) > 1, -Infinity)            = +0\n   *   pow(abs(x) == 1, ±Infinity)           = NaN\n   *   pow(abs(x) < 1, +Infinity)            = +0\n   *   pow(abs(x) < 1, -Infinity)            = +Infinity\n   *   pow(+Infinity, y > 0)                 = +Infinity\n   *   pow(+Infinity, y < 0)                 = +0\n   *   pow(-Infinity, odd integer > 0)       = -Infinity\n   *   pow(-Infinity, even integer > 0)      = +Infinity\n   *   pow(-Infinity, odd integer < 0)       = -0\n   *   pow(-Infinity, even integer < 0)      = +0\n   *   pow(+0, y > 0)                        = +0\n   *   pow(+0, y < 0)                        = +Infinity\n   *   pow(-0, odd integer > 0)              = -0\n   *   pow(-0, even integer > 0)             = +0\n   *   pow(-0, odd integer < 0)              = -Infinity\n   *   pow(-0, even integer < 0)             = +Infinity\n   *   pow(finite x < 0, finite non-integer) = NaN\n   *\n   * For non-integer or very large exponents pow(x, y) is calculated using\n   *\n   *   x^y = exp(y*ln(x))\n   *\n   * Assuming the first 15 rounding digits are each equally likely to be any digit 0-9, the\n   * probability of an incorrectly rounded result\n   * P([49]9{14} | [50]0{14}) = 2 * 0.2 * 10^-14 = 4e-15 = 1/2.5e+14\n   * i.e. 1 in 250,000,000,000,000\n   *\n   * If a result is incorrectly rounded the maximum error will be 1 ulp (unit in last place).\n   *\n   * y {number|string|Decimal} The power to which to raise this Decimal.\n   *\n   */\n  P.toPower = P.pow = function (y) {\n    var e, k, pr, r, rm, s,\n      x = this,\n      Ctor = x.constructor,\n      yn = +(y = new Ctor(y));\n\n    // Either ±Infinity, NaN or ±0?\n    if (!x.d || !y.d || !x.d[0] || !y.d[0]) return new Ctor(mathpow(+x, yn));\n\n    x = new Ctor(x);\n\n    if (x.eq(1)) return x;\n\n    pr = Ctor.precision;\n    rm = Ctor.rounding;\n\n    if (y.eq(1)) return finalise(x, pr, rm);\n\n    // y exponent\n    e = mathfloor(y.e / LOG_BASE);\n\n    // If y is a small integer use the 'exponentiation by squaring' algorithm.\n    if (e >= y.d.length - 1 && (k = yn < 0 ? -yn : yn) <= MAX_SAFE_INTEGER) {\n      r = intPow(Ctor, x, k, pr);\n      return y.s < 0 ? new Ctor(1).div(r) : finalise(r, pr, rm);\n    }\n\n    s = x.s;\n\n    // if x is negative\n    if (s < 0) {\n\n      // if y is not an integer\n      if (e < y.d.length - 1) return new Ctor(NaN);\n\n      // Result is positive if x is negative and the last digit of integer y is even.\n      if ((y.d[e] & 1) == 0) s = 1;\n\n      // if x.eq(-1)\n      if (x.e == 0 && x.d[0] == 1 && x.d.length == 1) {\n        x.s = s;\n        return x;\n      }\n    }\n\n    // Estimate result exponent.\n    // x^y = 10^e,  where e = y * log10(x)\n    // log10(x) = log10(x_significand) + x_exponent\n    // log10(x_significand) = ln(x_significand) / ln(10)\n    k = mathpow(+x, yn);\n    e = k == 0 || !isFinite(k)\n      ? mathfloor(yn * (Math.log('0.' + digitsToString(x.d)) / Math.LN10 + x.e + 1))\n      : new Ctor(k + '').e;\n\n    // Exponent estimate may be incorrect e.g. x: 0.999999999999999999, y: 2.29, e: 0, r.e: -1.\n\n    // Overflow/underflow?\n    if (e > Ctor.maxE + 1 || e < Ctor.minE - 1) return new Ctor(e > 0 ? s / 0 : 0);\n\n    external = false;\n    Ctor.rounding = x.s = 1;\n\n    // Estimate the extra guard digits needed to ensure five correct rounding digits from\n    // naturalLogarithm(x). Example of failure without these extra digits (precision: 10):\n    // new Decimal(2.32456).pow('2087987436534566.46411')\n    // should be 1.162377823e+764914905173815, but is 1.162355823e+764914905173815\n    k = Math.min(12, (e + '').length);\n\n    // r = x^y = exp(y*ln(x))\n    r = naturalExponential(y.times(naturalLogarithm(x, pr + k)), pr);\n\n    // r may be Infinity, e.g. (0.9999999999999999).pow(-1e+40)\n    if (r.d) {\n\n      // Truncate to the required precision plus five rounding digits.\n      r = finalise(r, pr + 5, 1);\n\n      // If the rounding digits are [49]9999 or [50]0000 increase the precision by 10 and recalculate\n      // the result.\n      if (checkRoundingDigits(r.d, pr, rm)) {\n        e = pr + 10;\n\n        // Truncate to the increased precision plus five rounding digits.\n        r = finalise(naturalExponential(y.times(naturalLogarithm(x, e + k)), e), e + 5, 1);\n\n        // Check for 14 nines from the 2nd rounding digit (the first rounding digit may be 4 or 9).\n        if (+digitsToString(r.d).slice(pr + 1, pr + 15) + 1 == 1e14) {\n          r = finalise(r, pr + 1, 0);\n        }\n      }\n    }\n\n    r.s = s;\n    external = true;\n    Ctor.rounding = rm;\n\n    return finalise(r, pr, rm);\n  };\n\n\n  /*\n   * Return a string representing the value of this Decimal rounded to `sd` significant digits\n   * using rounding mode `rounding`.\n   *\n   * Return exponential notation if `sd` is less than the number of digits necessary to represent\n   * the integer part of the value in normal notation.\n   *\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   */\n  P.toPrecision = function (sd, rm) {\n    var str,\n      x = this,\n      Ctor = x.constructor;\n\n    if (sd === void 0) {\n      str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\n    } else {\n      checkInt32(sd, 1, MAX_DIGITS);\n\n      if (rm === void 0) rm = Ctor.rounding;\n      else checkInt32(rm, 0, 8);\n\n      x = finalise(new Ctor(x), sd, rm);\n      str = finiteToString(x, sd <= x.e || x.e <= Ctor.toExpNeg, sd);\n    }\n\n    return x.isNeg() && !x.isZero() ? '-' + str : str;\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd`\n   * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if\n   * omitted.\n   *\n   * [sd] {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive.\n   * [rm] {number} Rounding mode. Integer, 0 to 8 inclusive.\n   *\n   * 'toSD() digits out of range: {sd}'\n   * 'toSD() digits not an integer: {sd}'\n   * 'toSD() rounding mode not an integer: {rm}'\n   * 'toSD() rounding mode out of range: {rm}'\n   *\n   */\n  P.toSignificantDigits = P.toSD = function (sd, rm) {\n    var x = this,\n      Ctor = x.constructor;\n\n    if (sd === void 0) {\n      sd = Ctor.precision;\n      rm = Ctor.rounding;\n    } else {\n      checkInt32(sd, 1, MAX_DIGITS);\n\n      if (rm === void 0) rm = Ctor.rounding;\n      else checkInt32(rm, 0, 8);\n    }\n\n    return finalise(new Ctor(x), sd, rm);\n  };\n\n\n  /*\n   * Return a string representing the value of this Decimal.\n   *\n   * Return exponential notation if this Decimal has a positive exponent equal to or greater than\n   * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`.\n   *\n   */\n  P.toString = function () {\n    var x = this,\n      Ctor = x.constructor,\n      str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\n\n    return x.isNeg() && !x.isZero() ? '-' + str : str;\n  };\n\n\n  /*\n   * Return a new Decimal whose value is the value of this Decimal truncated to a whole number.\n   *\n   */\n  P.truncated = P.trunc = function () {\n    return finalise(new this.constructor(this), this.e + 1, 1);\n  };\n\n\n  /*\n   * Return a string representing the value of this Decimal.\n   * Unlike `toString`, negative zero will include the minus sign.\n   *\n   */\n  P.valueOf = P.toJSON = function () {\n    var x = this,\n      Ctor = x.constructor,\n      str = finiteToString(x, x.e <= Ctor.toExpNeg || x.e >= Ctor.toExpPos);\n\n    return x.isNeg() ? '-' + str : str;\n  };\n\n\n  // Helper functions for Decimal.prototype (P) and/or Decimal methods, and their callers.\n\n\n  /*\n   *  digitsToString           P.cubeRoot, P.logarithm, P.squareRoot, P.toFraction, P.toPower,\n   *                           finiteToString, naturalExponential, naturalLogarithm\n   *  checkInt32               P.toDecimalPlaces, P.toExponential, P.toFixed, P.toNearest,\n   *                           P.toPrecision, P.toSignificantDigits, toStringBinary, random\n   *  checkRoundingDigits      P.logarithm, P.toPower, naturalExponential, naturalLogarithm\n   *  convertBase              toStringBinary, parseOther\n   *  cos                      P.cos\n   *  divide                   P.atanh, P.cubeRoot, P.dividedBy, P.dividedToIntegerBy,\n   *                           P.logarithm, P.modulo, P.squareRoot, P.tan, P.tanh, P.toFraction,\n   *                           P.toNearest, toStringBinary, naturalExponential, naturalLogarithm,\n   *                           taylorSeries, atan2, parseOther\n   *  finalise                 P.absoluteValue, P.atan, P.atanh, P.ceil, P.cos, P.cosh,\n   *                           P.cubeRoot, P.dividedToIntegerBy, P.floor, P.logarithm, P.minus,\n   *                           P.modulo, P.negated, P.plus, P.round, P.sin, P.sinh, P.squareRoot,\n   *                           P.tan, P.times, P.toDecimalPlaces, P.toExponential, P.toFixed,\n   *                           P.toNearest, P.toPower, P.toPrecision, P.toSignificantDigits,\n   *                           P.truncated, divide, getLn10, getPi, naturalExponential,\n   *                           naturalLogarithm, ceil, floor, round, trunc\n   *  finiteToString           P.toExponential, P.toFixed, P.toPrecision, P.toString, P.valueOf,\n   *                           toStringBinary\n   *  getBase10Exponent        P.minus, P.plus, P.times, parseOther\n   *  getLn10                  P.logarithm, naturalLogarithm\n   *  getPi                    P.acos, P.asin, P.atan, toLessThanHalfPi, atan2\n   *  getPrecision             P.precision, P.toFraction\n   *  getZeroString            digitsToString, finiteToString\n   *  intPow                   P.toPower, parseOther\n   *  isOdd                    toLessThanHalfPi\n   *  maxOrMin                 max, min\n   *  naturalExponential       P.naturalExponential, P.toPower\n   *  naturalLogarithm         P.acosh, P.asinh, P.atanh, P.logarithm, P.naturalLogarithm,\n   *                           P.toPower, naturalExponential\n   *  nonFiniteToString        finiteToString, toStringBinary\n   *  parseDecimal             Decimal\n   *  parseOther               Decimal\n   *  sin                      P.sin\n   *  taylorSeries             P.cosh, P.sinh, cos, sin\n   *  toLessThanHalfPi         P.cos, P.sin\n   *  toStringBinary           P.toBinary, P.toHexadecimal, P.toOctal\n   *  truncate                 intPow\n   *\n   *  Throws:                  P.logarithm, P.precision, P.toFraction, checkInt32, getLn10, getPi,\n   *                           naturalLogarithm, config, parseOther, random, Decimal\n   */\n\n\n  function digitsToString(d) {\n    var i, k, ws,\n      indexOfLastWord = d.length - 1,\n      str = '',\n      w = d[0];\n\n    if (indexOfLastWord > 0) {\n      str += w;\n      for (i = 1; i < indexOfLastWord; i++) {\n        ws = d[i] + '';\n        k = LOG_BASE - ws.length;\n        if (k) str += getZeroString(k);\n        str += ws;\n      }\n\n      w = d[i];\n      ws = w + '';\n      k = LOG_BASE - ws.length;\n      if (k) str += getZeroString(k);\n    } else if (w === 0) {\n      return '0';\n    }\n\n    // Remove trailing zeros of last w.\n    for (; w % 10 === 0;) w /= 10;\n\n    return str + w;\n  }\n\n\n  function checkInt32(i, min, max) {\n    if (i !== ~~i || i < min || i > max) {\n      throw Error(invalidArgument + i);\n    }\n  }\n\n\n  /*\n   * Check 5 rounding digits if `repeating` is null, 4 otherwise.\n   * `repeating == null` if caller is `log` or `pow`,\n   * `repeating != null` if caller is `naturalLogarithm` or `naturalExponential`.\n   */\n  function checkRoundingDigits(d, i, rm, repeating) {\n    var di, k, r, rd;\n\n    // Get the length of the first word of the array d.\n    for (k = d[0]; k >= 10; k /= 10) --i;\n\n    // Is the rounding digit in the first word of d?\n    if (--i < 0) {\n      i += LOG_BASE;\n      di = 0;\n    } else {\n      di = Math.ceil((i + 1) / LOG_BASE);\n      i %= LOG_BASE;\n    }\n\n    // i is the index (0 - 6) of the rounding digit.\n    // E.g. if within the word 3487563 the first rounding digit is 5,\n    // then i = 4, k = 1000, rd = 3487563 % 1000 = 563\n    k = mathpow(10, LOG_BASE - i);\n    rd = d[di] % k | 0;\n\n    if (repeating == null) {\n      if (i < 3) {\n        if (i == 0) rd = rd / 100 | 0;\n        else if (i == 1) rd = rd / 10 | 0;\n        r = rm < 4 && rd == 99999 || rm > 3 && rd == 49999 || rd == 50000 || rd == 0;\n      } else {\n        r = (rm < 4 && rd + 1 == k || rm > 3 && rd + 1 == k / 2) &&\n          (d[di + 1] / k / 100 | 0) == mathpow(10, i - 2) - 1 ||\n            (rd == k / 2 || rd == 0) && (d[di + 1] / k / 100 | 0) == 0;\n      }\n    } else {\n      if (i < 4) {\n        if (i == 0) rd = rd / 1000 | 0;\n        else if (i == 1) rd = rd / 100 | 0;\n        else if (i == 2) rd = rd / 10 | 0;\n        r = (repeating || rm < 4) && rd == 9999 || !repeating && rm > 3 && rd == 4999;\n      } else {\n        r = ((repeating || rm < 4) && rd + 1 == k ||\n        (!repeating && rm > 3) && rd + 1 == k / 2) &&\n          (d[di + 1] / k / 1000 | 0) == mathpow(10, i - 3) - 1;\n      }\n    }\n\n    return r;\n  }\n\n\n  // Convert string of `baseIn` to an array of numbers of `baseOut`.\n  // Eg. convertBase('255', 10, 16) returns [15, 15].\n  // Eg. convertBase('ff', 16, 10) returns [2, 5, 5].\n  function convertBase(str, baseIn, baseOut) {\n    var j,\n      arr = [0],\n      arrL,\n      i = 0,\n      strL = str.length;\n\n    for (; i < strL;) {\n      for (arrL = arr.length; arrL--;) arr[arrL] *= baseIn;\n      arr[0] += NUMERALS.indexOf(str.charAt(i++));\n      for (j = 0; j < arr.length; j++) {\n        if (arr[j] > baseOut - 1) {\n          if (arr[j + 1] === void 0) arr[j + 1] = 0;\n          arr[j + 1] += arr[j] / baseOut | 0;\n          arr[j] %= baseOut;\n        }\n      }\n    }\n\n    return arr.reverse();\n  }\n\n\n  /*\n   * cos(x) = 1 - x^2/2! + x^4/4! - ...\n   * |x| < pi/2\n   *\n   */\n  function cosine(Ctor, x) {\n    var k, len, y;\n\n    if (x.isZero()) return x;\n\n    // Argument reduction: cos(4x) = 8*(cos^4(x) - cos^2(x)) + 1\n    // i.e. cos(x) = 8*(cos^4(x/4) - cos^2(x/4)) + 1\n\n    // Estimate the optimum number of times to use the argument reduction.\n    len = x.d.length;\n    if (len < 32) {\n      k = Math.ceil(len / 3);\n      y = (1 / tinyPow(4, k)).toString();\n    } else {\n      k = 16;\n      y = '2.3283064365386962890625e-10';\n    }\n\n    Ctor.precision += k;\n\n    x = taylorSeries(Ctor, 1, x.times(y), new Ctor(1));\n\n    // Reverse argument reduction\n    for (var i = k; i--;) {\n      var cos2x = x.times(x);\n      x = cos2x.times(cos2x).minus(cos2x).times(8).plus(1);\n    }\n\n    Ctor.precision -= k;\n\n    return x;\n  }\n\n\n  /*\n   * Perform division in the specified base.\n   */\n  var divide = (function () {\n\n    // Assumes non-zero x and k, and hence non-zero result.\n    function multiplyInteger(x, k, base) {\n      var temp,\n        carry = 0,\n        i = x.length;\n\n      for (x = x.slice(); i--;) {\n        temp = x[i] * k + carry;\n        x[i] = temp % base | 0;\n        carry = temp / base | 0;\n      }\n\n      if (carry) x.unshift(carry);\n\n      return x;\n    }\n\n    function compare(a, b, aL, bL) {\n      var i, r;\n\n      if (aL != bL) {\n        r = aL > bL ? 1 : -1;\n      } else {\n        for (i = r = 0; i < aL; i++) {\n          if (a[i] != b[i]) {\n            r = a[i] > b[i] ? 1 : -1;\n            break;\n          }\n        }\n      }\n\n      return r;\n    }\n\n    function subtract(a, b, aL, base) {\n      var i = 0;\n\n      // Subtract b from a.\n      for (; aL--;) {\n        a[aL] -= i;\n        i = a[aL] < b[aL] ? 1 : 0;\n        a[aL] = i * base + a[aL] - b[aL];\n      }\n\n      // Remove leading zeros.\n      for (; !a[0] && a.length > 1;) a.shift();\n    }\n\n    return function (x, y, pr, rm, dp, base) {\n      var cmp, e, i, k, logBase, more, prod, prodL, q, qd, rem, remL, rem0, sd, t, xi, xL, yd0,\n        yL, yz,\n        Ctor = x.constructor,\n        sign = x.s == y.s ? 1 : -1,\n        xd = x.d,\n        yd = y.d;\n\n      // Either NaN, Infinity or 0?\n      if (!xd || !xd[0] || !yd || !yd[0]) {\n\n        return new Ctor(// Return NaN if either NaN, or both Infinity or 0.\n          !x.s || !y.s || (xd ? yd && xd[0] == yd[0] : !yd) ? NaN :\n\n          // Return ±0 if x is 0 or y is ±Infinity, or return ±Infinity as y is 0.\n          xd && xd[0] == 0 || !yd ? sign * 0 : sign / 0);\n      }\n\n      if (base) {\n        logBase = 1;\n        e = x.e - y.e;\n      } else {\n        base = BASE;\n        logBase = LOG_BASE;\n        e = mathfloor(x.e / logBase) - mathfloor(y.e / logBase);\n      }\n\n      yL = yd.length;\n      xL = xd.length;\n      q = new Ctor(sign);\n      qd = q.d = [];\n\n      // Result exponent may be one less than e.\n      // The digit array of a Decimal from toStringBinary may have trailing zeros.\n      for (i = 0; yd[i] == (xd[i] || 0); i++);\n\n      if (yd[i] > (xd[i] || 0)) e--;\n\n      if (pr == null) {\n        sd = pr = Ctor.precision;\n        rm = Ctor.rounding;\n      } else if (dp) {\n        sd = pr + (x.e - y.e) + 1;\n      } else {\n        sd = pr;\n      }\n\n      if (sd < 0) {\n        qd.push(1);\n        more = true;\n      } else {\n\n        // Convert precision in number of base 10 digits to base 1e7 digits.\n        sd = sd / logBase + 2 | 0;\n        i = 0;\n\n        // divisor < 1e7\n        if (yL == 1) {\n          k = 0;\n          yd = yd[0];\n          sd++;\n\n          // k is the carry.\n          for (; (i < xL || k) && sd--; i++) {\n            t = k * base + (xd[i] || 0);\n            qd[i] = t / yd | 0;\n            k = t % yd | 0;\n          }\n\n          more = k || i < xL;\n\n        // divisor >= 1e7\n        } else {\n\n          // Normalise xd and yd so highest order digit of yd is >= base/2\n          k = base / (yd[0] + 1) | 0;\n\n          if (k > 1) {\n            yd = multiplyInteger(yd, k, base);\n            xd = multiplyInteger(xd, k, base);\n            yL = yd.length;\n            xL = xd.length;\n          }\n\n          xi = yL;\n          rem = xd.slice(0, yL);\n          remL = rem.length;\n\n          // Add zeros to make remainder as long as divisor.\n          for (; remL < yL;) rem[remL++] = 0;\n\n          yz = yd.slice();\n          yz.unshift(0);\n          yd0 = yd[0];\n\n          if (yd[1] >= base / 2) ++yd0;\n\n          do {\n            k = 0;\n\n            // Compare divisor and remainder.\n            cmp = compare(yd, rem, yL, remL);\n\n            // If divisor < remainder.\n            if (cmp < 0) {\n\n              // Calculate trial digit, k.\n              rem0 = rem[0];\n              if (yL != remL) rem0 = rem0 * base + (rem[1] || 0);\n\n              // k will be how many times the divisor goes into the current remainder.\n              k = rem0 / yd0 | 0;\n\n              //  Algorithm:\n              //  1. product = divisor * trial digit (k)\n              //  2. if product > remainder: product -= divisor, k--\n              //  3. remainder -= product\n              //  4. if product was < remainder at 2:\n              //    5. compare new remainder and divisor\n              //    6. If remainder > divisor: remainder -= divisor, k++\n\n              if (k > 1) {\n                if (k >= base) k = base - 1;\n\n                // product = divisor * trial digit.\n                prod = multiplyInteger(yd, k, base);\n                prodL = prod.length;\n                remL = rem.length;\n\n                // Compare product and remainder.\n                cmp = compare(prod, rem, prodL, remL);\n\n                // product > remainder.\n                if (cmp == 1) {\n                  k--;\n\n                  // Subtract divisor from product.\n                  subtract(prod, yL < prodL ? yz : yd, prodL, base);\n                }\n              } else {\n\n                // cmp is -1.\n                // If k is 0, there is no need to compare yd and rem again below, so change cmp to 1\n                // to avoid it. If k is 1 there is a need to compare yd and rem again below.\n                if (k == 0) cmp = k = 1;\n                prod = yd.slice();\n              }\n\n              prodL = prod.length;\n              if (prodL < remL) prod.unshift(0);\n\n              // Subtract product from remainder.\n              subtract(rem, prod, remL, base);\n\n              // If product was < previous remainder.\n              if (cmp == -1) {\n                remL = rem.length;\n\n                // Compare divisor and new remainder.\n                cmp = compare(yd, rem, yL, remL);\n\n                // If divisor < new remainder, subtract divisor from remainder.\n                if (cmp < 1) {\n                  k++;\n\n                  // Subtract divisor from remainder.\n                  subtract(rem, yL < remL ? yz : yd, remL, base);\n                }\n              }\n\n              remL = rem.length;\n            } else if (cmp === 0) {\n              k++;\n              rem = [0];\n            }    // if cmp === 1, k will be 0\n\n            // Add the next digit, k, to the result array.\n            qd[i++] = k;\n\n            // Update the remainder.\n            if (cmp && rem[0]) {\n              rem[remL++] = xd[xi] || 0;\n            } else {\n              rem = [xd[xi]];\n              remL = 1;\n            }\n\n          } while ((xi++ < xL || rem[0] !== void 0) && sd--);\n\n          more = rem[0] !== void 0;\n        }\n\n        // Leading zero?\n        if (!qd[0]) qd.shift();\n      }\n\n      // logBase is 1 when divide is being used for base conversion.\n      if (logBase == 1) {\n        q.e = e;\n        inexact = more;\n      } else {\n\n        // To calculate q.e, first get the number of digits of qd[0].\n        for (i = 1, k = qd[0]; k >= 10; k /= 10) i++;\n        q.e = i + e * logBase - 1;\n\n        finalise(q, dp ? pr + q.e + 1 : pr, rm, more);\n      }\n\n      return q;\n    };\n  })();\n\n\n  /*\n   * Round `x` to `sd` significant digits using rounding mode `rm`.\n   * Check for over/under-flow.\n   */\n   function finalise(x, sd, rm, isTruncated) {\n    var digits, i, j, k, rd, roundUp, w, xd, xdi,\n      Ctor = x.constructor;\n\n    // Don't round if sd is null or undefined.\n    out: if (sd != null) {\n      xd = x.d;\n\n      // Infinity/NaN.\n      if (!xd) return x;\n\n      // rd: the rounding digit, i.e. the digit after the digit that may be rounded up.\n      // w: the word of xd containing rd, a base 1e7 number.\n      // xdi: the index of w within xd.\n      // digits: the number of digits of w.\n      // i: what would be the index of rd within w if all the numbers were 7 digits long (i.e. if\n      // they had leading zeros)\n      // j: if > 0, the actual index of rd within w (if < 0, rd is a leading zero).\n\n      // Get the length of the first word of the digits array xd.\n      for (digits = 1, k = xd[0]; k >= 10; k /= 10) digits++;\n      i = sd - digits;\n\n      // Is the rounding digit in the first word of xd?\n      if (i < 0) {\n        i += LOG_BASE;\n        j = sd;\n        w = xd[xdi = 0];\n\n        // Get the rounding digit at index j of w.\n        rd = w / mathpow(10, digits - j - 1) % 10 | 0;\n      } else {\n        xdi = Math.ceil((i + 1) / LOG_BASE);\n        k = xd.length;\n        if (xdi >= k) {\n          if (isTruncated) {\n\n            // Needed by `naturalExponential`, `naturalLogarithm` and `squareRoot`.\n            for (; k++ <= xdi;) xd.push(0);\n            w = rd = 0;\n            digits = 1;\n            i %= LOG_BASE;\n            j = i - LOG_BASE + 1;\n          } else {\n            break out;\n          }\n        } else {\n          w = k = xd[xdi];\n\n          // Get the number of digits of w.\n          for (digits = 1; k >= 10; k /= 10) digits++;\n\n          // Get the index of rd within w.\n          i %= LOG_BASE;\n\n          // Get the index of rd within w, adjusted for leading zeros.\n          // The number of leading zeros of w is given by LOG_BASE - digits.\n          j = i - LOG_BASE + digits;\n\n          // Get the rounding digit at index j of w.\n          rd = j < 0 ? 0 : w / mathpow(10, digits - j - 1) % 10 | 0;\n        }\n      }\n\n      // Are there any non-zero digits after the rounding digit?\n      isTruncated = isTruncated || sd < 0 ||\n        xd[xdi + 1] !== void 0 || (j < 0 ? w : w % mathpow(10, digits - j - 1));\n\n      // The expression `w % mathpow(10, digits - j - 1)` returns all the digits of w to the right\n      // of the digit at (left-to-right) index j, e.g. if w is 908714 and j is 2, the expression\n      // will give 714.\n\n      roundUp = rm < 4\n        ? (rd || isTruncated) && (rm == 0 || rm == (x.s < 0 ? 3 : 2))\n        : rd > 5 || rd == 5 && (rm == 4 || isTruncated || rm == 6 &&\n\n          // Check whether the digit to the left of the rounding digit is odd.\n          ((i > 0 ? j > 0 ? w / mathpow(10, digits - j) : 0 : xd[xdi - 1]) % 10) & 1 ||\n            rm == (x.s < 0 ? 8 : 7));\n\n      if (sd < 1 || !xd[0]) {\n        xd.length = 0;\n        if (roundUp) {\n\n          // Convert sd to decimal places.\n          sd -= x.e + 1;\n\n          // 1, 0.1, 0.01, 0.001, 0.0001 etc.\n          xd[0] = mathpow(10, (LOG_BASE - sd % LOG_BASE) % LOG_BASE);\n          x.e = -sd || 0;\n        } else {\n\n          // Zero.\n          xd[0] = x.e = 0;\n        }\n\n        return x;\n      }\n\n      // Remove excess digits.\n      if (i == 0) {\n        xd.length = xdi;\n        k = 1;\n        xdi--;\n      } else {\n        xd.length = xdi + 1;\n        k = mathpow(10, LOG_BASE - i);\n\n        // E.g. 56700 becomes 56000 if 7 is the rounding digit.\n        // j > 0 means i > number of leading zeros of w.\n        xd[xdi] = j > 0 ? (w / mathpow(10, digits - j) % mathpow(10, j) | 0) * k : 0;\n      }\n\n      if (roundUp) {\n        for (;;) {\n\n          // Is the digit to be rounded up in the first word of xd?\n          if (xdi == 0) {\n\n            // i will be the length of xd[0] before k is added.\n            for (i = 1, j = xd[0]; j >= 10; j /= 10) i++;\n            j = xd[0] += k;\n            for (k = 1; j >= 10; j /= 10) k++;\n\n            // if i != k the length has increased.\n            if (i != k) {\n              x.e++;\n              if (xd[0] == BASE) xd[0] = 1;\n            }\n\n            break;\n          } else {\n            xd[xdi] += k;\n            if (xd[xdi] != BASE) break;\n            xd[xdi--] = 0;\n            k = 1;\n          }\n        }\n      }\n\n      // Remove trailing zeros.\n      for (i = xd.length; xd[--i] === 0;) xd.pop();\n    }\n\n    if (external) {\n\n      // Overflow?\n      if (x.e > Ctor.maxE) {\n\n        // Infinity.\n        x.d = null;\n        x.e = NaN;\n\n      // Underflow?\n      } else if (x.e < Ctor.minE) {\n\n        // Zero.\n        x.e = 0;\n        x.d = [0];\n        // Ctor.underflow = true;\n      } // else Ctor.underflow = false;\n    }\n\n    return x;\n  }\n\n\n  function finiteToString(x, isExp, sd) {\n    if (!x.isFinite()) return nonFiniteToString(x);\n    var k,\n      e = x.e,\n      str = digitsToString(x.d),\n      len = str.length;\n\n    if (isExp) {\n      if (sd && (k = sd - len) > 0) {\n        str = str.charAt(0) + '.' + str.slice(1) + getZeroString(k);\n      } else if (len > 1) {\n        str = str.charAt(0) + '.' + str.slice(1);\n      }\n\n      str = str + (x.e < 0 ? 'e' : 'e+') + x.e;\n    } else if (e < 0) {\n      str = '0.' + getZeroString(-e - 1) + str;\n      if (sd && (k = sd - len) > 0) str += getZeroString(k);\n    } else if (e >= len) {\n      str += getZeroString(e + 1 - len);\n      if (sd && (k = sd - e - 1) > 0) str = str + '.' + getZeroString(k);\n    } else {\n      if ((k = e + 1) < len) str = str.slice(0, k) + '.' + str.slice(k);\n      if (sd && (k = sd - len) > 0) {\n        if (e + 1 === len) str += '.';\n        str += getZeroString(k);\n      }\n    }\n\n    return str;\n  }\n\n\n  // Calculate the base 10 exponent from the base 1e7 exponent.\n  function getBase10Exponent(digits, e) {\n    var w = digits[0];\n\n    // Add the number of digits of the first word of the digits array.\n    for ( e *= LOG_BASE; w >= 10; w /= 10) e++;\n    return e;\n  }\n\n\n  function getLn10(Ctor, sd, pr) {\n    if (sd > LN10_PRECISION) {\n\n      // Reset global state in case the exception is caught.\n      external = true;\n      if (pr) Ctor.precision = pr;\n      throw Error(precisionLimitExceeded);\n    }\n    return finalise(new Ctor(LN10), sd, 1, true);\n  }\n\n\n  function getPi(Ctor, sd, rm) {\n    if (sd > PI_PRECISION) throw Error(precisionLimitExceeded);\n    return finalise(new Ctor(PI), sd, rm, true);\n  }\n\n\n  function getPrecision(digits) {\n    var w = digits.length - 1,\n      len = w * LOG_BASE + 1;\n\n    w = digits[w];\n\n    // If non-zero...\n    if (w) {\n\n      // Subtract the number of trailing zeros of the last word.\n      for (; w % 10 == 0; w /= 10) len--;\n\n      // Add the number of digits of the first word.\n      for (w = digits[0]; w >= 10; w /= 10) len++;\n    }\n\n    return len;\n  }\n\n\n  function getZeroString(k) {\n    var zs = '';\n    for (; k--;) zs += '0';\n    return zs;\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the value of Decimal `x` to the power `n`, where `n` is an\n   * integer of type number.\n   *\n   * Implements 'exponentiation by squaring'. Called by `pow` and `parseOther`.\n   *\n   */\n  function intPow(Ctor, x, n, pr) {\n    var isTruncated,\n      r = new Ctor(1),\n\n      // Max n of 9007199254740991 takes 53 loop iterations.\n      // Maximum digits array length; leaves [28, 34] guard digits.\n      k = Math.ceil(pr / LOG_BASE + 4);\n\n    external = false;\n\n    for (;;) {\n      if (n % 2) {\n        r = r.times(x);\n        if (truncate(r.d, k)) isTruncated = true;\n      }\n\n      n = mathfloor(n / 2);\n      if (n === 0) {\n\n        // To ensure correct rounding when r.d is truncated, increment the last word if it is zero.\n        n = r.d.length - 1;\n        if (isTruncated && r.d[n] === 0) ++r.d[n];\n        break;\n      }\n\n      x = x.times(x);\n      truncate(x.d, k);\n    }\n\n    external = true;\n\n    return r;\n  }\n\n\n  function isOdd(n) {\n    return n.d[n.d.length - 1] & 1;\n  }\n\n\n  /*\n   * Handle `max` and `min`. `ltgt` is 'lt' or 'gt'.\n   */\n  function maxOrMin(Ctor, args, ltgt) {\n    var y,\n      x = new Ctor(args[0]),\n      i = 0;\n\n    for (; ++i < args.length;) {\n      y = new Ctor(args[i]);\n      if (!y.s) {\n        x = y;\n        break;\n      } else if (x[ltgt](y)) {\n        x = y;\n      }\n    }\n\n    return x;\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the natural exponential of `x` rounded to `sd` significant\n   * digits.\n   *\n   * Taylor/Maclaurin series.\n   *\n   * exp(x) = x^0/0! + x^1/1! + x^2/2! + x^3/3! + ...\n   *\n   * Argument reduction:\n   *   Repeat x = x / 32, k += 5, until |x| < 0.1\n   *   exp(x) = exp(x / 2^k)^(2^k)\n   *\n   * Previously, the argument was initially reduced by\n   * exp(x) = exp(r) * 10^k  where r = x - k * ln10, k = floor(x / ln10)\n   * to first put r in the range [0, ln10], before dividing by 32 until |x| < 0.1, but this was\n   * found to be slower than just dividing repeatedly by 32 as above.\n   *\n   * Max integer argument: exp('20723265836946413') = 6.3e+9000000000000000\n   * Min integer argument: exp('-20723265836946411') = 1.2e-9000000000000000\n   * (Math object integer min/max: Math.exp(709) = 8.2e+307, Math.exp(-745) = 5e-324)\n   *\n   *  exp(Infinity)  = Infinity\n   *  exp(-Infinity) = 0\n   *  exp(NaN)       = NaN\n   *  exp(±0)        = 1\n   *\n   *  exp(x) is non-terminating for any finite, non-zero x.\n   *\n   *  The result will always be correctly rounded.\n   *\n   */\n  function naturalExponential(x, sd) {\n    var denominator, guard, j, pow, sum, t, wpr,\n      rep = 0,\n      i = 0,\n      k = 0,\n      Ctor = x.constructor,\n      rm = Ctor.rounding,\n      pr = Ctor.precision;\n\n    // 0/NaN/Infinity?\n    if (!x.d || !x.d[0] || x.e > 17) {\n\n      return new Ctor(x.d\n        ? !x.d[0] ? 1 : x.s < 0 ? 0 : 1 / 0\n        : x.s ? x.s < 0 ? 0 : x : 0 / 0);\n    }\n\n    if (sd == null) {\n      external = false;\n      wpr = pr;\n    } else {\n      wpr = sd;\n    }\n\n    t = new Ctor(0.03125);\n\n    // while abs(x) >= 0.1\n    while (x.e > -2) {\n\n      // x = x / 2^5\n      x = x.times(t);\n      k += 5;\n    }\n\n    // Use 2 * log10(2^k) + 5 (empirically derived) to estimate the increase in precision\n    // necessary to ensure the first 4 rounding digits are correct.\n    guard = Math.log(mathpow(2, k)) / Math.LN10 * 2 + 5 | 0;\n    wpr += guard;\n    denominator = pow = sum = new Ctor(1);\n    Ctor.precision = wpr;\n\n    for (;;) {\n      pow = finalise(pow.times(x), wpr, 1);\n      denominator = denominator.times(++i);\n      t = sum.plus(divide(pow, denominator, wpr, 1));\n\n      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\n        j = k;\n        while (j--) sum = finalise(sum.times(sum), wpr, 1);\n\n        // Check to see if the first 4 rounding digits are [49]999.\n        // If so, repeat the summation with a higher precision, otherwise\n        // e.g. with precision: 18, rounding: 1\n        // exp(18.404272462595034083567793919843761) = 98372560.1229999999 (should be 98372560.123)\n        // `wpr - guard` is the index of first rounding digit.\n        if (sd == null) {\n\n          if (rep < 3 && checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\n            Ctor.precision = wpr += 10;\n            denominator = pow = t = new Ctor(1);\n            i = 0;\n            rep++;\n          } else {\n            return finalise(sum, Ctor.precision = pr, rm, external = true);\n          }\n        } else {\n          Ctor.precision = pr;\n          return sum;\n        }\n      }\n\n      sum = t;\n    }\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the natural logarithm of `x` rounded to `sd` significant\n   * digits.\n   *\n   *  ln(-n)        = NaN\n   *  ln(0)         = -Infinity\n   *  ln(-0)        = -Infinity\n   *  ln(1)         = 0\n   *  ln(Infinity)  = Infinity\n   *  ln(-Infinity) = NaN\n   *  ln(NaN)       = NaN\n   *\n   *  ln(n) (n != 1) is non-terminating.\n   *\n   */\n  function naturalLogarithm(y, sd) {\n    var c, c0, denominator, e, numerator, rep, sum, t, wpr, x1, x2,\n      n = 1,\n      guard = 10,\n      x = y,\n      xd = x.d,\n      Ctor = x.constructor,\n      rm = Ctor.rounding,\n      pr = Ctor.precision;\n\n    // Is x negative or Infinity, NaN, 0 or 1?\n    if (x.s < 0 || !xd || !xd[0] || !x.e && xd[0] == 1 && xd.length == 1) {\n      return new Ctor(xd && !xd[0] ? -1 / 0 : x.s != 1 ? NaN : xd ? 0 : x);\n    }\n\n    if (sd == null) {\n      external = false;\n      wpr = pr;\n    } else {\n      wpr = sd;\n    }\n\n    Ctor.precision = wpr += guard;\n    c = digitsToString(xd);\n    c0 = c.charAt(0);\n\n    if (Math.abs(e = x.e) < 1.5e15) {\n\n      // Argument reduction.\n      // The series converges faster the closer the argument is to 1, so using\n      // ln(a^b) = b * ln(a),   ln(a) = ln(a^b) / b\n      // multiply the argument by itself until the leading digits of the significand are 7, 8, 9,\n      // 10, 11, 12 or 13, recording the number of multiplications so the sum of the series can\n      // later be divided by this number, then separate out the power of 10 using\n      // ln(a*10^b) = ln(a) + b*ln(10).\n\n      // max n is 21 (gives 0.9, 1.0 or 1.1) (9e15 / 21 = 4.2e14).\n      //while (c0 < 9 && c0 != 1 || c0 == 1 && c.charAt(1) > 1) {\n      // max n is 6 (gives 0.7 - 1.3)\n      while (c0 < 7 && c0 != 1 || c0 == 1 && c.charAt(1) > 3) {\n        x = x.times(y);\n        c = digitsToString(x.d);\n        c0 = c.charAt(0);\n        n++;\n      }\n\n      e = x.e;\n\n      if (c0 > 1) {\n        x = new Ctor('0.' + c);\n        e++;\n      } else {\n        x = new Ctor(c0 + '.' + c.slice(1));\n      }\n    } else {\n\n      // The argument reduction method above may result in overflow if the argument y is a massive\n      // number with exponent >= 1500000000000000 (9e15 / 6 = 1.5e15), so instead recall this\n      // function using ln(x*10^e) = ln(x) + e*ln(10).\n      t = getLn10(Ctor, wpr + 2, pr).times(e + '');\n      x = naturalLogarithm(new Ctor(c0 + '.' + c.slice(1)), wpr - guard).plus(t);\n      Ctor.precision = pr;\n\n      return sd == null ? finalise(x, pr, rm, external = true) : x;\n    }\n\n    // x1 is x reduced to a value near 1.\n    x1 = x;\n\n    // Taylor series.\n    // ln(y) = ln((1 + x)/(1 - x)) = 2(x + x^3/3 + x^5/5 + x^7/7 + ...)\n    // where x = (y - 1)/(y + 1)    (|x| < 1)\n    sum = numerator = x = divide(x.minus(1), x.plus(1), wpr, 1);\n    x2 = finalise(x.times(x), wpr, 1);\n    denominator = 3;\n\n    for (;;) {\n      numerator = finalise(numerator.times(x2), wpr, 1);\n      t = sum.plus(divide(numerator, new Ctor(denominator), wpr, 1));\n\n      if (digitsToString(t.d).slice(0, wpr) === digitsToString(sum.d).slice(0, wpr)) {\n        sum = sum.times(2);\n\n        // Reverse the argument reduction. Check that e is not 0 because, besides preventing an\n        // unnecessary calculation, -0 + 0 = +0 and to ensure correct rounding -0 needs to stay -0.\n        if (e !== 0) sum = sum.plus(getLn10(Ctor, wpr + 2, pr).times(e + ''));\n        sum = divide(sum, new Ctor(n), wpr, 1);\n\n        // Is rm > 3 and the first 4 rounding digits 4999, or rm < 4 (or the summation has\n        // been repeated previously) and the first 4 rounding digits 9999?\n        // If so, restart the summation with a higher precision, otherwise\n        // e.g. with precision: 12, rounding: 1\n        // ln(135520028.6126091714265381533) = 18.7246299999 when it should be 18.72463.\n        // `wpr - guard` is the index of first rounding digit.\n        if (sd == null) {\n          if (checkRoundingDigits(sum.d, wpr - guard, rm, rep)) {\n            Ctor.precision = wpr += guard;\n            t = numerator = x = divide(x1.minus(1), x1.plus(1), wpr, 1);\n            x2 = finalise(x.times(x), wpr, 1);\n            denominator = rep = 1;\n          } else {\n            return finalise(sum, Ctor.precision = pr, rm, external = true);\n          }\n        } else {\n          Ctor.precision = pr;\n          return sum;\n        }\n      }\n\n      sum = t;\n      denominator += 2;\n    }\n  }\n\n\n  // ±Infinity, NaN.\n  function nonFiniteToString(x) {\n    // Unsigned.\n    return String(x.s * x.s / 0);\n  }\n\n\n  /*\n   * Parse the value of a new Decimal `x` from string `str`.\n   */\n  function parseDecimal(x, str) {\n    var e, i, len;\n\n    // Decimal point?\n    if ((e = str.indexOf('.')) > -1) str = str.replace('.', '');\n\n    // Exponential form?\n    if ((i = str.search(/e/i)) > 0) {\n\n      // Determine exponent.\n      if (e < 0) e = i;\n      e += +str.slice(i + 1);\n      str = str.substring(0, i);\n    } else if (e < 0) {\n\n      // Integer.\n      e = str.length;\n    }\n\n    // Determine leading zeros.\n    for (i = 0; str.charCodeAt(i) === 48; i++);\n\n    // Determine trailing zeros.\n    for (len = str.length; str.charCodeAt(len - 1) === 48; --len);\n    str = str.slice(i, len);\n\n    if (str) {\n      len -= i;\n      x.e = e = e - i - 1;\n      x.d = [];\n\n      // Transform base\n\n      // e is the base 10 exponent.\n      // i is where to slice str to get the first word of the digits array.\n      i = (e + 1) % LOG_BASE;\n      if (e < 0) i += LOG_BASE;\n\n      if (i < len) {\n        if (i) x.d.push(+str.slice(0, i));\n        for (len -= LOG_BASE; i < len;) x.d.push(+str.slice(i, i += LOG_BASE));\n        str = str.slice(i);\n        i = LOG_BASE - str.length;\n      } else {\n        i -= len;\n      }\n\n      for (; i--;) str += '0';\n      x.d.push(+str);\n\n      if (external) {\n\n        // Overflow?\n        if (x.e > x.constructor.maxE) {\n\n          // Infinity.\n          x.d = null;\n          x.e = NaN;\n\n        // Underflow?\n        } else if (x.e < x.constructor.minE) {\n\n          // Zero.\n          x.e = 0;\n          x.d = [0];\n          // x.constructor.underflow = true;\n        } // else x.constructor.underflow = false;\n      }\n    } else {\n\n      // Zero.\n      x.e = 0;\n      x.d = [0];\n    }\n\n    return x;\n  }\n\n\n  /*\n   * Parse the value of a new Decimal `x` from a string `str`, which is not a decimal value.\n   */\n  function parseOther(x, str) {\n    var base, Ctor, divisor, i, isFloat, len, p, xd, xe;\n\n    if (str.indexOf('_') > -1) {\n      str = str.replace(/(\\d)_(?=\\d)/g, '$1');\n      if (isDecimal.test(str)) return parseDecimal(x, str);\n    } else if (str === 'Infinity' || str === 'NaN') {\n      if (!+str) x.s = NaN;\n      x.e = NaN;\n      x.d = null;\n      return x;\n    }\n\n    if (isHex.test(str))  {\n      base = 16;\n      str = str.toLowerCase();\n    } else if (isBinary.test(str))  {\n      base = 2;\n    } else if (isOctal.test(str))  {\n      base = 8;\n    } else {\n      throw Error(invalidArgument + str);\n    }\n\n    // Is there a binary exponent part?\n    i = str.search(/p/i);\n\n    if (i > 0) {\n      p = +str.slice(i + 1);\n      str = str.substring(2, i);\n    } else {\n      str = str.slice(2);\n    }\n\n    // Convert `str` as an integer then divide the result by `base` raised to a power such that the\n    // fraction part will be restored.\n    i = str.indexOf('.');\n    isFloat = i >= 0;\n    Ctor = x.constructor;\n\n    if (isFloat) {\n      str = str.replace('.', '');\n      len = str.length;\n      i = len - i;\n\n      // log[10](16) = 1.2041... , log[10](88) = 1.9444....\n      divisor = intPow(Ctor, new Ctor(base), i, i * 2);\n    }\n\n    xd = convertBase(str, base, BASE);\n    xe = xd.length - 1;\n\n    // Remove trailing zeros.\n    for (i = xe; xd[i] === 0; --i) xd.pop();\n    if (i < 0) return new Ctor(x.s * 0);\n    x.e = getBase10Exponent(xd, xe);\n    x.d = xd;\n    external = false;\n\n    // At what precision to perform the division to ensure exact conversion?\n    // maxDecimalIntegerPartDigitCount = ceil(log[10](b) * otherBaseIntegerPartDigitCount)\n    // log[10](2) = 0.30103, log[10](8) = 0.90309, log[10](16) = 1.20412\n    // E.g. ceil(1.2 * 3) = 4, so up to 4 decimal digits are needed to represent 3 hex int digits.\n    // maxDecimalFractionPartDigitCount = {Hex:4|Oct:3|Bin:1} * otherBaseFractionPartDigitCount\n    // Therefore using 4 * the number of digits of str will always be enough.\n    if (isFloat) x = divide(x, divisor, len * 4);\n\n    // Multiply by the binary exponent part if present.\n    if (p) x = x.times(Math.abs(p) < 54 ? mathpow(2, p) : Decimal.pow(2, p));\n    external = true;\n\n    return x;\n  }\n\n\n  /*\n   * sin(x) = x - x^3/3! + x^5/5! - ...\n   * |x| < pi/2\n   *\n   */\n  function sine(Ctor, x) {\n    var k,\n      len = x.d.length;\n\n    if (len < 3) {\n      return x.isZero() ? x : taylorSeries(Ctor, 2, x, x);\n    }\n\n    // Argument reduction: sin(5x) = 16*sin^5(x) - 20*sin^3(x) + 5*sin(x)\n    // i.e. sin(x) = 16*sin^5(x/5) - 20*sin^3(x/5) + 5*sin(x/5)\n    // and  sin(x) = sin(x/5)(5 + sin^2(x/5)(16sin^2(x/5) - 20))\n\n    // Estimate the optimum number of times to use the argument reduction.\n    k = 1.4 * Math.sqrt(len);\n    k = k > 16 ? 16 : k | 0;\n\n    x = x.times(1 / tinyPow(5, k));\n    x = taylorSeries(Ctor, 2, x, x);\n\n    // Reverse argument reduction\n    var sin2_x,\n      d5 = new Ctor(5),\n      d16 = new Ctor(16),\n      d20 = new Ctor(20);\n    for (; k--;) {\n      sin2_x = x.times(x);\n      x = x.times(d5.plus(sin2_x.times(d16.times(sin2_x).minus(d20))));\n    }\n\n    return x;\n  }\n\n\n  // Calculate Taylor series for `cos`, `cosh`, `sin` and `sinh`.\n  function taylorSeries(Ctor, n, x, y, isHyperbolic) {\n    var j, t, u, x2,\n      i = 1,\n      pr = Ctor.precision,\n      k = Math.ceil(pr / LOG_BASE);\n\n    external = false;\n    x2 = x.times(x);\n    u = new Ctor(y);\n\n    for (;;) {\n      t = divide(u.times(x2), new Ctor(n++ * n++), pr, 1);\n      u = isHyperbolic ? y.plus(t) : y.minus(t);\n      y = divide(t.times(x2), new Ctor(n++ * n++), pr, 1);\n      t = u.plus(y);\n\n      if (t.d[k] !== void 0) {\n        for (j = k; t.d[j] === u.d[j] && j--;);\n        if (j == -1) break;\n      }\n\n      j = u;\n      u = y;\n      y = t;\n      t = j;\n      i++;\n    }\n\n    external = true;\n    t.d.length = k + 1;\n\n    return t;\n  }\n\n\n  // Exponent e must be positive and non-zero.\n  function tinyPow(b, e) {\n    var n = b;\n    while (--e) n *= b;\n    return n;\n  }\n\n\n  // Return the absolute value of `x` reduced to less than or equal to half pi.\n  function toLessThanHalfPi(Ctor, x) {\n    var t,\n      isNeg = x.s < 0,\n      pi = getPi(Ctor, Ctor.precision, 1),\n      halfPi = pi.times(0.5);\n\n    x = x.abs();\n\n    if (x.lte(halfPi)) {\n      quadrant = isNeg ? 4 : 1;\n      return x;\n    }\n\n    t = x.divToInt(pi);\n\n    if (t.isZero()) {\n      quadrant = isNeg ? 3 : 2;\n    } else {\n      x = x.minus(t.times(pi));\n\n      // 0 <= x < pi\n      if (x.lte(halfPi)) {\n        quadrant = isOdd(t) ? (isNeg ? 2 : 3) : (isNeg ? 4 : 1);\n        return x;\n      }\n\n      quadrant = isOdd(t) ? (isNeg ? 1 : 4) : (isNeg ? 3 : 2);\n    }\n\n    return x.minus(pi).abs();\n  }\n\n\n  /*\n   * Return the value of Decimal `x` as a string in base `baseOut`.\n   *\n   * If the optional `sd` argument is present include a binary exponent suffix.\n   */\n  function toStringBinary(x, baseOut, sd, rm) {\n    var base, e, i, k, len, roundUp, str, xd, y,\n      Ctor = x.constructor,\n      isExp = sd !== void 0;\n\n    if (isExp) {\n      checkInt32(sd, 1, MAX_DIGITS);\n      if (rm === void 0) rm = Ctor.rounding;\n      else checkInt32(rm, 0, 8);\n    } else {\n      sd = Ctor.precision;\n      rm = Ctor.rounding;\n    }\n\n    if (!x.isFinite()) {\n      str = nonFiniteToString(x);\n    } else {\n      str = finiteToString(x);\n      i = str.indexOf('.');\n\n      // Use exponential notation according to `toExpPos` and `toExpNeg`? No, but if required:\n      // maxBinaryExponent = floor((decimalExponent + 1) * log[2](10))\n      // minBinaryExponent = floor(decimalExponent * log[2](10))\n      // log[2](10) = 3.321928094887362347870319429489390175864\n\n      if (isExp) {\n        base = 2;\n        if (baseOut == 16) {\n          sd = sd * 4 - 3;\n        } else if (baseOut == 8) {\n          sd = sd * 3 - 2;\n        }\n      } else {\n        base = baseOut;\n      }\n\n      // Convert the number as an integer then divide the result by its base raised to a power such\n      // that the fraction part will be restored.\n\n      // Non-integer.\n      if (i >= 0) {\n        str = str.replace('.', '');\n        y = new Ctor(1);\n        y.e = str.length - i;\n        y.d = convertBase(finiteToString(y), 10, base);\n        y.e = y.d.length;\n      }\n\n      xd = convertBase(str, 10, base);\n      e = len = xd.length;\n\n      // Remove trailing zeros.\n      for (; xd[--len] == 0;) xd.pop();\n\n      if (!xd[0]) {\n        str = isExp ? '0p+0' : '0';\n      } else {\n        if (i < 0) {\n          e--;\n        } else {\n          x = new Ctor(x);\n          x.d = xd;\n          x.e = e;\n          x = divide(x, y, sd, rm, 0, base);\n          xd = x.d;\n          e = x.e;\n          roundUp = inexact;\n        }\n\n        // The rounding digit, i.e. the digit after the digit that may be rounded up.\n        i = xd[sd];\n        k = base / 2;\n        roundUp = roundUp || xd[sd + 1] !== void 0;\n\n        roundUp = rm < 4\n          ? (i !== void 0 || roundUp) && (rm === 0 || rm === (x.s < 0 ? 3 : 2))\n          : i > k || i === k && (rm === 4 || roundUp || rm === 6 && xd[sd - 1] & 1 ||\n            rm === (x.s < 0 ? 8 : 7));\n\n        xd.length = sd;\n\n        if (roundUp) {\n\n          // Rounding up may mean the previous digit has to be rounded up and so on.\n          for (; ++xd[--sd] > base - 1;) {\n            xd[sd] = 0;\n            if (!sd) {\n              ++e;\n              xd.unshift(1);\n            }\n          }\n        }\n\n        // Determine trailing zeros.\n        for (len = xd.length; !xd[len - 1]; --len);\n\n        // E.g. [4, 11, 15] becomes 4bf.\n        for (i = 0, str = ''; i < len; i++) str += NUMERALS.charAt(xd[i]);\n\n        // Add binary exponent suffix?\n        if (isExp) {\n          if (len > 1) {\n            if (baseOut == 16 || baseOut == 8) {\n              i = baseOut == 16 ? 4 : 3;\n              for (--len; len % i; len++) str += '0';\n              xd = convertBase(str, base, baseOut);\n              for (len = xd.length; !xd[len - 1]; --len);\n\n              // xd[0] will always be be 1\n              for (i = 1, str = '1.'; i < len; i++) str += NUMERALS.charAt(xd[i]);\n            } else {\n              str = str.charAt(0) + '.' + str.slice(1);\n            }\n          }\n\n          str =  str + (e < 0 ? 'p' : 'p+') + e;\n        } else if (e < 0) {\n          for (; ++e;) str = '0' + str;\n          str = '0.' + str;\n        } else {\n          if (++e > len) for (e -= len; e-- ;) str += '0';\n          else if (e < len) str = str.slice(0, e) + '.' + str.slice(e);\n        }\n      }\n\n      str = (baseOut == 16 ? '0x' : baseOut == 2 ? '0b' : baseOut == 8 ? '0o' : '') + str;\n    }\n\n    return x.s < 0 ? '-' + str : str;\n  }\n\n\n  // Does not strip trailing zeros.\n  function truncate(arr, len) {\n    if (arr.length > len) {\n      arr.length = len;\n      return true;\n    }\n  }\n\n\n  // Decimal methods\n\n\n  /*\n   *  abs\n   *  acos\n   *  acosh\n   *  add\n   *  asin\n   *  asinh\n   *  atan\n   *  atanh\n   *  atan2\n   *  cbrt\n   *  ceil\n   *  clamp\n   *  clone\n   *  config\n   *  cos\n   *  cosh\n   *  div\n   *  exp\n   *  floor\n   *  hypot\n   *  ln\n   *  log\n   *  log2\n   *  log10\n   *  max\n   *  min\n   *  mod\n   *  mul\n   *  pow\n   *  random\n   *  round\n   *  set\n   *  sign\n   *  sin\n   *  sinh\n   *  sqrt\n   *  sub\n   *  sum\n   *  tan\n   *  tanh\n   *  trunc\n   */\n\n\n  /*\n   * Return a new Decimal whose value is the absolute value of `x`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function abs(x) {\n    return new this(x).abs();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the arccosine in radians of `x`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function acos(x) {\n    return new this(x).acos();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the inverse of the hyperbolic cosine of `x`, rounded to\n   * `precision` significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function acosh(x) {\n    return new this(x).acosh();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the sum of `x` and `y`, rounded to `precision` significant\n   * digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   * y {number|string|Decimal}\n   *\n   */\n  function add(x, y) {\n    return new this(x).plus(y);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the arcsine in radians of `x`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function asin(x) {\n    return new this(x).asin();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the inverse of the hyperbolic sine of `x`, rounded to\n   * `precision` significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function asinh(x) {\n    return new this(x).asinh();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the arctangent in radians of `x`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function atan(x) {\n    return new this(x).atan();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the inverse of the hyperbolic tangent of `x`, rounded to\n   * `precision` significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function atanh(x) {\n    return new this(x).atanh();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the arctangent in radians of `y/x` in the range -pi to pi\n   * (inclusive), rounded to `precision` significant digits using rounding mode `rounding`.\n   *\n   * Domain: [-Infinity, Infinity]\n   * Range: [-pi, pi]\n   *\n   * y {number|string|Decimal} The y-coordinate.\n   * x {number|string|Decimal} The x-coordinate.\n   *\n   * atan2(±0, -0)               = ±pi\n   * atan2(±0, +0)               = ±0\n   * atan2(±0, -x)               = ±pi for x > 0\n   * atan2(±0, x)                = ±0 for x > 0\n   * atan2(-y, ±0)               = -pi/2 for y > 0\n   * atan2(y, ±0)                = pi/2 for y > 0\n   * atan2(±y, -Infinity)        = ±pi for finite y > 0\n   * atan2(±y, +Infinity)        = ±0 for finite y > 0\n   * atan2(±Infinity, x)         = ±pi/2 for finite x\n   * atan2(±Infinity, -Infinity) = ±3*pi/4\n   * atan2(±Infinity, +Infinity) = ±pi/4\n   * atan2(NaN, x) = NaN\n   * atan2(y, NaN) = NaN\n   *\n   */\n  function atan2(y, x) {\n    y = new this(y);\n    x = new this(x);\n    var r,\n      pr = this.precision,\n      rm = this.rounding,\n      wpr = pr + 4;\n\n    // Either NaN\n    if (!y.s || !x.s) {\n      r = new this(NaN);\n\n    // Both ±Infinity\n    } else if (!y.d && !x.d) {\n      r = getPi(this, wpr, 1).times(x.s > 0 ? 0.25 : 0.75);\n      r.s = y.s;\n\n    // x is ±Infinity or y is ±0\n    } else if (!x.d || y.isZero()) {\n      r = x.s < 0 ? getPi(this, pr, rm) : new this(0);\n      r.s = y.s;\n\n    // y is ±Infinity or x is ±0\n    } else if (!y.d || x.isZero()) {\n      r = getPi(this, wpr, 1).times(0.5);\n      r.s = y.s;\n\n    // Both non-zero and finite\n    } else if (x.s < 0) {\n      this.precision = wpr;\n      this.rounding = 1;\n      r = this.atan(divide(y, x, wpr, 1));\n      x = getPi(this, wpr, 1);\n      this.precision = pr;\n      this.rounding = rm;\n      r = y.s < 0 ? r.minus(x) : r.plus(x);\n    } else {\n      r = this.atan(divide(y, x, wpr, 1));\n    }\n\n    return r;\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the cube root of `x`, rounded to `precision` significant\n   * digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function cbrt(x) {\n    return new this(x).cbrt();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` rounded to an integer using `ROUND_CEIL`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function ceil(x) {\n    return finalise(x = new this(x), x.e + 1, 2);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` clamped to the range delineated by `min` and `max`.\n   *\n   * x {number|string|Decimal}\n   * min {number|string|Decimal}\n   * max {number|string|Decimal}\n   *\n   */\n  function clamp(x, min, max) {\n    return new this(x).clamp(min, max);\n  }\n\n\n  /*\n   * Configure global settings for a Decimal constructor.\n   *\n   * `obj` is an object with one or more of the following properties,\n   *\n   *   precision  {number}\n   *   rounding   {number}\n   *   toExpNeg   {number}\n   *   toExpPos   {number}\n   *   maxE       {number}\n   *   minE       {number}\n   *   modulo     {number}\n   *   crypto     {boolean|number}\n   *   defaults   {true}\n   *\n   * E.g. Decimal.config({ precision: 20, rounding: 4 })\n   *\n   */\n  function config(obj) {\n    if (!obj || typeof obj !== 'object') throw Error(decimalError + 'Object expected');\n    var i, p, v,\n      useDefaults = obj.defaults === true,\n      ps = [\n        'precision', 1, MAX_DIGITS,\n        'rounding', 0, 8,\n        'toExpNeg', -EXP_LIMIT, 0,\n        'toExpPos', 0, EXP_LIMIT,\n        'maxE', 0, EXP_LIMIT,\n        'minE', -EXP_LIMIT, 0,\n        'modulo', 0, 9\n      ];\n\n    for (i = 0; i < ps.length; i += 3) {\n      if (p = ps[i], useDefaults) this[p] = DEFAULTS[p];\n      if ((v = obj[p]) !== void 0) {\n        if (mathfloor(v) === v && v >= ps[i + 1] && v <= ps[i + 2]) this[p] = v;\n        else throw Error(invalidArgument + p + ': ' + v);\n      }\n    }\n\n    if (p = 'crypto', useDefaults) this[p] = DEFAULTS[p];\n    if ((v = obj[p]) !== void 0) {\n      if (v === true || v === false || v === 0 || v === 1) {\n        if (v) {\n          if (typeof crypto != 'undefined' && crypto &&\n            (crypto.getRandomValues || crypto.randomBytes)) {\n            this[p] = true;\n          } else {\n            throw Error(cryptoUnavailable);\n          }\n        } else {\n          this[p] = false;\n        }\n      } else {\n        throw Error(invalidArgument + p + ': ' + v);\n      }\n    }\n\n    return this;\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the cosine of `x`, rounded to `precision` significant\n   * digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function cos(x) {\n    return new this(x).cos();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the hyperbolic cosine of `x`, rounded to precision\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function cosh(x) {\n    return new this(x).cosh();\n  }\n\n\n  /*\n   * Create and return a Decimal constructor with the same configuration properties as this Decimal\n   * constructor.\n   *\n   */\n  function clone(obj) {\n    var i, p, ps;\n\n    /*\n     * The Decimal constructor and exported function.\n     * Return a new Decimal instance.\n     *\n     * v {number|string|Decimal} A numeric value.\n     *\n     */\n    function Decimal(v) {\n      var e, i, t,\n        x = this;\n\n      // Decimal called without new.\n      if (!(x instanceof Decimal)) return new Decimal(v);\n\n      // Retain a reference to this Decimal constructor, and shadow Decimal.prototype.constructor\n      // which points to Object.\n      x.constructor = Decimal;\n\n      // Duplicate.\n      if (isDecimalInstance(v)) {\n        x.s = v.s;\n\n        if (external) {\n          if (!v.d || v.e > Decimal.maxE) {\n\n            // Infinity.\n            x.e = NaN;\n            x.d = null;\n          } else if (v.e < Decimal.minE) {\n\n            // Zero.\n            x.e = 0;\n            x.d = [0];\n          } else {\n            x.e = v.e;\n            x.d = v.d.slice();\n          }\n        } else {\n          x.e = v.e;\n          x.d = v.d ? v.d.slice() : v.d;\n        }\n\n        return;\n      }\n\n      t = typeof v;\n\n      if (t === 'number') {\n        if (v === 0) {\n          x.s = 1 / v < 0 ? -1 : 1;\n          x.e = 0;\n          x.d = [0];\n          return;\n        }\n\n        if (v < 0) {\n          v = -v;\n          x.s = -1;\n        } else {\n          x.s = 1;\n        }\n\n        // Fast path for small integers.\n        if (v === ~~v && v < 1e7) {\n          for (e = 0, i = v; i >= 10; i /= 10) e++;\n\n          if (external) {\n            if (e > Decimal.maxE) {\n              x.e = NaN;\n              x.d = null;\n            } else if (e < Decimal.minE) {\n              x.e = 0;\n              x.d = [0];\n            } else {\n              x.e = e;\n              x.d = [v];\n            }\n          } else {\n            x.e = e;\n            x.d = [v];\n          }\n\n          return;\n\n        // Infinity, NaN.\n        } else if (v * 0 !== 0) {\n          if (!v) x.s = NaN;\n          x.e = NaN;\n          x.d = null;\n          return;\n        }\n\n        return parseDecimal(x, v.toString());\n\n      } else if (t !== 'string') {\n        throw Error(invalidArgument + v);\n      }\n\n      // Minus sign?\n      if ((i = v.charCodeAt(0)) === 45) {\n        v = v.slice(1);\n        x.s = -1;\n      } else {\n        // Plus sign?\n        if (i === 43) v = v.slice(1);\n        x.s = 1;\n      }\n\n      return isDecimal.test(v) ? parseDecimal(x, v) : parseOther(x, v);\n    }\n\n    Decimal.prototype = P;\n\n    Decimal.ROUND_UP = 0;\n    Decimal.ROUND_DOWN = 1;\n    Decimal.ROUND_CEIL = 2;\n    Decimal.ROUND_FLOOR = 3;\n    Decimal.ROUND_HALF_UP = 4;\n    Decimal.ROUND_HALF_DOWN = 5;\n    Decimal.ROUND_HALF_EVEN = 6;\n    Decimal.ROUND_HALF_CEIL = 7;\n    Decimal.ROUND_HALF_FLOOR = 8;\n    Decimal.EUCLID = 9;\n\n    Decimal.config = Decimal.set = config;\n    Decimal.clone = clone;\n    Decimal.isDecimal = isDecimalInstance;\n\n    Decimal.abs = abs;\n    Decimal.acos = acos;\n    Decimal.acosh = acosh;        // ES6\n    Decimal.add = add;\n    Decimal.asin = asin;\n    Decimal.asinh = asinh;        // ES6\n    Decimal.atan = atan;\n    Decimal.atanh = atanh;        // ES6\n    Decimal.atan2 = atan2;\n    Decimal.cbrt = cbrt;          // ES6\n    Decimal.ceil = ceil;\n    Decimal.clamp = clamp;\n    Decimal.cos = cos;\n    Decimal.cosh = cosh;          // ES6\n    Decimal.div = div;\n    Decimal.exp = exp;\n    Decimal.floor = floor;\n    Decimal.hypot = hypot;        // ES6\n    Decimal.ln = ln;\n    Decimal.log = log;\n    Decimal.log10 = log10;        // ES6\n    Decimal.log2 = log2;          // ES6\n    Decimal.max = max;\n    Decimal.min = min;\n    Decimal.mod = mod;\n    Decimal.mul = mul;\n    Decimal.pow = pow;\n    Decimal.random = random;\n    Decimal.round = round;\n    Decimal.sign = sign;          // ES6\n    Decimal.sin = sin;\n    Decimal.sinh = sinh;          // ES6\n    Decimal.sqrt = sqrt;\n    Decimal.sub = sub;\n    Decimal.sum = sum;\n    Decimal.tan = tan;\n    Decimal.tanh = tanh;          // ES6\n    Decimal.trunc = trunc;        // ES6\n\n    if (obj === void 0) obj = {};\n    if (obj) {\n      if (obj.defaults !== true) {\n        ps = ['precision', 'rounding', 'toExpNeg', 'toExpPos', 'maxE', 'minE', 'modulo', 'crypto'];\n        for (i = 0; i < ps.length;) if (!obj.hasOwnProperty(p = ps[i++])) obj[p] = this[p];\n      }\n    }\n\n    Decimal.config(obj);\n\n    return Decimal;\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` divided by `y`, rounded to `precision` significant\n   * digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   * y {number|string|Decimal}\n   *\n   */\n  function div(x, y) {\n    return new this(x).div(y);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the natural exponential of `x`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} The power to which to raise the base of the natural log.\n   *\n   */\n  function exp(x) {\n    return new this(x).exp();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` round to an integer using `ROUND_FLOOR`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function floor(x) {\n    return finalise(x = new this(x), x.e + 1, 3);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the square root of the sum of the squares of the arguments,\n   * rounded to `precision` significant digits using rounding mode `rounding`.\n   *\n   * hypot(a, b, ...) = sqrt(a^2 + b^2 + ...)\n   *\n   * arguments {number|string|Decimal}\n   *\n   */\n  function hypot() {\n    var i, n,\n      t = new this(0);\n\n    external = false;\n\n    for (i = 0; i < arguments.length;) {\n      n = new this(arguments[i++]);\n      if (!n.d) {\n        if (n.s) {\n          external = true;\n          return new this(1 / 0);\n        }\n        t = n;\n      } else if (t.d) {\n        t = t.plus(n.times(n));\n      }\n    }\n\n    external = true;\n\n    return t.sqrt();\n  }\n\n\n  /*\n   * Return true if object is a Decimal instance (where Decimal is any Decimal constructor),\n   * otherwise return false.\n   *\n   */\n  function isDecimalInstance(obj) {\n    return obj instanceof Decimal || obj && obj.toStringTag === tag || false;\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the natural logarithm of `x`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function ln(x) {\n    return new this(x).ln();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the log of `x` to the base `y`, or to base 10 if no base\n   * is specified, rounded to `precision` significant digits using rounding mode `rounding`.\n   *\n   * log[y](x)\n   *\n   * x {number|string|Decimal} The argument of the logarithm.\n   * y {number|string|Decimal} The base of the logarithm.\n   *\n   */\n  function log(x, y) {\n    return new this(x).log(y);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the base 2 logarithm of `x`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function log2(x) {\n    return new this(x).log(2);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the base 10 logarithm of `x`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function log10(x) {\n    return new this(x).log(10);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the maximum of the arguments.\n   *\n   * arguments {number|string|Decimal}\n   *\n   */\n  function max() {\n    return maxOrMin(this, arguments, 'lt');\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the minimum of the arguments.\n   *\n   * arguments {number|string|Decimal}\n   *\n   */\n  function min() {\n    return maxOrMin(this, arguments, 'gt');\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` modulo `y`, rounded to `precision` significant digits\n   * using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   * y {number|string|Decimal}\n   *\n   */\n  function mod(x, y) {\n    return new this(x).mod(y);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` multiplied by `y`, rounded to `precision` significant\n   * digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   * y {number|string|Decimal}\n   *\n   */\n  function mul(x, y) {\n    return new this(x).mul(y);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` raised to the power `y`, rounded to precision\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} The base.\n   * y {number|string|Decimal} The exponent.\n   *\n   */\n  function pow(x, y) {\n    return new this(x).pow(y);\n  }\n\n\n  /*\n   * Returns a new Decimal with a random value equal to or greater than 0 and less than 1, and with\n   * `sd`, or `Decimal.precision` if `sd` is omitted, significant digits (or less if trailing zeros\n   * are produced).\n   *\n   * [sd] {number} Significant digits. Integer, 0 to MAX_DIGITS inclusive.\n   *\n   */\n  function random(sd) {\n    var d, e, k, n,\n      i = 0,\n      r = new this(1),\n      rd = [];\n\n    if (sd === void 0) sd = this.precision;\n    else checkInt32(sd, 1, MAX_DIGITS);\n\n    k = Math.ceil(sd / LOG_BASE);\n\n    if (!this.crypto) {\n      for (; i < k;) rd[i++] = Math.random() * 1e7 | 0;\n\n    // Browsers supporting crypto.getRandomValues.\n    } else if (crypto.getRandomValues) {\n      d = crypto.getRandomValues(new Uint32Array(k));\n\n      for (; i < k;) {\n        n = d[i];\n\n        // 0 <= n < 4294967296\n        // Probability n >= 4.29e9, is 4967296 / 4294967296 = 0.00116 (1 in 865).\n        if (n >= 4.29e9) {\n          d[i] = crypto.getRandomValues(new Uint32Array(1))[0];\n        } else {\n\n          // 0 <= n <= 4289999999\n          // 0 <= (n % 1e7) <= 9999999\n          rd[i++] = n % 1e7;\n        }\n      }\n\n    // Node.js supporting crypto.randomBytes.\n    } else if (crypto.randomBytes) {\n\n      // buffer\n      d = crypto.randomBytes(k *= 4);\n\n      for (; i < k;) {\n\n        // 0 <= n < 2147483648\n        n = d[i] + (d[i + 1] << 8) + (d[i + 2] << 16) + ((d[i + 3] & 0x7f) << 24);\n\n        // Probability n >= 2.14e9, is 7483648 / 2147483648 = 0.0035 (1 in 286).\n        if (n >= 2.14e9) {\n          crypto.randomBytes(4).copy(d, i);\n        } else {\n\n          // 0 <= n <= 2139999999\n          // 0 <= (n % 1e7) <= 9999999\n          rd.push(n % 1e7);\n          i += 4;\n        }\n      }\n\n      i = k / 4;\n    } else {\n      throw Error(cryptoUnavailable);\n    }\n\n    k = rd[--i];\n    sd %= LOG_BASE;\n\n    // Convert trailing digits to zeros according to sd.\n    if (k && sd) {\n      n = mathpow(10, LOG_BASE - sd);\n      rd[i] = (k / n | 0) * n;\n    }\n\n    // Remove trailing words which are zero.\n    for (; rd[i] === 0; i--) rd.pop();\n\n    // Zero?\n    if (i < 0) {\n      e = 0;\n      rd = [0];\n    } else {\n      e = -1;\n\n      // Remove leading words which are zero and adjust exponent accordingly.\n      for (; rd[0] === 0; e -= LOG_BASE) rd.shift();\n\n      // Count the digits of the first word of rd to determine leading zeros.\n      for (k = 1, n = rd[0]; n >= 10; n /= 10) k++;\n\n      // Adjust the exponent for leading zeros of the first word of rd.\n      if (k < LOG_BASE) e -= LOG_BASE - k;\n    }\n\n    r.e = e;\n    r.d = rd;\n\n    return r;\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` rounded to an integer using rounding mode `rounding`.\n   *\n   * To emulate `Math.round`, set rounding to 7 (ROUND_HALF_CEIL).\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function round(x) {\n    return finalise(x = new this(x), x.e + 1, this.rounding);\n  }\n\n\n  /*\n   * Return\n   *   1    if x > 0,\n   *  -1    if x < 0,\n   *   0    if x is 0,\n   *  -0    if x is -0,\n   *   NaN  otherwise\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function sign(x) {\n    x = new this(x);\n    return x.d ? (x.d[0] ? x.s : 0 * x.s) : x.s || NaN;\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the sine of `x`, rounded to `precision` significant digits\n   * using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function sin(x) {\n    return new this(x).sin();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the hyperbolic sine of `x`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function sinh(x) {\n    return new this(x).sinh();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the square root of `x`, rounded to `precision` significant\n   * digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function sqrt(x) {\n    return new this(x).sqrt();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` minus `y`, rounded to `precision` significant digits\n   * using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal}\n   * y {number|string|Decimal}\n   *\n   */\n  function sub(x, y) {\n    return new this(x).sub(y);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the sum of the arguments, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * Only the result is rounded, not the intermediate calculations.\n   *\n   * arguments {number|string|Decimal}\n   *\n   */\n  function sum() {\n    var i = 0,\n      args = arguments,\n      x = new this(args[i]);\n\n    external = false;\n    for (; x.s && ++i < args.length;) x = x.plus(args[i]);\n    external = true;\n\n    return finalise(x, this.precision, this.rounding);\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the tangent of `x`, rounded to `precision` significant\n   * digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function tan(x) {\n    return new this(x).tan();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is the hyperbolic tangent of `x`, rounded to `precision`\n   * significant digits using rounding mode `rounding`.\n   *\n   * x {number|string|Decimal} A value in radians.\n   *\n   */\n  function tanh(x) {\n    return new this(x).tanh();\n  }\n\n\n  /*\n   * Return a new Decimal whose value is `x` truncated to an integer.\n   *\n   * x {number|string|Decimal}\n   *\n   */\n  function trunc(x) {\n    return finalise(x = new this(x), x.e + 1, 1);\n  }\n\n\n  // Create and configure initial Decimal constructor.\n  Decimal = clone(DEFAULTS);\n  Decimal.prototype.constructor = Decimal;\n  Decimal['default'] = Decimal.Decimal = Decimal;\n\n  // Create the internal constants from their string values.\n  LN10 = new Decimal(LN10);\n  PI = new Decimal(PI);\n\n\n  // Export.\n\n\n  // AMD.\n  if (typeof define == 'function' && define.amd) {\n    define(function () {\n      return Decimal;\n    });\n\n  // Node and other environments that support module.exports.\n  } else if (typeof module != 'undefined' && module.exports) {\n    if (typeof Symbol == 'function' && typeof Symbol.iterator == 'symbol') {\n      P[Symbol['for']('nodejs.util.inspect.custom')] = P.toString;\n      P[Symbol.toStringTag] = 'Decimal';\n    }\n\n    module.exports = Decimal;\n\n  // Browser.\n  } else {\n    if (!globalScope) {\n      globalScope = typeof self != 'undefined' && self && self.self == self ? self : window;\n    }\n\n    noConflict = globalScope.Decimal;\n    Decimal.noConflict = function () {\n      globalScope.Decimal = noConflict;\n      return Decimal;\n    };\n\n    globalScope.Decimal = Decimal;\n  }\n})(this);\n"
  },
  {
    "path": "src/lib/eventemitter3.js",
    "content": "// source: https://github.com/primus/eventemitter3/blob/master/index.js\n\n'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n  , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n  Events.prototype = Object.create(null);\n\n  //\n  // This hack is needed because the `__proto__` property is still inherited in\n  // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n  //\n  if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n  this.fn = fn;\n  this.context = context;\n  this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('The listener must be a function');\n  }\n\n  var listener = new EE(fn, context || emitter, once)\n    , evt = prefix ? prefix + event : event;\n\n  if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n  else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n  else emitter._events[evt] = [emitter._events[evt], listener];\n\n  return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n  if (--emitter._eventsCount === 0) emitter._events = new Events();\n  else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n  this._events = new Events();\n  this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n  var names = []\n    , events\n    , name;\n\n  if (this._eventsCount === 0) return names;\n\n  for (name in (events = this._events)) {\n    if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n  }\n\n  if (Object.getOwnPropertySymbols) {\n    return names.concat(Object.getOwnPropertySymbols(events));\n  }\n\n  return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n  var evt = prefix ? prefix + event : event\n    , handlers = this._events[evt];\n\n  if (!handlers) return [];\n  if (handlers.fn) return [handlers.fn];\n\n  for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n    ee[i] = handlers[i].fn;\n  }\n\n  return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n  var evt = prefix ? prefix + event : event\n    , listeners = this._events[evt];\n\n  if (!listeners) return 0;\n  if (listeners.fn) return 1;\n  return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return false;\n\n  var listeners = this._events[evt]\n    , len = arguments.length\n    , args\n    , i;\n\n  if (listeners.fn) {\n    if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n    switch (len) {\n      case 1: return listeners.fn.call(listeners.context), true;\n      case 2: return listeners.fn.call(listeners.context, a1), true;\n      case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n      case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n      case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n      case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n    }\n\n    for (i = 1, args = new Array(len -1); i < len; i++) {\n      args[i - 1] = arguments[i];\n    }\n\n    listeners.fn.apply(listeners.context, args);\n  } else {\n    var length = listeners.length\n      , j;\n\n    for (i = 0; i < length; i++) {\n      if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n      switch (len) {\n        case 1: listeners[i].fn.call(listeners[i].context); break;\n        case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n        case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n        case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n        default:\n          if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n            args[j - 1] = arguments[j];\n          }\n\n          listeners[i].fn.apply(listeners[i].context, args);\n      }\n    }\n  }\n\n  return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n  return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n  return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n  var evt = prefix ? prefix + event : event;\n\n  if (!this._events[evt]) return this;\n  if (!fn) {\n    clearEvent(this, evt);\n    return this;\n  }\n\n  var listeners = this._events[evt];\n\n  if (listeners.fn) {\n    if (\n      listeners.fn === fn &&\n      (!once || listeners.once) &&\n      (!context || listeners.context === context)\n    ) {\n      clearEvent(this, evt);\n    }\n  } else {\n    for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n      if (\n        listeners[i].fn !== fn ||\n        (once && !listeners[i].once) ||\n        (context && listeners[i].context !== context)\n      ) {\n        events.push(listeners[i]);\n      }\n    }\n\n    //\n    // Reset the array, or remove it completely if we have no more listeners.\n    //\n    if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n    else clearEvent(this, evt);\n  }\n\n  return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n  var evt;\n\n  if (event) {\n    evt = prefix ? prefix + event : event;\n    if (this._events[evt]) clearEvent(this, evt);\n  } else {\n    this._events = new Events();\n    this._eventsCount = 0;\n  }\n\n  return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n  module.exports = EventEmitter;\n}\n"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/AUTHORS.txt",
    "content": "Authors ordered by first contribution\nA list of current team members is available at http://jqueryui.com/about\n\nPaul Bakaus <paul.bakaus@gmail.com>\nRichard Worth <rdworth@gmail.com>\nYehuda Katz <wycats@gmail.com>\nSean Catchpole <sean@sunsean.com>\nJohn Resig <jeresig@gmail.com>\nTane Piper <piper.tane@gmail.com>\nDmitri Gaskin <dmitrig01@gmail.com>\nKlaus Hartl <klaus.hartl@gmail.com>\nStefan Petre <stefan.petre@gmail.com>\nGilles van den Hoven <gilles@webunity.nl>\nMicheil Bryan Smith <micheil@brandedcode.com>\nJörn Zaefferer <joern.zaefferer@gmail.com>\nMarc Grabanski <m@marcgrabanski.com>\nKeith Wood <kbwood@iinet.com.au>\nBrandon Aaron <brandon.aaron@gmail.com>\nScott González <scott.gonzalez@gmail.com>\nEduardo Lundgren <eduardolundgren@gmail.com>\nAaron Eisenberger <aaronchi@gmail.com>\nJoan Piedra <theneojp@gmail.com>\nBruno Basto <b.basto@gmail.com>\nRemy Sharp <remy@leftlogic.com>\nBohdan Ganicky <bohdan.ganicky@gmail.com>\nDavid Bolter <david.bolter@gmail.com>\nChi Cheng <cloudream@gmail.com>\nCa-Phun Ung <pazu2k@gmail.com>\nAriel Flesler <aflesler@gmail.com>\nMaggie Wachs <maggie@filamentgroup.com>\nScott Jehl <scottjehl@gmail.com>\nTodd Parker <todd@filamentgroup.com>\nAndrew Powell <andrew@shellscape.org>\nBrant Burnett <btburnett3@gmail.com>\nDouglas Neiner <doug@dougneiner.com>\nPaul Irish <paul.irish@gmail.com>\nRalph Whitbeck <ralph.whitbeck@gmail.com>\nThibault Duplessis <thibault.duplessis@gmail.com>\nDominique Vincent <dominique.vincent@toitl.com>\nJack Hsu <jack.hsu@gmail.com>\nAdam Sontag <ajpiano@ajpiano.com>\nCarl Fürstenberg <carl@excito.com>\nKevin Dalman <development@allpro.net>\nAlberto Fernández Capel <afcapel@gmail.com>\nJacek Jędrzejewski (http://jacek.jedrzejewski.name)\nTing Kuei <ting@kuei.com>\nSamuel Cormier-Iijima <sam@chide.it>\nJon Palmer <jonspalmer@gmail.com>\nBen Hollis <bhollis@amazon.com>\nJustin MacCarthy <Justin@Rubystars.biz>\nEyal Kobrigo <kobrigo@hotmail.com>\nTiago Freire <tiago.freire@gmail.com>\nDiego Tres <diegotres@gmail.com>\nHolger Rüprich <holger@rueprich.de>\nZiling Zhao <zilingzhao@gmail.com>\nMike Alsup <malsup@gmail.com>\nRobson Braga Araujo <robsonbraga@gmail.com>\nPierre-Henri Ausseil <ph.ausseil@gmail.com>\nChristopher McCulloh <cmcculloh@gmail.com>\nAndrew Newcomb <ext.github@preceptsoftware.co.uk>\nLim Chee Aun <cheeaun@gmail.com>\nJorge Barreiro <yortx.barry@gmail.com>\nDaniel Steigerwald <daniel@steigerwald.cz>\nJohn Firebaugh <john_firebaugh@bigfix.com>\nJohn Enters <github@darkdark.net>\nAndrey Kapitcyn <ru.m157y@gmail.com>\nDmitry Petrov <dpetroff@gmail.com>\nEric Hynds <eric@hynds.net>\nChairat Sunthornwiphat <pipo@sixhead.com>\nJosh Varner <josh.varner@gmail.com>\nStéphane Raimbault <stephane.raimbault@gmail.com>\nJay Merrifield <fracmak@gmail.com>\nJ. Ryan Stinnett <jryans@gmail.com>\nPeter Heiberg <peter@heiberg.se>\nAlex Dovenmuehle <adovenmuehle@gmail.com>\nJamie Gegerson <git@jamiegegerson.com>\nRaymond Schwartz <skeetergraphics@gmail.com>\nPhillip Barnes <philbar@gmail.com>\nKyle Wilkinson <kai@wikyd.org>\nKhaled AlHourani <me@khaledalhourani.com>\nMarian Rudzynski <mr@impaled.org>\nJean-Francois Remy <jeff@melix.org>\nDoug Blood <dougblood@gmail.com>\nFilippo Cavallarin <filippo.cavallarin@codseq.it>\nHeiko Henning <heiko@thehennings.ch>\nAliaksandr Rahalevich <saksmlz@gmail.com>\nMario Visic <mario@mariovisic.com>\nXavi Ramirez <xavi.rmz@gmail.com>\nMax Schnur <max.schnur@gmail.com>\nSaji Nediyanchath <saji89@gmail.com>\nCorey Frang <gnarf37@gmail.com>\nAaron Peterson <aaronp123@yahoo.com>\nIvan Peters <ivan@ivanpeters.com>\nMohamed Cherif Bouchelaghem <cherifbouchelaghem@yahoo.fr>\nMarcos Sousa <falecomigo@marcossousa.com>\nMichael DellaNoce <mdellanoce@mailtrust.com>\nGeorge Marshall <echosx@gmail.com>\nTobias Brunner <tobias@strongswan.org>\nMartin Solli <msolli@gmail.com>\nDavid Petersen <public@petersendidit.com>\nDan Heberden <danheberden@gmail.com>\nWilliam Kevin Manire <williamkmanire@gmail.com>\nGilmore Davidson <gilmoreorless@gmail.com>\nMichael Wu <michaelmwu@gmail.com>\nAdam Parod <mystic414@gmail.com>\nGuillaume Gautreau <guillaume+github@ghusse.com>\nMarcel Toele <EleotleCram@gmail.com>\nDan Streetman <ddstreet@ieee.org>\nMatt Hoskins <matt@nipltd.com>\nGiovanni Giacobbi <giovanni@giacobbi.net>\nKyle Florence <kyle.florence@gmail.com>\nPavol Hluchý <lopo@losys.sk>\nHans Hillen <hans.hillen@gmail.com>\nMark Johnson <virgofx@live.com>\nTrey Hunner <treyhunner@gmail.com>\nShane Whittet <whittet@gmail.com>\nEdward A Faulkner <ef@alum.mit.edu>\nAdam Baratz <adam@adambaratz.com>\nKato Kazuyoshi <kato.kazuyoshi@gmail.com>\nEike Send <eike.send@gmail.com>\nKris Borchers <kris.borchers@gmail.com>\nEddie Monge <eddie@eddiemonge.com>\nIsrael Tsadok <itsadok@gmail.com>\nCarson McDonald <carson@ioncannon.net>\nJason Davies <jason@jasondavies.com>\nGarrison Locke <gplocke@gmail.com>\nDavid Murdoch <david@davidmurdoch.com>\nBenjamin Scott Boyle <benjamins.boyle@gmail.com>\nJesse Baird <jebaird@gmail.com>\nJonathan Vingiano <jvingiano@gmail.com>\nDylan Just <dev@ephox.com>\nHiroshi Tomita <tomykaira@gmail.com>\nGlenn Goodrich <glenn.goodrich@gmail.com>\nTarafder Ashek-E-Elahi <mail.ashek@gmail.com>\nRyan Neufeld <ryan@neufeldmail.com>\nMarc Neuwirth <marc.neuwirth@gmail.com>\nPhilip Graham <philip.robert.graham@gmail.com>\nBenjamin Sterling <benjamin.sterling@kenzomedia.com>\nWesley Walser <waw325@gmail.com>\nKouhei Sutou <kou@clear-code.com>\nKarl Kirch <karlkrch@gmail.com>\nChris Kelly <ckdake@ckdake.com>\nJason Oster <jay@kodewerx.org>\nFelix Nagel <info@felixnagel.com>\nAlexander Polomoshnov <alex.polomoshnov@gmail.com>\nDavid Leal <dgleal@gmail.com>\nIgor Milla <igor.fsp.milla@gmail.com>\nDave Methvin <dave.methvin@gmail.com>\nFlorian Gutmann <f.gutmann@chronimo.com>\nMarwan Al Jubeh <marwan.aljubeh@gmail.com>\nMilan Broum <midlis@googlemail.com>\nSebastian Sauer <info@dynpages.de>\nGaëtan Muller <m.gaetan89@gmail.com>\nMichel Weimerskirch <michel@weimerskirch.net>\nWilliam Griffiths <william@ycymro.com>\nStojce Slavkovski <stojce@gmail.com>\nDavid Soms <david.soms@gmail.com>\nDavid De Sloovere <david.desloovere@outlook.com>\nMichael P. Jung <michael.jung@terreon.de>\nShannon Pekary <spekary@gmail.com>\nDan Wellman <danwellman@hotmail.com>\nMatthew Edward Hutton <meh@corefiling.co.uk>\nJames Khoury <james@jameskhoury.com>\nRob Loach <robloach@gmail.com>\nAlberto Monteiro <betimbrasil@gmail.com>\nAlex Rhea <alex.rhea@gmail.com>\nKrzysztof Rosiński <rozwell69@gmail.com>\nRyan Olton <oltonr@gmail.com>\nGenie <386@mail.com>\nRick Waldron <waldron.rick@gmail.com>\nIan Simpson <spoonlikesham@gmail.com>\nLev Kitsis <spam4lev@gmail.com>\nTJ VanToll <tj.vantoll@gmail.com>\nJustin Domnitz <jdomnitz@gmail.com>\nDouglas Cerna <douglascerna@yahoo.com>\nBert ter Heide <bertjh@hotmail.com>\nJasvir Nagra <jasvir@gmail.com>\nYuriy Khabarov <13real008@gmail.com>\nHarri Kilpiö <harri.kilpio@gmail.com>\nLado Lomidze <lado.lomidze@gmail.com>\nAmir E. Aharoni <amir.aharoni@mail.huji.ac.il>\nSimon Sattes <simon.sattes@gmail.com>\nJo Liss <joliss42@gmail.com>\nGuntupalli Karunakar <karunakarg@yahoo.com>\nShahyar Ghobadpour <shahyar@gmail.com>\nLukasz Lipinski <uzza17@gmail.com>\nTimo Tijhof <krinklemail@gmail.com>\nJason Moon <jmoon@socialcast.com>\nMartin Frost <martinf55@hotmail.com>\nEneko Illarramendi <eneko@illarra.com>\nEungJun Yi <semtlenori@gmail.com>\nCourtland Allen <courtlandallen@gmail.com>\nViktar Varvanovich <non4eg@gmail.com>\nDanny Trunk <dtrunk90@gmail.com>\nPavel Stetina <pavel.stetina@nangu.tv>\nMichael Stay <metaweta@gmail.com>\nSteven Roussey <sroussey@gmail.com>\nMichael Hollis <hollis21@gmail.com>\nLee Rowlands <lee.rowlands@previousnext.com.au>\nTimmy Willison <timmywillisn@gmail.com>\nKarl Swedberg <kswedberg@gmail.com>\nBaoju Yuan <the_guy_1987@hotmail.com>\nMaciej Mroziński <maciej.k.mrozinski@gmail.com>\nLuis Dalmolin <luis.nh@gmail.com>\nMark Aaron Shirley <maspwr@gmail.com>\nMartin Hoch <martin@fidion.de>\nJiayi Yang <tr870829@gmail.com>\nPhilipp Benjamin Köppchen <xgxtpbk@gws.ms>\nSindre Sorhus <sindresorhus@gmail.com>\nBernhard Sirlinger <bernhard.sirlinger@tele2.de>\nJared A. Scheel <jared@jaredscheel.com>\nRafael Xavier de Souza <rxaviers@gmail.com>\nJohn Chen <zhang.z.chen@intel.com>\nRobert Beuligmann <robertbeuligmann@gmail.com>\nDale Kocian <dale.kocian@gmail.com>\nMike Sherov <mike.sherov@gmail.com>\nAndrew Couch <andy@couchand.com>\nMarc-Andre Lafortune <github@marc-andre.ca>\nNate Eagle <nate.eagle@teamaol.com>\nDavid Souther <davidsouther@gmail.com>\nMathias Stenbom <mathias@stenbom.com>\nSergey Kartashov <ebishkek@yandex.ru>\nAvinash R <nashpapa@gmail.com>\nEthan Romba <ethanromba@gmail.com>\nCory Gackenheimer <cory.gack@gmail.com>\nJuan Pablo Kaniefsky <jpkaniefsky@gmail.com>\nRoman Salnikov <bardt.dz@gmail.com>\nAnika Henke <anika@selfthinker.org>\nSamuel Bovée <samycookie2000@yahoo.fr>\nFabrício Matté <ult_combo@hotmail.com>\nViktor Kojouharov <vkojouharov@gmail.com>\nPawel Maruszczyk (http://hrabstwo.net)\nPavel Selitskas <p.selitskas@gmail.com>\nBjørn Johansen <post@bjornjohansen.no>\nMatthieu Penant <thieum22@hotmail.com>\nDominic Barnes <dominic@dbarnes.info>\nDavid Sullivan <david.sullivan@gmail.com>\nThomas Jaggi <thomas@responsive.ch>\nVahid Sohrabloo <vahid4134@gmail.com>\nTravis Carden <travis.carden@gmail.com>\nBruno M. Custódio <bruno@brunomcustodio.com>\nNathanael Silverman <nathanael.silverman@gmail.com>\nChristian Wenz <christian@wenz.org>\nSteve Urmston <steve@urm.st>\nZaven Muradyan <megalivoithos@gmail.com>\nWoody Gilk <shadowhand@deviantart.com>\nZbigniew Motyka <zbigniew.motyka@gmail.com>\nSuhail Alkowaileet <xsoh.k7@gmail.com>\nToshi MARUYAMA <marutosijp2@yahoo.co.jp>\nDavid Hansen <hansede@gmail.com>\nBrian Grinstead <briangrinstead@gmail.com>\nChristian Klammer <christian314159@gmail.com>\nSteven Luscher <jquerycla@steveluscher.com>\nGan Eng Chin <engchin.gan@gmail.com>\nGabriel Schulhof <gabriel.schulhof@intel.com>\nAlexander Schmitz <arschmitz@gmail.com>\nVilhjálmur Skúlason <vis@dmm.is>\nSiebrand Mazeland <siebrand@kitano.nl>\nMohsen Ekhtiari <mohsenekhtiari@yahoo.com>\nPere Orga <gotrunks@gmail.com>\nJasper de Groot <mail@ugomobi.com>\nStephane Deschamps <stephane.deschamps@gmail.com>\nJyoti Deka <dekajp@gmail.com>\nAndrei Picus <office.nightcrawler@gmail.com>\nOndrej Novy <novy@ondrej.org>\nJacob McCutcheon <jacob.mccutcheon@gmail.com>\nMonika Piotrowicz <monika.piotrowicz@gmail.com>\nImants Horsts <imants.horsts@inbox.lv>\nEric Dahl <eric.c.dahl@gmail.com>\nDave Stein <dave@behance.com>\nDylan Barrell <dylan@barrell.com>\nDaniel DeGroff <djdegroff@gmail.com>\nMichael Wiencek <mwtuea@gmail.com>\nThomas Meyer <meyertee@gmail.com>\nRuslan Yakhyaev <ruslan@ruslan.io>\nBrian J. Dowling <bjd-dev@simplicity.net>\nBen Higgins <ben@extrahop.com>\nYermo Lamers <yml@yml.com>\nPatrick Stapleton <github@gdi2290.com>\nTrisha Crowley <trisha.crowley@gmail.com>\nUsman Akeju <akeju00+github@gmail.com>\nRodrigo Menezes <rod333@gmail.com>\nJacques Perrault <jacques_perrault@us.ibm.com>\nFrederik Elvhage <frederik.elvhage@googlemail.com>\nWill Holley <willholley@gmail.com>\nUri Gilad <antishok@gmail.com>\nRichard Gibson <richard.gibson@gmail.com>\nSimen Bekkhus <sbekkhus91@gmail.com>\nChen Eshchar <eshcharc@gmail.com>\nBruno Pérel <brunoperel@gmail.com>\nMohammed Alshehri <m@dralshehri.com>\nLisa Seacat DeLuca <ldeluca@us.ibm.com>\nAnne-Gaelle Colom <coloma@westminster.ac.uk>\nAdam Foster <slimfoster@gmail.com>\nLuke Page <luke.a.page@gmail.com>\nDaniel Owens <daniel@matchstickmixup.com>\nMichael Orchard <morchard@scottlogic.co.uk>\nMarcus Warren <marcus@envoke.com>\nNils Heuermann <nils@world-of-scripts.de>\nMarco Ziech <marco@ziech.net>\nPatricia Juarez <patrixd@gmail.com>\nBen Mosher <me@benmosher.com>\nAblay Keldibek <atomio.ak@gmail.com>\nThomas Applencourt <thomas.applencourt@irsamc.ups-tlse.fr>\nJiabao Wu <jiabao.foss@gmail.com>\nEric Lee Carraway <github@ericcarraway.com>\nVictor Homyakov <vkhomyackov@gmail.com>\nMyeongjin Lee <aranet100@gmail.com>\nLiran Sharir <lsharir@gmail.com>\nWeston Ruter <weston@xwp.co>\nMani Mishra <manimishra902@gmail.com>\nHannah Methvin <hannahmethvin@gmail.com>\nLeonardo Balter <leonardo.balter@gmail.com>\nBenjamin Albert <benjamin_a5@yahoo.com>\nMichał Gołębiowski <m.goleb@gmail.com>\nAlyosha Pushak <alyosha.pushak@gmail.com>\nFahad Ahmad <fahadahmad41@hotmail.com>\nMatt Brundage <github@mattbrundage.com>\nFrancesc Baeta <francesc.baeta@gmail.com>\nPiotr Baran <piotros@wp.pl>\nMukul Hase <mukulhase@gmail.com>\nKonstantin Dinev <kdinev@mail.bw.edu>\nRand Scullard <rand@randscullard.com>\nDan Strohl <dan@wjcg.net>\nMaksim Ryzhikov <rv.maksim@gmail.com>\nAmine HADDAD <haddad@allegorie.tv>\nAmanpreet Singh <apsdehal@gmail.com>\nAlexey Balchunas <bleshik@gmail.com>\nPeter Kehl <peter.kehl@gmail.com>\nPeter Dave Hello <hsu@peterdavehello.org>\nJohannes Schäfer <johnschaefer@gmx.de>\nVille Skyttä <ville.skytta@iki.fi>\nRyan Oriecuia <ryan.oriecuia@visioncritical.com>\n"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/LICENSE.txt",
    "content": "Copyright jQuery Foundation and other contributors, https://jquery.org/\n\nThis software consists of voluntary contributions made by many\nindividuals. For exact contribution history, see the revision history\navailable at https://github.com/jquery/jquery-ui\n\nThe following license applies to all parts of this software except as\ndocumented below:\n\n====\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy of this software and associated documentation files (the\n\"Software\"), to deal in the Software without restriction, including\nwithout limitation the rights to use, copy, modify, merge, publish,\ndistribute, sublicense, and/or sell copies of the Software, and to\npermit persons to whom the Software is furnished to do so, subject to\nthe following conditions:\n\nThe above copyright notice and this permission notice shall be\nincluded in all copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\nEXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\nMERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\nNONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE\nLIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION\nOF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION\nWITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n\n====\n\nCopyright and related rights for sample code are waived via CC0. Sample\ncode is defined as all source code contained within the demos directory.\n\nCC0: http://creativecommons.org/publicdomain/zero/1.0/\n\n====\n\nAll files located in the node_modules and external directories are\nexternally maintained libraries used by this software which have their\nown licenses; we recommend you read them, as their terms may differ from\nthe terms above.\n"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/external/jquery/jquery.js",
    "content": "/*!\n * jQuery JavaScript Library v1.12.4\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-05-20T17:17Z\n */\n\n(function( global, factory ) {\n\n\tif ( typeof module === \"object\" && typeof module.exports === \"object\" ) {\n\t\t// For CommonJS and CommonJS-like environments where a proper `window`\n\t\t// is present, execute the factory and get jQuery.\n\t\t// For environments that do not have a `window` with a `document`\n\t\t// (such as Node.js), expose a factory as module.exports.\n\t\t// This accentuates the need for the creation of a real `window`.\n\t\t// e.g. var jQuery = require(\"jquery\")(window);\n\t\t// See ticket #14549 for more info.\n\t\tmodule.exports = global.document ?\n\t\t\tfactory( global, true ) :\n\t\t\tfunction( w ) {\n\t\t\t\tif ( !w.document ) {\n\t\t\t\t\tthrow new Error( \"jQuery requires a window with a document\" );\n\t\t\t\t}\n\t\t\t\treturn factory( w );\n\t\t\t};\n\t} else {\n\t\tfactory( global );\n\t}\n\n// Pass this if window is not defined yet\n}(typeof window !== \"undefined\" ? window : this, function( window, noGlobal ) {\n\n// Support: Firefox 18+\n// Can't be in strict mode, several libs including ASP.NET trace\n// the stack via arguments.caller.callee and Firefox dies if\n// you try to trace through \"use strict\" call chains. (#13335)\n//\"use strict\";\nvar deletedIds = [];\n\nvar document = window.document;\n\nvar slice = deletedIds.slice;\n\nvar concat = deletedIds.concat;\n\nvar push = deletedIds.push;\n\nvar indexOf = deletedIds.indexOf;\n\nvar class2type = {};\n\nvar toString = class2type.toString;\n\nvar hasOwn = class2type.hasOwnProperty;\n\nvar support = {};\n\n\n\nvar\n\tversion = \"1.12.4\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\n\t\t// The jQuery object is actually just the init constructor 'enhanced'\n\t\t// Need init if jQuery is called (just allow error to be thrown if not included)\n\t\treturn new jQuery.fn.init( selector, context );\n\t},\n\n\t// Support: Android<4.1, IE<9\n\t// Make sure we trim BOM and NBSP\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\n\n\t// Matches dashed string for camelizing\n\trmsPrefix = /^-ms-/,\n\trdashAlpha = /-([\\da-z])/gi,\n\n\t// Used by jQuery.camelCase as callback to replace()\n\tfcamelCase = function( all, letter ) {\n\t\treturn letter.toUpperCase();\n\t};\n\njQuery.fn = jQuery.prototype = {\n\n\t// The current version of jQuery being used\n\tjquery: version,\n\n\tconstructor: jQuery,\n\n\t// Start with an empty selector\n\tselector: \"\",\n\n\t// The default length of a jQuery object is 0\n\tlength: 0,\n\n\ttoArray: function() {\n\t\treturn slice.call( this );\n\t},\n\n\t// Get the Nth element in the matched element set OR\n\t// Get the whole matched element set as a clean array\n\tget: function( num ) {\n\t\treturn num != null ?\n\n\t\t\t// Return just the one element from the set\n\t\t\t( num < 0 ? this[ num + this.length ] : this[ num ] ) :\n\n\t\t\t// Return all the elements in a clean array\n\t\t\tslice.call( this );\n\t},\n\n\t// Take an array of elements and push it onto the stack\n\t// (returning the new matched element set)\n\tpushStack: function( elems ) {\n\n\t\t// Build a new jQuery matched element set\n\t\tvar ret = jQuery.merge( this.constructor(), elems );\n\n\t\t// Add the old object onto the stack (as a reference)\n\t\tret.prevObject = this;\n\t\tret.context = this.context;\n\n\t\t// Return the newly-formed element set\n\t\treturn ret;\n\t},\n\n\t// Execute a callback for every element in the matched set.\n\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\n\t},\n\n\tmap: function( callback ) {\n\t\treturn this.pushStack( jQuery.map( this, function( elem, i ) {\n\t\t\treturn callback.call( elem, i, elem );\n\t\t} ) );\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( slice.apply( this, arguments ) );\n\t},\n\n\tfirst: function() {\n\t\treturn this.eq( 0 );\n\t},\n\n\tlast: function() {\n\t\treturn this.eq( -1 );\n\t},\n\n\teq: function( i ) {\n\t\tvar len = this.length,\n\t\t\tj = +i + ( i < 0 ? len : 0 );\n\t\treturn this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );\n\t},\n\n\tend: function() {\n\t\treturn this.prevObject || this.constructor();\n\t},\n\n\t// For internal use only.\n\t// Behaves like an Array's method, not like a jQuery method.\n\tpush: push,\n\tsort: deletedIds.sort,\n\tsplice: deletedIds.splice\n};\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, clone,\n\t\ttarget = arguments[ 0 ] || {},\n\t\ti = 1,\n\t\tlength = arguments.length,\n\t\tdeep = false;\n\n\t// Handle a deep copy situation\n\tif ( typeof target === \"boolean\" ) {\n\t\tdeep = target;\n\n\t\t// skip the boolean and the target\n\t\ttarget = arguments[ i ] || {};\n\t\ti++;\n\t}\n\n\t// Handle case when target is a string or something (possible in deep copy)\n\tif ( typeof target !== \"object\" && !jQuery.isFunction( target ) ) {\n\t\ttarget = {};\n\t}\n\n\t// extend jQuery itself if only one argument is passed\n\tif ( i === length ) {\n\t\ttarget = this;\n\t\ti--;\n\t}\n\n\tfor ( ; i < length; i++ ) {\n\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\n\t\t\t// Extend the base object\n\t\t\tfor ( name in options ) {\n\t\t\t\tsrc = target[ name ];\n\t\t\t\tcopy = options[ name ];\n\n\t\t\t\t// Prevent never-ending loop\n\t\t\t\tif ( target === copy ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Recurse if we're merging plain objects or arrays\n\t\t\t\tif ( deep && copy && ( jQuery.isPlainObject( copy ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\n\t\t\t\t\tif ( copyIsArray ) {\n\t\t\t\t\t\tcopyIsArray = false;\n\t\t\t\t\t\tclone = src && jQuery.isArray( src ) ? src : [];\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclone = src && jQuery.isPlainObject( src ) ? src : {};\n\t\t\t\t\t}\n\n\t\t\t\t\t// Never move original objects, clone them\n\t\t\t\t\ttarget[ name ] = jQuery.extend( deep, clone, copy );\n\n\t\t\t\t// Don't bring in undefined values\n\t\t\t\t} else if ( copy !== undefined ) {\n\t\t\t\t\ttarget[ name ] = copy;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Return the modified object\n\treturn target;\n};\n\njQuery.extend( {\n\n\t// Unique for each copy of jQuery on the page\n\texpando: \"jQuery\" + ( version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// Assume jQuery is ready without the ready module\n\tisReady: true,\n\n\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\tnoop: function() {},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type( obj ) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type( obj ) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\t/* jshint eqeqeq: false */\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\n\t\t// parseFloat NaNs numeric-cast false positives (null|true|false|\"\")\n\t\t// ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n\t\t// subtraction forces infinities to NaN\n\t\t// adding 1 corrects loss of precision from parseFloat (#15100)\n\t\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisEmptyObject: function( obj ) {\n\t\tvar name;\n\t\tfor ( name in obj ) {\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\tvar key;\n\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type( obj ) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!hasOwn.call( obj, \"constructor\" ) &&\n\t\t\t\t!hasOwn.call( obj.constructor.prototype, \"isPrototypeOf\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Handle iteration over inherited properties before own properties.\n\t\tif ( !support.ownFirst ) {\n\t\t\tfor ( key in obj ) {\n\t\t\t\treturn hasOwn.call( obj, key );\n\t\t\t}\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || hasOwn.call( obj, key );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn obj + \"\";\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ toString.call( obj ) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data ); // jscs:ignore requireDotNotation\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\n\t// Microsoft forgot to hump their vendor prefix (#9572)\n\tcamelCase: function( string ) {\n\t\treturn string.replace( rmsPrefix, \"ms-\" ).replace( rdashAlpha, fcamelCase );\n\t},\n\n\tnodeName: function( elem, name ) {\n\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n\t},\n\n\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn obj;\n\t},\n\n\t// Support: Android<4.1, IE<9\n\ttrim: function( text ) {\n\t\treturn text == null ?\n\t\t\t\"\" :\n\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t},\n\n\t// results is for internal usage only\n\tmakeArray: function( arr, results ) {\n\t\tvar ret = results || [];\n\n\t\tif ( arr != null ) {\n\t\t\tif ( isArrayLike( Object( arr ) ) ) {\n\t\t\t\tjQuery.merge( ret,\n\t\t\t\t\ttypeof arr === \"string\" ?\n\t\t\t\t\t[ arr ] : arr\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tpush.call( ret, arr );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t},\n\n\tinArray: function( elem, arr, i ) {\n\t\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( indexOf ) {\n\t\t\t\treturn indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar len = +second.length,\n\t\t\tj = 0,\n\t\t\ti = first.length;\n\n\t\twhile ( j < len ) {\n\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Workaround casting of .length to NaN on otherwise arraylike objects (e.g., NodeLists)\n\t\tif ( len !== len ) {\n\t\t\twhile ( second[ j ] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, invert ) {\n\t\tvar callbackInverse,\n\t\t\tmatches = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length,\n\t\t\tcallbackExpect = !invert;\n\n\t\t// Go through the array, only saving the items\n\t\t// that pass the validator function\n\t\tfor ( ; i < length; i++ ) {\n\t\t\tcallbackInverse = !callback( elems[ i ], i );\n\t\t\tif ( callbackInverse !== callbackExpect ) {\n\t\t\t\tmatches.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn matches;\n\t},\n\n\t// arg is for internal usage only\n\tmap: function( elems, callback, arg ) {\n\t\tvar length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Go through every key on the object,\n\t\t} else {\n\t\t\tfor ( i in elems ) {\n\t\t\t\tvalue = callback( elems[ i ], i, arg );\n\n\t\t\t\tif ( value != null ) {\n\t\t\t\t\tret.push( value );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn concat.apply( [], ret );\n\t},\n\n\t// A global GUID counter for objects\n\tguid: 1,\n\n\t// Bind a function to a context, optionally partially applying any\n\t// arguments.\n\tproxy: function( fn, context ) {\n\t\tvar args, proxy, tmp;\n\n\t\tif ( typeof context === \"string\" ) {\n\t\t\ttmp = fn[ context ];\n\t\t\tcontext = fn;\n\t\t\tfn = tmp;\n\t\t}\n\n\t\t// Quick check to determine if target is callable, in the spec\n\t\t// this throws a TypeError, but we will just return undefined.\n\t\tif ( !jQuery.isFunction( fn ) ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\t// Simulated bind\n\t\targs = slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( slice.call( arguments ) ) );\n\t\t};\n\n\t\t// Set the guid of unique handler to the same of original handler, so it can be removed\n\t\tproxy.guid = fn.guid = fn.guid || jQuery.guid++;\n\n\t\treturn proxy;\n\t},\n\n\tnow: function() {\n\t\treturn +( new Date() );\n\t},\n\n\t// jQuery.support is not used in Core but other projects attach their\n\t// properties to it so it needs to exist.\n\tsupport: support\n} );\n\n// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = deletedIds[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( i, name ) {\n\tclass2type[ \"[object \" + name + \"]\" ] = name.toLowerCase();\n} );\n\nfunction isArrayLike( obj ) {\n\n\t// Support: iOS 8.2 (not reproducible in simulator)\n\t// `in` check used to prevent JIT error (gh-2145)\n\t// hasOwn isn't used here due to false negatives\n\t// regarding Nodelist length in IE\n\tvar length = !!obj && \"length\" in obj && obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( type === \"function\" || jQuery.isWindow( obj ) ) {\n\t\treturn false;\n\t}\n\n\treturn type === \"array\" || length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj;\n}\nvar Sizzle =\n/*!\n * Sizzle CSS Selector Engine v2.2.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\n */\n(function( window ) {\n\nvar i,\n\tsupport,\n\tExpr,\n\tgetText,\n\tisXML,\n\ttokenize,\n\tcompile,\n\tselect,\n\toutermostContext,\n\tsortInput,\n\thasDuplicate,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsHTML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + 1 * new Date(),\n\tpreferredDoc = window.document,\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\tsortOrder = function( a, b ) {\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t}\n\t\treturn 0;\n\t},\n\n\t// General-purpose constants\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Instance methods\n\thasOwn = ({}).hasOwnProperty,\n\tarr = [],\n\tpop = arr.pop,\n\tpush_native = arr.push,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf as it's faster than native\n\t// http://jsperf.com/thor-indexof-vs-for/5\n\tindexOf = function( list, elem ) {\n\t\tvar i = 0,\n\t\t\tlen = list.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( list[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\n\tbooleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n\n\t// Regular expressions\n\n\t// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace +\n\t\t// Operator (capture 2)\n\t\t\"*([*^$|!~]?=)\" + whitespace +\n\t\t// \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n\t\t\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace +\n\t\t\"*\\\\]\",\n\n\tpseudos = \":(\" + identifier + \")(?:\\\\((\" +\n\t\t// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n\t\t// 1. quoted (capture 3; capture 4 or capture 5)\n\t\t\"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" +\n\t\t// 2. simple (capture 6)\n\t\t\"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" +\n\t\t// 3. anything else (capture 2)\n\t\t\".*\" +\n\t\t\")\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trwhitespace = new RegExp( whitespace + \"+\", \"g\" ),\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\" ),\n\n\trattributeQuotes = new RegExp( \"=\" + whitespace + \"*([^\\\\]'\\\"]*?)\" + whitespace + \"*\\\\]\", \"g\" ),\n\n\trpseudo = new RegExp( pseudos ),\n\tridentifier = new RegExp( \"^\" + identifier + \"$\" ),\n\n\tmatchExpr = {\n\t\t\"ID\": new RegExp( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\n\t\t\"ATTR\": new RegExp( \"^\" + attributes ),\n\t\t\"PSEUDO\": new RegExp( \"^\" + pseudos ),\n\t\t\"CHILD\": new RegExp( \"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace +\n\t\t\t\"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace +\n\t\t\t\"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\" ),\n\t\t\"bool\": new RegExp( \"^(?:\" + booleans + \")$\", \"i\" ),\n\t\t// For use in libraries implementing .is()\n\t\t// We use this for POS matching in `select`\n\t\t\"needsContext\": new RegExp( \"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" +\n\t\t\twhitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\" )\n\t},\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trnative = /^[^{]+\\{\\s*\\[native \\w/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trsibling = /[+~]/,\n\trescape = /'|\\\\/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = new RegExp( \"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\" ),\n\tfunescape = function( _, escaped, escapedWhitespace ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\t// Support: Firefox<24\n\t\t// Workaround erroneous numeric interpretation of +\"0x\"\n\t\treturn high !== high || escapedWhitespace ?\n\t\t\tescaped :\n\t\t\thigh < 0 ?\n\t\t\t\t// BMP codepoint\n\t\t\t\tString.fromCharCode( high + 0x10000 ) :\n\t\t\t\t// Supplemental Plane codepoint (surrogate pair)\n\t\t\t\tString.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );\n\t},\n\n\t// Used for iframes\n\t// See setDocument()\n\t// Removing the function wrapper causes a \"Permission Denied\"\n\t// error in IE\n\tunloadHandler = function() {\n\t\tsetDocument();\n\t};\n\n// Optimize for push.apply( _, NodeList )\ntry {\n\tpush.apply(\n\t\t(arr = slice.call( preferredDoc.childNodes )),\n\t\tpreferredDoc.childNodes\n\t);\n\t// Support: Android<4.0\n\t// Detect silently failing push.apply\n\tarr[ preferredDoc.childNodes.length ].nodeType;\n} catch ( e ) {\n\tpush = { apply: arr.length ?\n\n\t\t// Leverage slice if possible\n\t\tfunction( target, els ) {\n\t\t\tpush_native.apply( target, slice.call(els) );\n\t\t} :\n\n\t\t// Support: IE<9\n\t\t// Otherwise append directly\n\t\tfunction( target, els ) {\n\t\t\tvar j = target.length,\n\t\t\t\ti = 0;\n\t\t\t// Can't trust NodeList.length\n\t\t\twhile ( (target[j++] = els[i++]) ) {}\n\t\t\ttarget.length = j - 1;\n\t\t}\n\t};\n}\n\nfunction Sizzle( selector, context, results, seed ) {\n\tvar m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\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\n\t// All others\n\treturn select( selector.replace( rtrim, \"$1\" ), context, results, seed );\n}\n\n/**\n * Create key-value caches of limited size\n * @returns {function(string, object)} Returns the Object data after storing it on itself with\n *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n *\tdeleting the oldest entry\n */\nfunction createCache() {\n\tvar keys = [];\n\n\tfunction cache( key, value ) {\n\t\t// Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n\t\tif ( keys.push( key + \" \" ) > Expr.cacheLength ) {\n\t\t\t// Only keep the most recent entries\n\t\t\tdelete cache[ keys.shift() ];\n\t\t}\n\t\treturn (cache[ key + \" \" ] = value);\n\t}\n\treturn cache;\n}\n\n/**\n * Mark a function for special use by Sizzle\n * @param {Function} fn The function to mark\n */\nfunction markFunction( fn ) {\n\tfn[ expando ] = true;\n\treturn fn;\n}\n\n/**\n * Support testing using an element\n * @param {Function} fn Passed the created div and expects a boolean result\n */\nfunction assert( fn ) {\n\tvar div = document.createElement(\"div\");\n\n\ttry {\n\t\treturn !!fn( div );\n\t} catch (e) {\n\t\treturn false;\n\t} finally {\n\t\t// Remove from its parent by default\n\t\tif ( div.parentNode ) {\n\t\t\tdiv.parentNode.removeChild( div );\n\t\t}\n\t\t// release memory in IE\n\t\tdiv = null;\n\t}\n}\n\n/**\n * Adds the same handler for all of the specified attrs\n * @param {String} attrs Pipe-separated list of attributes\n * @param {Function} handler The method that will be applied\n */\nfunction addHandle( attrs, handler ) {\n\tvar arr = attrs.split(\"|\"),\n\t\ti = arr.length;\n\n\twhile ( i-- ) {\n\t\tExpr.attrHandle[ arr[i] ] = handler;\n\t}\n}\n\n/**\n * Checks document order of two siblings\n * @param {Element} a\n * @param {Element} b\n * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n */\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && a.nodeType === 1 && b.nodeType === 1 &&\n\t\t\t( ~b.sourceIndex || MAX_NEGATIVE ) -\n\t\t\t( ~a.sourceIndex || MAX_NEGATIVE );\n\n\t// Use IE sourceIndex if available on both nodes\n\tif ( diff ) {\n\t\treturn diff;\n\t}\n\n\t// Check if b follows a\n\tif ( cur ) {\n\t\twhile ( (cur = cur.nextSibling) ) {\n\t\t\tif ( cur === b ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn a ? 1 : -1;\n}\n\n/**\n * Returns a function to use in pseudos for input types\n * @param {String} type\n */\nfunction createInputPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn name === \"input\" && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for buttons\n * @param {String} type\n */\nfunction createButtonPseudo( type ) {\n\treturn function( elem ) {\n\t\tvar name = elem.nodeName.toLowerCase();\n\t\treturn (name === \"input\" || name === \"button\") && elem.type === type;\n\t};\n}\n\n/**\n * Returns a function to use in pseudos for positionals\n * @param {Function} fn\n */\nfunction createPositionalPseudo( fn ) {\n\treturn markFunction(function( argument ) {\n\t\targument = +argument;\n\t\treturn markFunction(function( seed, matches ) {\n\t\t\tvar j,\n\t\t\t\tmatchIndexes = fn( [], seed.length, argument ),\n\t\t\t\ti = matchIndexes.length;\n\n\t\t\t// Match elements found at the specified indexes\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( seed[ (j = matchIndexes[i]) ] ) {\n\t\t\t\t\tseed[j] = !(matches[j] = seed[j]);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n/**\n * Checks a node for validity as a Sizzle context\n * @param {Element|Object=} context\n * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n */\nfunction testContext( context ) {\n\treturn context && typeof context.getElementsByTagName !== \"undefined\" && context;\n}\n\n// Expose support vars for convenience\nsupport = Sizzle.support = {};\n\n/**\n * Detects XML nodes\n * @param {Element|Object} elem An element or a document\n * @returns {Boolean} True iff elem is a non-HTML XML node\n */\nisXML = Sizzle.isXML = function( elem ) {\n\t// documentElement is verified for cases where it doesn't yet exist\n\t// (such as loading iframes in IE - #4833)\n\tvar documentElement = elem && (elem.ownerDocument || elem).documentElement;\n\treturn documentElement ? documentElement.nodeName !== \"HTML\" : false;\n};\n\n/**\n * Sets document-related variables once based on the current document\n * @param {Element|Object} [doc] An element or document object to use to set the document\n * @returns {Object} Returns the current document\n */\nsetDocument = Sizzle.setDocument = function( node ) {\n\tvar hasCompare, parent,\n\t\tdoc = node ? node.ownerDocument || node : preferredDoc;\n\n\t// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\n\n\t/* Attributes\n\t---------------------------------------------------------------------- */\n\n\t// Support: IE<8\n\t// Verify that getAttribute really returns attributes and not properties\n\t// (excepting IE8 booleans)\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.className = \"i\";\n\t\treturn !div.getAttribute(\"className\");\n\t});\n\n\t/* getElement(s)By*\n\t---------------------------------------------------------------------- */\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.getElementsByTagName = assert(function( div ) {\n\t\tdiv.appendChild( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.getElementsByClassName );\n\n\t// Support: IE<10\n\t// Check if getElementById returns elements by name\n\t// The broken getElementById methods don't pick up programatically-set names,\n\t// so use a roundabout getElementsByName test\n\tsupport.getById = assert(function( div ) {\n\t\tdocElem.appendChild( div ).id = expando;\n\t\treturn !document.getElementsByName || !document.getElementsByName( expando ).length;\n\t});\n\n\t// ID find and filter\n\tif ( support.getById ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== \"undefined\" && documentIsHTML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\t\t\t\treturn m ? [ m ] : [];\n\t\t\t}\n\t\t};\n\t\tExpr.filter[\"ID\"] = function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"id\") === attrId;\n\t\t\t};\n\t\t};\n\t} else {\n\t\t// Support: IE6/7\n\t\t// getElementById is not reliable as a find shortcut\n\t\tdelete Expr.find[\"ID\"];\n\n\t\tExpr.filter[\"ID\"] =  function( id ) {\n\t\t\tvar attrId = id.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\tvar node = typeof elem.getAttributeNode !== \"undefined\" &&\n\t\t\t\t\telem.getAttributeNode(\"id\");\n\t\t\t\treturn node && node.value === attrId;\n\t\t\t};\n\t\t};\n\t}\n\n\t// Tag\n\tExpr.find[\"TAG\"] = support.getElementsByTagName ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== \"undefined\" ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\n\t\t\t// DocumentFragment nodes don't have gEBTN\n\t\t\t} else if ( support.qsa ) {\n\t\t\t\treturn context.querySelectorAll( tag );\n\t\t\t}\n\t\t} :\n\n\t\tfunction( tag, context ) {\n\t\t\tvar elem,\n\t\t\t\ttmp = [],\n\t\t\t\ti = 0,\n\t\t\t\t// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n\t\t\t\tresults = context.getElementsByTagName( tag );\n\n\t\t\t// Filter out possible comments\n\t\t\tif ( tag === \"*\" ) {\n\t\t\t\twhile ( (elem = results[i++]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\ttmp.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn tmp;\n\t\t\t}\n\t\t\treturn results;\n\t\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getElementsByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\n\t};\n\n\t/* QSA/matchesSelector\n\t---------------------------------------------------------------------- */\n\n\t// QSA and matchesSelector support\n\n\t// matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\trbuggyMatches = [];\n\n\t// qSa(:focus) reports false when true (Chrome 21)\n\t// We allow this because of a bug in IE8/9 that throws an error\n\t// whenever `document.activeElement` is accessed on an iframe\n\t// So, we allow :focus to pass through QSA all the time to avoid the IE error\n\t// See http://bugs.jquery.com/ticket/13378\n\trbuggyQSA = [];\n\n\tif ( (support.qsa = rnative.test( document.querySelectorAll )) ) {\n\t\t// Build QSA regex\n\t\t// Regex strategy adopted from Diego Perini\n\t\tassert(function( div ) {\n\t\t\t// Select is set to empty string on purpose\n\t\t\t// This is to test IE's treatment of not explicitly\n\t\t\t// setting a boolean content attribute,\n\t\t\t// since its presence should be enough\n\t\t\t// http://bugs.jquery.com/ticket/12359\n\t\t\tdocElem.appendChild( div ).innerHTML = \"<a id='\" + expando + \"'></a>\" +\n\t\t\t\t\"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" +\n\t\t\t\t\"<option selected=''></option></select>\";\n\n\t\t\t// Support: IE8, Opera 11-12.16\n\t\t\t// Nothing should be selected when empty strings follow ^= or $= or *=\n\t\t\t// The test attribute must be unknown in Opera but \"safe\" for WinRT\n\t\t\t// http://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\t\t\tif ( div.querySelectorAll(\"[msallowcapture^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\" );\n\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t// Boolean attributes and \"value\" are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\" );\n\t\t\t}\n\n\t\t\t// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\t\t\tif ( !div.querySelectorAll( \"[id~=\" + expando + \"-]\" ).length ) {\n\t\t\t\trbuggyQSA.push(\"~=\");\n\t\t\t}\n\n\t\t\t// Webkit/Opera - :checked should return selected option elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":checked\").length ) {\n\t\t\t\trbuggyQSA.push(\":checked\");\n\t\t\t}\n\n\t\t\t// Support: Safari 8+, iOS 8+\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=136851\n\t\t\t// In-page `selector#id sibing-combinator selector` fails\n\t\t\tif ( !div.querySelectorAll( \"a#\" + expando + \"+*\" ).length ) {\n\t\t\t\trbuggyQSA.push(\".#.+[+~]\");\n\t\t\t}\n\t\t});\n\n\t\tassert(function( div ) {\n\t\t\t// Support: Windows 8 Native Apps\n\t\t\t// The type and name attributes are restricted during .innerHTML assignment\n\t\t\tvar input = document.createElement(\"input\");\n\t\t\tinput.setAttribute( \"type\", \"hidden\" );\n\t\t\tdiv.appendChild( input ).setAttribute( \"name\", \"D\" );\n\n\t\t\t// Support: IE8\n\t\t\t// Enforce case-sensitivity of name attribute\n\t\t\tif ( div.querySelectorAll(\"[name=d]\").length ) {\n\t\t\t\trbuggyQSA.push( \"name\" + whitespace + \"*[*^$|!~]?=\" );\n\t\t\t}\n\n\t\t\t// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n\t\t\t// IE8 throws error here and will not see later tests\n\t\t\tif ( !div.querySelectorAll(\":enabled\").length ) {\n\t\t\t\trbuggyQSA.push( \":enabled\", \":disabled\" );\n\t\t\t}\n\n\t\t\t// Opera 10-11 does not throw on post-comma invalid pseudos\n\t\t\tdiv.querySelectorAll(\"*,:x\");\n\t\t\trbuggyQSA.push(\",.*:\");\n\t\t});\n\t}\n\n\tif ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||\n\t\tdocElem.webkitMatchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.oMatchesSelector ||\n\t\tdocElem.msMatchesSelector) )) ) {\n\n\t\tassert(function( div ) {\n\t\t\t// Check to see if it's possible to do matchesSelector\n\t\t\t// on a disconnected node (IE 9)\n\t\t\tsupport.disconnectedMatch = matches.call( div, \"div\" );\n\n\t\t\t// This should fail with an exception\n\t\t\t// Gecko does not error, returns false instead\n\t\t\tmatches.call( div, \"[s!='']:x\" );\n\t\t\trbuggyMatches.push( \"!=\", pseudos );\n\t\t});\n\t}\n\n\trbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join(\"|\") );\n\n\t/* Contains\n\t---------------------------------------------------------------------- */\n\thasCompare = rnative.test( docElem.compareDocumentPosition );\n\n\t// Element contains another\n\t// Purposefully self-exclusive\n\t// As in, an element does not contain itself\n\tcontains = hasCompare || rnative.test( docElem.contains ) ?\n\t\tfunction( a, b ) {\n\t\t\tvar adown = a.nodeType === 9 ? a.documentElement : a,\n\t\t\t\tbup = b && b.parentNode;\n\t\t\treturn a === bup || !!( bup && bup.nodeType === 1 && (\n\t\t\t\tadown.contains ?\n\t\t\t\t\tadown.contains( bup ) :\n\t\t\t\t\ta.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16\n\t\t\t));\n\t\t} :\n\t\tfunction( a, b ) {\n\t\t\tif ( b ) {\n\t\t\t\twhile ( (b = b.parentNode) ) {\n\t\t\t\t\tif ( b === a ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t};\n\n\t/* Sorting\n\t---------------------------------------------------------------------- */\n\n\t// Document order sorting\n\tsortOrder = hasCompare ?\n\tfunction( a, b ) {\n\n\t\t// Flag for duplicate removal\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\t// Sort on method existence if only one input has compareDocumentPosition\n\t\tvar compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\t\tif ( compare ) {\n\t\t\treturn compare;\n\t\t}\n\n\t\t// Calculate position if both inputs belong to the same document\n\t\tcompare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?\n\t\t\ta.compareDocumentPosition( b ) :\n\n\t\t\t// Otherwise we know they are disconnected\n\t\t\t1;\n\n\t\t// Disconnected nodes\n\t\tif ( compare & 1 ||\n\t\t\t(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {\n\n\t\t\t// Choose the first element that is related to our preferred document\n\t\t\tif ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {\n\t\t\t\treturn 1;\n\t\t\t}\n\n\t\t\t// Maintain original order\n\t\t\treturn sortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\t\t}\n\n\t\treturn compare & 4 ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\n\t\t// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\taup = a.parentNode,\n\t\t\tbup = b.parentNode,\n\t\t\tap = [ a ],\n\t\t\tbp = [ b ];\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\tif ( !aup || !bup ) {\n\t\t\treturn a === document ? -1 :\n\t\t\t\tb === document ? 1 :\n\t\t\t\taup ? -1 :\n\t\t\t\tbup ? 1 :\n\t\t\t\tsortInput ?\n\t\t\t\t( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :\n\t\t\t\t0;\n\n\t\t// If the nodes are siblings, we can do a quick check\n\t\t} else if ( aup === bup ) {\n\t\t\treturn siblingCheck( a, b );\n\t\t}\n\n\t\t// Otherwise we need full lists of their ancestors for comparison\n\t\tcur = a;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tap.unshift( cur );\n\t\t}\n\t\tcur = b;\n\t\twhile ( (cur = cur.parentNode) ) {\n\t\t\tbp.unshift( cur );\n\t\t}\n\n\t\t// Walk down the tree looking for a discrepancy\n\t\twhile ( ap[i] === bp[i] ) {\n\t\t\ti++;\n\t\t}\n\n\t\treturn i ?\n\t\t\t// Do a sibling check if the nodes have a common ancestor\n\t\t\tsiblingCheck( ap[i], bp[i] ) :\n\n\t\t\t// Otherwise nodes in our document sort first\n\t\t\tap[i] === preferredDoc ? -1 :\n\t\t\tbp[i] === preferredDoc ? 1 :\n\t\t\t0;\n\t};\n\n\treturn document;\n};\n\nSizzle.matches = function( expr, elements ) {\n\treturn Sizzle( expr, null, null, elements );\n};\n\nSizzle.matchesSelector = function( elem, expr ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\t// Make sure that attribute selectors are quoted\n\texpr = expr.replace( rattributeQuotes, \"='$1']\" );\n\n\tif ( support.matchesSelector && documentIsHTML &&\n\t\t!compilerCache[ expr + \" \" ] &&\n\t\t( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&\n\t\t( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {\n\n\t\ttry {\n\t\t\tvar ret = matches.call( elem, expr );\n\n\t\t\t// IE 9's matchesSelector returns false on disconnected nodes\n\t\t\tif ( ret || support.disconnectedMatch ||\n\t\t\t\t\t// As well, disconnected nodes are said to be in a document\n\t\t\t\t\t// fragment in IE 9\n\t\t\t\t\telem.document && elem.document.nodeType !== 11 ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\t\t} catch (e) {}\n\t}\n\n\treturn Sizzle( expr, document, null, [ elem ] ).length > 0;\n};\n\nSizzle.contains = function( context, elem ) {\n\t// Set document vars if needed\n\tif ( ( context.ownerDocument || context ) !== document ) {\n\t\tsetDocument( context );\n\t}\n\treturn contains( context, elem );\n};\n\nSizzle.attr = function( elem, name ) {\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tvar fn = Expr.attrHandle[ name.toLowerCase() ],\n\t\t// Don't get fooled by Object.prototype properties (jQuery #13807)\n\t\tval = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?\n\t\t\tfn( elem, name, !documentIsHTML ) :\n\t\t\tundefined;\n\n\treturn val !== undefined ?\n\t\tval :\n\t\tsupport.attributes || !documentIsHTML ?\n\t\t\telem.getAttribute( name ) :\n\t\t\t(val = elem.getAttributeNode(name)) && val.specified ?\n\t\t\t\tval.value :\n\t\t\t\tnull;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n/**\n * Document sorting and removing duplicates\n * @param {ArrayLike} results\n */\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\tj = 0,\n\t\ti = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tsortInput = !support.sortStable && results.slice( 0 );\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\twhile ( (elem = results[i++]) ) {\n\t\t\tif ( elem === results[ i ] ) {\n\t\t\t\tj = duplicates.push( i );\n\t\t\t}\n\t\t}\n\t\twhile ( j-- ) {\n\t\t\tresults.splice( duplicates[ j ], 1 );\n\t\t}\n\t}\n\n\t// Clear input after sorting to release objects\n\t// See https://github.com/jquery/sizzle/pull/225\n\tsortInput = null;\n\n\treturn results;\n};\n\n/**\n * Utility function for retrieving the text value of an array of DOM nodes\n * @param {Array|Element} elem\n */\ngetText = Sizzle.getText = function( elem ) {\n\tvar node,\n\t\tret = \"\",\n\t\ti = 0,\n\t\tnodeType = elem.nodeType;\n\n\tif ( !nodeType ) {\n\t\t// If no nodeType, this is expected to be an array\n\t\twhile ( (node = elem[i++]) ) {\n\t\t\t// Do not traverse comment nodes\n\t\t\tret += getText( node );\n\t\t}\n\t} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {\n\t\t// Use textContent for elements\n\t\t// innerText usage removed for consistency of new lines (jQuery #11153)\n\t\tif ( typeof elem.textContent === \"string\" ) {\n\t\t\treturn elem.textContent;\n\t\t} else {\n\t\t\t// Traverse its children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tret += getText( elem );\n\t\t\t}\n\t\t}\n\t} else if ( nodeType === 3 || nodeType === 4 ) {\n\t\treturn elem.nodeValue;\n\t}\n\t// Do not include comment or processing instruction nodes\n\n\treturn ret;\n};\n\nExpr = Sizzle.selectors = {\n\n\t// Can be adjusted by the user\n\tcacheLength: 50,\n\n\tcreatePseudo: markFunction,\n\n\tmatch: matchExpr,\n\n\tattrHandle: {},\n\n\tfind: {},\n\n\trelative: {\n\t\t\">\": { dir: \"parentNode\", first: true },\n\t\t\" \": { dir: \"parentNode\" },\n\t\t\"+\": { dir: \"previousSibling\", first: true },\n\t\t\"~\": { dir: \"previousSibling\" }\n\t},\n\n\tpreFilter: {\n\t\t\"ATTR\": function( match ) {\n\t\t\tmatch[1] = match[1].replace( runescape, funescape );\n\n\t\t\t// Move the given value to match[3] whether quoted or unquoted\n\t\t\tmatch[3] = ( match[3] || match[4] || match[5] || \"\" ).replace( runescape, funescape );\n\n\t\t\tif ( match[2] === \"~=\" ) {\n\t\t\t\tmatch[3] = \" \" + match[3] + \" \";\n\t\t\t}\n\n\t\t\treturn match.slice( 0, 4 );\n\t\t},\n\n\t\t\"CHILD\": function( match ) {\n\t\t\t/* matches from matchExpr[\"CHILD\"]\n\t\t\t\t1 type (only|nth|...)\n\t\t\t\t2 what (child|of-type)\n\t\t\t\t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n\t\t\t\t4 xn-component of xn+y argument ([+-]?\\d*n|)\n\t\t\t\t5 sign of xn-component\n\t\t\t\t6 x of xn-component\n\t\t\t\t7 sign of y-component\n\t\t\t\t8 y of y-component\n\t\t\t*/\n\t\t\tmatch[1] = match[1].toLowerCase();\n\n\t\t\tif ( match[1].slice( 0, 3 ) === \"nth\" ) {\n\t\t\t\t// nth-* requires argument\n\t\t\t\tif ( !match[3] ) {\n\t\t\t\t\tSizzle.error( match[0] );\n\t\t\t\t}\n\n\t\t\t\t// numeric x and y parameters for Expr.filter.CHILD\n\t\t\t\t// remember that false/true cast respectively to 0/1\n\t\t\t\tmatch[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === \"even\" || match[3] === \"odd\" ) );\n\t\t\t\tmatch[5] = +( ( match[7] + match[8] ) || match[3] === \"odd\" );\n\n\t\t\t// other types prohibit arguments\n\t\t\t} else if ( match[3] ) {\n\t\t\t\tSizzle.error( match[0] );\n\t\t\t}\n\n\t\t\treturn match;\n\t\t},\n\n\t\t\"PSEUDO\": function( match ) {\n\t\t\tvar excess,\n\t\t\t\tunquoted = !match[6] && match[2];\n\n\t\t\tif ( matchExpr[\"CHILD\"].test( match[0] ) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\n\t\t\t// Accept quoted arguments as-is\n\t\t\tif ( match[3] ) {\n\t\t\t\tmatch[2] = match[4] || match[5] || \"\";\n\n\t\t\t// Strip excess characters from unquoted arguments\n\t\t\t} else if ( unquoted && rpseudo.test( unquoted ) &&\n\t\t\t\t// Get excess from tokenize (recursively)\n\t\t\t\t(excess = tokenize( unquoted, true )) &&\n\t\t\t\t// advance to the next closing parenthesis\n\t\t\t\t(excess = unquoted.indexOf( \")\", unquoted.length - excess ) - unquoted.length) ) {\n\n\t\t\t\t// excess is a negative index\n\t\t\t\tmatch[0] = match[0].slice( 0, excess );\n\t\t\t\tmatch[2] = unquoted.slice( 0, excess );\n\t\t\t}\n\n\t\t\t// Return only captures needed by the pseudo filter method (type and argument)\n\t\t\treturn match.slice( 0, 3 );\n\t\t}\n\t},\n\n\tfilter: {\n\n\t\t\"TAG\": function( nodeNameSelector ) {\n\t\t\tvar nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn nodeNameSelector === \"*\" ?\n\t\t\t\tfunction() { return true; } :\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\t\t\t\t};\n\t\t},\n\n\t\t\"CLASS\": function( className ) {\n\t\t\tvar pattern = classCache[ className + \" \" ];\n\n\t\t\treturn pattern ||\n\t\t\t\t(pattern = new RegExp( \"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\" )) &&\n\t\t\t\tclassCache( className, function( elem ) {\n\t\t\t\t\treturn pattern.test( typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\" );\n\t\t\t\t});\n\t\t},\n\n\t\t\"ATTR\": function( name, operator, check ) {\n\t\t\treturn function( elem ) {\n\t\t\t\tvar result = Sizzle.attr( elem, name );\n\n\t\t\t\tif ( result == null ) {\n\t\t\t\t\treturn operator === \"!=\";\n\t\t\t\t}\n\t\t\t\tif ( !operator ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\n\t\t\t\tresult += \"\";\n\n\t\t\t\treturn operator === \"=\" ? result === check :\n\t\t\t\t\toperator === \"!=\" ? result !== check :\n\t\t\t\t\toperator === \"^=\" ? check && result.indexOf( check ) === 0 :\n\t\t\t\t\toperator === \"*=\" ? check && result.indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"$=\" ? check && result.slice( -check.length ) === check :\n\t\t\t\t\toperator === \"~=\" ? ( \" \" + result.replace( rwhitespace, \" \" ) + \" \" ).indexOf( check ) > -1 :\n\t\t\t\t\toperator === \"|=\" ? result === check || result.slice( 0, check.length + 1 ) === check + \"-\" :\n\t\t\t\t\tfalse;\n\t\t\t};\n\t\t},\n\n\t\t\"CHILD\": function( type, what, argument, first, last ) {\n\t\t\tvar simple = type.slice( 0, 3 ) !== \"nth\",\n\t\t\t\tforward = type.slice( -4 ) !== \"last\",\n\t\t\t\tofType = what === \"of-type\";\n\n\t\t\treturn first === 1 && last === 0 ?\n\n\t\t\t\t// Shortcut for :nth-*(n)\n\t\t\t\tfunction( elem ) {\n\t\t\t\t\treturn !!elem.parentNode;\n\t\t\t\t} :\n\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tvar cache, uniqueCache, outerCache, node, nodeIndex, start,\n\t\t\t\t\t\tdir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n\t\t\t\t\t\tparent = elem.parentNode,\n\t\t\t\t\t\tname = ofType && elem.nodeName.toLowerCase(),\n\t\t\t\t\t\tuseCache = !xml && !ofType,\n\t\t\t\t\t\tdiff = false;\n\n\t\t\t\t\tif ( parent ) {\n\n\t\t\t\t\t\t// :(first|last|only)-(child|of-type)\n\t\t\t\t\t\tif ( simple ) {\n\t\t\t\t\t\t\twhile ( dir ) {\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\twhile ( (node = node[ dir ]) ) {\n\t\t\t\t\t\t\t\t\tif ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\n\t\t\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t// Reverse direction for :only-* (if we haven't yet done so)\n\t\t\t\t\t\t\t\tstart = dir = type === \"only\" && !start && \"nextSibling\";\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstart = [ forward ? parent.firstChild : parent.lastChild ];\n\n\t\t\t\t\t\t// non-xml :nth-child(...) stores cache data on `parent`\n\t\t\t\t\t\tif ( forward && useCache ) {\n\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && cache[ 2 ];\n\t\t\t\t\t\t\tnode = nodeIndex && parent.childNodes[ nodeIndex ];\n\n\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\n\t\t\t\t\t\t\t\t// Fallback to seeking `elem` from the start\n\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t// When found, cache indexes on `parent` and break\n\t\t\t\t\t\t\t\tif ( node.nodeType === 1 && ++diff && node === elem ) {\n\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, nodeIndex, diff ];\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\t\t\t\t\t\t\t// Use the same loop as above to seek `elem` from the start\n\t\t\t\t\t\t\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\t\t\t\t\t\t\t\t\t// Cache the index of each encountered element\n\t\t\t\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Incorporate the offset, then check against cycle size\n\t\t\t\t\t\tdiff -= last;\n\t\t\t\t\t\treturn diff === first || ( diff % first === 0 && diff / first >= 0 );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t},\n\n\t\t\"PSEUDO\": function( pseudo, argument ) {\n\t\t\t// pseudo-class names are case-insensitive\n\t\t\t// http://www.w3.org/TR/selectors/#pseudo-classes\n\t\t\t// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n\t\t\t// Remember that setFilters inherits from pseudos\n\t\t\tvar args,\n\t\t\t\tfn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||\n\t\t\t\t\tSizzle.error( \"unsupported pseudo: \" + pseudo );\n\n\t\t\t// The user may use createPseudo to indicate that\n\t\t\t// arguments are needed to create the filter function\n\t\t\t// just as Sizzle does\n\t\t\tif ( fn[ expando ] ) {\n\t\t\t\treturn fn( argument );\n\t\t\t}\n\n\t\t\t// But maintain support for old signatures\n\t\t\tif ( fn.length > 1 ) {\n\t\t\t\targs = [ pseudo, pseudo, \"\", argument ];\n\t\t\t\treturn Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?\n\t\t\t\t\tmarkFunction(function( seed, matches ) {\n\t\t\t\t\t\tvar idx,\n\t\t\t\t\t\t\tmatched = fn( seed, argument ),\n\t\t\t\t\t\t\ti = matched.length;\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tidx = indexOf( seed, matched[i] );\n\t\t\t\t\t\t\tseed[ idx ] = !( matches[ idx ] = matched[i] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}) :\n\t\t\t\t\tfunction( elem ) {\n\t\t\t\t\t\treturn fn( elem, 0, args );\n\t\t\t\t\t};\n\t\t\t}\n\n\t\t\treturn fn;\n\t\t}\n\t},\n\n\tpseudos: {\n\t\t// Potentially complex pseudos\n\t\t\"not\": markFunction(function( selector ) {\n\t\t\t// Trim the selector passed to compile\n\t\t\t// to avoid treating leading and trailing\n\t\t\t// spaces as combinators\n\t\t\tvar input = [],\n\t\t\t\tresults = [],\n\t\t\t\tmatcher = compile( selector.replace( rtrim, \"$1\" ) );\n\n\t\t\treturn matcher[ expando ] ?\n\t\t\t\tmarkFunction(function( seed, matches, context, xml ) {\n\t\t\t\t\tvar elem,\n\t\t\t\t\t\tunmatched = matcher( seed, null, xml, [] ),\n\t\t\t\t\t\ti = seed.length;\n\n\t\t\t\t\t// Match elements unmatched by `matcher`\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = unmatched[i]) ) {\n\t\t\t\t\t\t\tseed[i] = !(matches[i] = elem);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}) :\n\t\t\t\tfunction( elem, context, xml ) {\n\t\t\t\t\tinput[0] = elem;\n\t\t\t\t\tmatcher( input, null, xml, results );\n\t\t\t\t\t// Don't keep the element (issue #299)\n\t\t\t\t\tinput[0] = null;\n\t\t\t\t\treturn !results.pop();\n\t\t\t\t};\n\t\t}),\n\n\t\t\"has\": markFunction(function( selector ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn Sizzle( selector, elem ).length > 0;\n\t\t\t};\n\t\t}),\n\n\t\t\"contains\": markFunction(function( text ) {\n\t\t\ttext = text.replace( runescape, funescape );\n\t\t\treturn function( elem ) {\n\t\t\t\treturn ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;\n\t\t\t};\n\t\t}),\n\n\t\t// \"Whether an element is represented by a :lang() selector\n\t\t// is based solely on the element's language value\n\t\t// being equal to the identifier C,\n\t\t// or beginning with the identifier C immediately followed by \"-\".\n\t\t// The matching of C against the element's language value is performed case-insensitively.\n\t\t// The identifier C does not have to be a valid language name.\"\n\t\t// http://www.w3.org/TR/selectors/#lang-pseudo\n\t\t\"lang\": markFunction( function( lang ) {\n\t\t\t// lang value must be a valid identifier\n\t\t\tif ( !ridentifier.test(lang || \"\") ) {\n\t\t\t\tSizzle.error( \"unsupported lang: \" + lang );\n\t\t\t}\n\t\t\tlang = lang.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\tvar elemLang;\n\t\t\t\tdo {\n\t\t\t\t\tif ( (elemLang = documentIsHTML ?\n\t\t\t\t\t\telem.lang :\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) ) {\n\n\t\t\t\t\t\telemLang = elemLang.toLowerCase();\n\t\t\t\t\t\treturn elemLang === lang || elemLang.indexOf( lang + \"-\" ) === 0;\n\t\t\t\t\t}\n\t\t\t\t} while ( (elem = elem.parentNode) && elem.nodeType === 1 );\n\t\t\t\treturn false;\n\t\t\t};\n\t\t}),\n\n\t\t// Miscellaneous\n\t\t\"target\": function( elem ) {\n\t\t\tvar hash = window.location && window.location.hash;\n\t\t\treturn hash && hash.slice( 1 ) === elem.id;\n\t\t},\n\n\t\t\"root\": function( elem ) {\n\t\t\treturn elem === docElem;\n\t\t},\n\n\t\t\"focus\": function( elem ) {\n\t\t\treturn elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n\t\t},\n\n\t\t// Boolean properties\n\t\t\"enabled\": function( elem ) {\n\t\t\treturn elem.disabled === false;\n\t\t},\n\n\t\t\"disabled\": function( elem ) {\n\t\t\treturn elem.disabled === true;\n\t\t},\n\n\t\t\"checked\": function( elem ) {\n\t\t\t// In CSS3, :checked should return both checked and selected elements\n\t\t\t// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n\t\t\tvar nodeName = elem.nodeName.toLowerCase();\n\t\t\treturn (nodeName === \"input\" && !!elem.checked) || (nodeName === \"option\" && !!elem.selected);\n\t\t},\n\n\t\t\"selected\": function( elem ) {\n\t\t\t// Accessing this property makes selected-by-default\n\t\t\t// options in Safari work properly\n\t\t\tif ( elem.parentNode ) {\n\t\t\t\telem.parentNode.selectedIndex;\n\t\t\t}\n\n\t\t\treturn elem.selected === true;\n\t\t},\n\n\t\t// Contents\n\t\t\"empty\": function( elem ) {\n\t\t\t// http://www.w3.org/TR/selectors/#empty-pseudo\n\t\t\t// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n\t\t\t//   but not by others (comment: 8; processing instruction: 7; etc.)\n\t\t\t// nodeType < 6 works because attributes (2) do not appear as children\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeType < 6 ) {\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\n\t\t\"parent\": function( elem ) {\n\t\t\treturn !Expr.pseudos[\"empty\"]( elem );\n\t\t},\n\n\t\t// Element/input types\n\t\t\"header\": function( elem ) {\n\t\t\treturn rheader.test( elem.nodeName );\n\t\t},\n\n\t\t\"input\": function( elem ) {\n\t\t\treturn rinputs.test( elem.nodeName );\n\t\t},\n\n\t\t\"button\": function( elem ) {\n\t\t\tvar name = elem.nodeName.toLowerCase();\n\t\t\treturn name === \"input\" && elem.type === \"button\" || name === \"button\";\n\t\t},\n\n\t\t\"text\": function( elem ) {\n\t\t\tvar attr;\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\n\t\t\t\t// Support: IE<8\n\t\t\t\t// New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\" );\n\t\t},\n\n\t\t// Position-in-collection\n\t\t\"first\": createPositionalPseudo(function() {\n\t\t\treturn [ 0 ];\n\t\t}),\n\n\t\t\"last\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\treturn [ length - 1 ];\n\t\t}),\n\n\t\t\"eq\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\treturn [ argument < 0 ? argument + length : argument ];\n\t\t}),\n\n\t\t\"even\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 0;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"odd\": createPositionalPseudo(function( matchIndexes, length ) {\n\t\t\tvar i = 1;\n\t\t\tfor ( ; i < length; i += 2 ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"lt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; --i >= 0; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t}),\n\n\t\t\"gt\": createPositionalPseudo(function( matchIndexes, length, argument ) {\n\t\t\tvar i = argument < 0 ? argument + length : argument;\n\t\t\tfor ( ; ++i < length; ) {\n\t\t\t\tmatchIndexes.push( i );\n\t\t\t}\n\t\t\treturn matchIndexes;\n\t\t})\n\t}\n};\n\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Add button/input type pseudos\nfor ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {\n\tExpr.pseudos[ i ] = createInputPseudo( i );\n}\nfor ( i in { submit: true, reset: true } ) {\n\tExpr.pseudos[ i ] = createButtonPseudo( i );\n}\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nsetFilters.prototype = Expr.filters = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\ntokenize = Sizzle.tokenize = function( selector, parseOnly ) {\n\tvar matched, match, tokens, type,\n\t\tsoFar, groups, preFilters,\n\t\tcached = tokenCache[ selector + \" \" ];\n\n\tif ( cached ) {\n\t\treturn parseOnly ? 0 : cached.slice( 0 );\n\t}\n\n\tsoFar = selector;\n\tgroups = [];\n\tpreFilters = Expr.preFilter;\n\n\twhile ( soFar ) {\n\n\t\t// Comma and first run\n\t\tif ( !matched || (match = rcomma.exec( soFar )) ) {\n\t\t\tif ( match ) {\n\t\t\t\t// Don't consume trailing commas as valid\n\t\t\t\tsoFar = soFar.slice( match[0].length ) || soFar;\n\t\t\t}\n\t\t\tgroups.push( (tokens = []) );\n\t\t}\n\n\t\tmatched = false;\n\n\t\t// Combinators\n\t\tif ( (match = rcombinators.exec( soFar )) ) {\n\t\t\tmatched = match.shift();\n\t\t\ttokens.push({\n\t\t\t\tvalue: matched,\n\t\t\t\t// Cast descendant combinators to space\n\t\t\t\ttype: match[0].replace( rtrim, \" \" )\n\t\t\t});\n\t\t\tsoFar = soFar.slice( matched.length );\n\t\t}\n\n\t\t// Filters\n\t\tfor ( type in Expr.filter ) {\n\t\t\tif ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||\n\t\t\t\t(match = preFilters[ type ]( match ))) ) {\n\t\t\t\tmatched = match.shift();\n\t\t\t\ttokens.push({\n\t\t\t\t\tvalue: matched,\n\t\t\t\t\ttype: type,\n\t\t\t\t\tmatches: match\n\t\t\t\t});\n\t\t\t\tsoFar = soFar.slice( matched.length );\n\t\t\t}\n\t\t}\n\n\t\tif ( !matched ) {\n\t\t\tbreak;\n\t\t}\n\t}\n\n\t// Return the length of the invalid excess\n\t// if we're just parsing\n\t// Otherwise, throw an error or return tokens\n\treturn parseOnly ?\n\t\tsoFar.length :\n\t\tsoFar ?\n\t\t\tSizzle.error( selector ) :\n\t\t\t// Cache the tokens\n\t\t\ttokenCache( selector, groups ).slice( 0 );\n};\n\nfunction toSelector( tokens ) {\n\tvar i = 0,\n\t\tlen = tokens.length,\n\t\tselector = \"\";\n\tfor ( ; i < len; i++ ) {\n\t\tselector += tokens[i].value;\n\t}\n\treturn selector;\n}\n\nfunction addCombinator( matcher, combinator, base ) {\n\tvar dir = combinator.dir,\n\t\tcheckNonElements = base && dir === \"parentNode\",\n\t\tdoneName = done++;\n\n\treturn combinator.first ?\n\t\t// Check against closest ancestor/preceding element\n\t\tfunction( elem, context, xml ) {\n\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\treturn matcher( elem, context, xml );\n\t\t\t\t}\n\t\t\t}\n\t\t} :\n\n\t\t// Check against all ancestor/preceding elements\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar oldCache, uniqueCache, outerCache,\n\t\t\t\tnewCache = [ dirruns, doneName ];\n\n\t\t\t// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\t\t\tif ( xml ) {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\tif ( matcher( elem, context, xml ) ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\twhile ( (elem = elem[ dir ]) ) {\n\t\t\t\t\tif ( elem.nodeType === 1 || checkNonElements ) {\n\t\t\t\t\t\touterCache = elem[ expando ] || (elem[ expando ] = {});\n\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ dir ]) &&\n\t\t\t\t\t\t\toldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {\n\n\t\t\t\t\t\t\t// Assign to newCache so results back-propagate to previous elements\n\t\t\t\t\t\t\treturn (newCache[ 2 ] = oldCache[ 2 ]);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// Reuse newcache so results back-propagate to previous elements\n\t\t\t\t\t\t\tuniqueCache[ dir ] = newCache;\n\n\t\t\t\t\t\t\t// A match means we're done; a fail means we have to keep checking\n\t\t\t\t\t\t\tif ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {\n\t\t\t\t\t\t\t\treturn true;\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};\n}\n\nfunction elementMatcher( matchers ) {\n\treturn matchers.length > 1 ?\n\t\tfunction( elem, context, xml ) {\n\t\t\tvar i = matchers.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( !matchers[i]( elem, context, xml ) ) {\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\tmatchers[0];\n}\n\nfunction multipleContexts( selector, contexts, results ) {\n\tvar i = 0,\n\t\tlen = contexts.length;\n\tfor ( ; i < len; i++ ) {\n\t\tSizzle( selector, contexts[i], results );\n\t}\n\treturn results;\n}\n\nfunction condense( unmatched, map, filter, context, xml ) {\n\tvar elem,\n\t\tnewUnmatched = [],\n\t\ti = 0,\n\t\tlen = unmatched.length,\n\t\tmapped = map != null;\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (elem = unmatched[i]) ) {\n\t\t\tif ( !filter || filter( elem, context, xml ) ) {\n\t\t\t\tnewUnmatched.push( elem );\n\t\t\t\tif ( mapped ) {\n\t\t\t\t\tmap.push( i );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn newUnmatched;\n}\n\nfunction setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {\n\tif ( postFilter && !postFilter[ expando ] ) {\n\t\tpostFilter = setMatcher( postFilter );\n\t}\n\tif ( postFinder && !postFinder[ expando ] ) {\n\t\tpostFinder = setMatcher( postFinder, postSelector );\n\t}\n\treturn markFunction(function( seed, results, context, xml ) {\n\t\tvar temp, i, elem,\n\t\t\tpreMap = [],\n\t\t\tpostMap = [],\n\t\t\tpreexisting = results.length,\n\n\t\t\t// Get initial elements from seed or context\n\t\t\telems = seed || multipleContexts( selector || \"*\", context.nodeType ? [ context ] : context, [] ),\n\n\t\t\t// Prefilter to get matcher input, preserving a map for seed-results synchronization\n\t\t\tmatcherIn = preFilter && ( seed || !selector ) ?\n\t\t\t\tcondense( elems, preMap, preFilter, context, xml ) :\n\t\t\t\telems,\n\n\t\t\tmatcherOut = matcher ?\n\t\t\t\t// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n\t\t\t\tpostFinder || ( seed ? preFilter : preexisting || postFilter ) ?\n\n\t\t\t\t\t// ...intermediate processing is necessary\n\t\t\t\t\t[] :\n\n\t\t\t\t\t// ...otherwise use results directly\n\t\t\t\t\tresults :\n\t\t\t\tmatcherIn;\n\n\t\t// Find primary matches\n\t\tif ( matcher ) {\n\t\t\tmatcher( matcherIn, matcherOut, context, xml );\n\t\t}\n\n\t\t// Apply postFilter\n\t\tif ( postFilter ) {\n\t\t\ttemp = condense( matcherOut, postMap );\n\t\t\tpostFilter( temp, [], context, xml );\n\n\t\t\t// Un-match failing elements by moving them back to matcherIn\n\t\t\ti = temp.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tif ( (elem = temp[i]) ) {\n\t\t\t\t\tmatcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( seed ) {\n\t\t\tif ( postFinder || preFilter ) {\n\t\t\t\tif ( postFinder ) {\n\t\t\t\t\t// Get the final matcherOut by condensing this intermediate into postFinder contexts\n\t\t\t\t\ttemp = [];\n\t\t\t\t\ti = matcherOut.length;\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tif ( (elem = matcherOut[i]) ) {\n\t\t\t\t\t\t\t// Restore matcherIn since elem is not yet a final match\n\t\t\t\t\t\t\ttemp.push( (matcherIn[i] = elem) );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpostFinder( null, (matcherOut = []), temp, xml );\n\t\t\t\t}\n\n\t\t\t\t// Move matched elements from seed to results to keep them synchronized\n\t\t\t\ti = matcherOut.length;\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\tif ( (elem = matcherOut[i]) &&\n\t\t\t\t\t\t(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {\n\n\t\t\t\t\t\tseed[temp] = !(results[temp] = elem);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Add elements to results, through postFinder if defined\n\t\t} else {\n\t\t\tmatcherOut = condense(\n\t\t\t\tmatcherOut === results ?\n\t\t\t\t\tmatcherOut.splice( preexisting, matcherOut.length ) :\n\t\t\t\t\tmatcherOut\n\t\t\t);\n\t\t\tif ( postFinder ) {\n\t\t\t\tpostFinder( null, results, matcherOut, xml );\n\t\t\t} else {\n\t\t\t\tpush.apply( results, matcherOut );\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction matcherFromTokens( tokens ) {\n\tvar checkContext, matcher, j,\n\t\tlen = tokens.length,\n\t\tleadingRelative = Expr.relative[ tokens[0].type ],\n\t\timplicitRelative = leadingRelative || Expr.relative[\" \"],\n\t\ti = leadingRelative ? 1 : 0,\n\n\t\t// The foundational matcher ensures that elements are reachable from top-level context(s)\n\t\tmatchContext = addCombinator( function( elem ) {\n\t\t\treturn elem === checkContext;\n\t\t}, implicitRelative, true ),\n\t\tmatchAnyContext = addCombinator( function( elem ) {\n\t\t\treturn indexOf( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\tvar ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (\n\t\t\t\t(checkContext = context).nodeType ?\n\t\t\t\t\tmatchContext( elem, context, xml ) :\n\t\t\t\t\tmatchAnyContext( elem, context, xml ) );\n\t\t\t// Avoid hanging onto element (issue #299)\n\t\t\tcheckContext = null;\n\t\t\treturn ret;\n\t\t} ];\n\n\tfor ( ; i < len; i++ ) {\n\t\tif ( (matcher = Expr.relative[ tokens[i].type ]) ) {\n\t\t\tmatchers = [ addCombinator(elementMatcher( matchers ), matcher) ];\n\t\t} else {\n\t\t\tmatcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );\n\n\t\t\t// Return special upon seeing a positional matcher\n\t\t\tif ( matcher[ expando ] ) {\n\t\t\t\t// Find the next relative operator (if any) for proper handling\n\t\t\t\tj = ++i;\n\t\t\t\tfor ( ; j < len; j++ ) {\n\t\t\t\t\tif ( Expr.relative[ tokens[j].type ] ) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn setMatcher(\n\t\t\t\t\ti > 1 && elementMatcher( matchers ),\n\t\t\t\t\ti > 1 && toSelector(\n\t\t\t\t\t\t// If the preceding token was a descendant combinator, insert an implicit any-element `*`\n\t\t\t\t\t\ttokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === \" \" ? \"*\" : \"\" })\n\t\t\t\t\t).replace( rtrim, \"$1\" ),\n\t\t\t\t\tmatcher,\n\t\t\t\t\ti < j && matcherFromTokens( tokens.slice( i, j ) ),\n\t\t\t\t\tj < len && matcherFromTokens( (tokens = tokens.slice( j )) ),\n\t\t\t\t\tj < len && toSelector( tokens )\n\t\t\t\t);\n\t\t\t}\n\t\t\tmatchers.push( matcher );\n\t\t}\n\t}\n\n\treturn elementMatcher( matchers );\n}\n\nfunction matcherFromGroupMatchers( elementMatchers, setMatchers ) {\n\tvar bySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, outermost ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\tsetMatched = [],\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or outermost context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", outermost ),\n\t\t\t\t// Use integer dirruns iff this is the outermost matcher\n\t\t\t\tdirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),\n\t\t\t\tlen = elems.length;\n\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context === document || context || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\n\t\t\t// Support: IE<9, Safari\n\t\t\t// Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\t\t\tfor ( ; i !== len && (elem = elems[i]) != null; i++ ) {\n\t\t\t\tif ( byElement && elem ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, xml) ) {\n\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( outermost ) {\n\t\t\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Track unmatched elements for set filters\n\t\t\t\tif ( bySet ) {\n\t\t\t\t\t// They will have gone through all possible matchers\n\t\t\t\t\tif ( (elem = !matcher && elem) ) {\n\t\t\t\t\t\tmatchedCount--;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Lengthen the array for every element, matched or not\n\t\t\t\t\tif ( seed ) {\n\t\t\t\t\t\tunmatched.push( elem );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\n\t\t\tif ( bySet && i !== matchedCount ) {\n\t\t\t\tj = 0;\n\t\t\t\twhile ( (matcher = setMatchers[j++]) ) {\n\t\t\t\t\tmatcher( unmatched, setMatched, context, xml );\n\t\t\t\t}\n\n\t\t\t\tif ( seed ) {\n\t\t\t\t\t// Reintegrate element matches to eliminate the need for sorting\n\t\t\t\t\tif ( matchedCount > 0 ) {\n\t\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\t\tif ( !(unmatched[i] || setMatched[i]) ) {\n\t\t\t\t\t\t\t\tsetMatched[i] = pop.call( results );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Discard index placeholder values to get only actual matches\n\t\t\t\t\tsetMatched = condense( setMatched );\n\t\t\t\t}\n\n\t\t\t\t// Add matches to results\n\t\t\t\tpush.apply( results, setMatched );\n\n\t\t\t\t// Seedless set matches succeeding multiple successful matchers stipulate sorting\n\t\t\t\tif ( outermost && !seed && setMatched.length > 0 &&\n\t\t\t\t\t( matchedCount + setMatchers.length ) > 1 ) {\n\n\t\t\t\t\tSizzle.uniqueSort( results );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override manipulation of globals by nested matchers\n\t\t\tif ( outermost ) {\n\t\t\t\tdirruns = dirrunsUnique;\n\t\t\t\toutermostContext = contextBackup;\n\t\t\t}\n\n\t\t\treturn unmatched;\n\t\t};\n\n\treturn bySet ?\n\t\tmarkFunction( superMatcher ) :\n\t\tsuperMatcher;\n}\n\ncompile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {\n\tvar i,\n\t\tsetMatchers = [],\n\t\telementMatchers = [],\n\t\tcached = compilerCache[ selector + \" \" ];\n\n\tif ( !cached ) {\n\t\t// Generate a function of recursive functions that can be used to check each element\n\t\tif ( !match ) {\n\t\t\tmatch = tokenize( selector );\n\t\t}\n\t\ti = match.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( match[i] );\n\t\t\tif ( cached[ expando ] ) {\n\t\t\t\tsetMatchers.push( cached );\n\t\t\t} else {\n\t\t\t\telementMatchers.push( cached );\n\t\t\t}\n\t\t}\n\n\t\t// Cache the compiled function\n\t\tcached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );\n\n\t\t// Save selector and tokenization\n\t\tcached.selector = selector;\n\t}\n\treturn cached;\n};\n\n/**\n * A low-level selection function that works with Sizzle's compiled\n *  selector functions\n * @param {String|Function} selector A selector or a pre-compiled\n *  selector function built with Sizzle.compile\n * @param {Element} context\n * @param {Array} [results]\n * @param {Array} [seed] A set of elements to match against\n */\nselect = Sizzle.select = function( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tcompiled = typeof selector === \"function\" && selector,\n\t\tmatch = !seed && tokenize( (selector = compiled.selector || selector) );\n\n\tresults = results || [];\n\n\t// Try to minimize operations if there is only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound selector is an ID\n\t\ttokens = match[0] = match[0].slice( 0 );\n\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\tsupport.getById && context.nodeType === 9 && documentIsHTML &&\n\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\tcontext = ( Expr.find[\"ID\"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];\n\t\t\tif ( !context ) {\n\t\t\t\treturn results;\n\n\t\t\t// Precompiled matchers will still verify ancestry, so step up a level\n\t\t\t} else if ( compiled ) {\n\t\t\t\tcontext = context.parentNode;\n\t\t\t}\n\n\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t}\n\n\t\t// Fetch a seed set for right-to-left matching\n\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\twhile ( i-- ) {\n\t\t\ttoken = tokens[i];\n\n\t\t\t// Abort if we hit a combinator\n\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\tif ( (seed = find(\n\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\trsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context\n\t\t\t\t)) ) {\n\n\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\tpush.apply( results, seed );\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Compile and execute a filtering function if one is not provided\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\t( compiled || compile( selector, match ) )(\n\t\tseed,\n\t\tcontext,\n\t\t!documentIsHTML,\n\t\tresults,\n\t\t!context || rsibling.test( selector ) && testContext( context.parentNode ) || context\n\t);\n\treturn results;\n};\n\n// One-time assignments\n\n// Sort stability\nsupport.sortStable = expando.split(\"\").sort( sortOrder ).join(\"\") === expando;\n\n// Support: Chrome 14-35+\n// Always assume duplicates if they aren't passed to the comparison function\nsupport.detectDuplicates = !!hasDuplicate;\n\n// Initialize against the default document\nsetDocument();\n\n// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n// Detached nodes confoundingly follow *each other*\nsupport.sortDetached = assert(function( div1 ) {\n\t// Should return 1, but returns 4 (following)\n\treturn div1.compareDocumentPosition( document.createElement(\"div\") ) & 1;\n});\n\n// Support: IE<8\n// Prevent attribute/property \"interpolation\"\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !assert(function( div ) {\n\tdiv.innerHTML = \"<a href='#'></a>\";\n\treturn div.firstChild.getAttribute(\"href\") === \"#\" ;\n}) ) {\n\taddHandle( \"type|href|height|width\", function( elem, name, isXML ) {\n\t\tif ( !isXML ) {\n\t\t\treturn elem.getAttribute( name, name.toLowerCase() === \"type\" ? 1 : 2 );\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use defaultValue in place of getAttribute(\"value\")\nif ( !support.attributes || !assert(function( div ) {\n\tdiv.innerHTML = \"<input/>\";\n\tdiv.firstChild.setAttribute( \"value\", \"\" );\n\treturn div.firstChild.getAttribute( \"value\" ) === \"\";\n}) ) {\n\taddHandle( \"value\", function( elem, name, isXML ) {\n\t\tif ( !isXML && elem.nodeName.toLowerCase() === \"input\" ) {\n\t\t\treturn elem.defaultValue;\n\t\t}\n\t});\n}\n\n// Support: IE<9\n// Use getAttributeNode to fetch booleans when getAttribute lies\nif ( !assert(function( div ) {\n\treturn div.getAttribute(\"disabled\") == null;\n}) ) {\n\taddHandle( booleans, function( elem, name, isXML ) {\n\t\tvar val;\n\t\tif ( !isXML ) {\n\t\t\treturn elem[ name ] === true ? name.toLowerCase() :\n\t\t\t\t\t(val = elem.getAttributeNode( name )) && val.specified ?\n\t\t\t\t\tval.value :\n\t\t\t\tnull;\n\t\t}\n\t});\n}\n\nreturn Sizzle;\n\n})( window );\n\n\n\njQuery.find = Sizzle;\njQuery.expr = Sizzle.selectors;\njQuery.expr[ \":\" ] = jQuery.expr.pseudos;\njQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\n};\n\n\nvar rneedsContext = jQuery.expr.match.needsContext;\n\nvar rsingleTag = ( /^<([\\w-]+)\\s*\\/?>(?:<\\/\\1>|)$/ );\n\n\n\nvar risSimple = /^.[^:#\\[\\.,]*$/;\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, not ) {\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep( elements, function( elem, i ) {\n\t\t\t/* jshint -W018 */\n\t\t\treturn !!qualifier.call( elem, i, elem ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( qualifier.nodeType ) {\n\t\treturn jQuery.grep( elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) !== not;\n\t\t} );\n\n\t}\n\n\tif ( typeof qualifier === \"string\" ) {\n\t\tif ( risSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter( qualifier, elements, not );\n\t\t}\n\n\t\tqualifier = jQuery.filter( qualifier, elements );\n\t}\n\n\treturn jQuery.grep( elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) > -1 ) !== not;\n\t} );\n}\n\njQuery.filter = function( expr, elems, not ) {\n\tvar elem = elems[ 0 ];\n\n\tif ( not ) {\n\t\texpr = \":not(\" + expr + \")\";\n\t}\n\n\treturn elems.length === 1 && elem.nodeType === 1 ?\n\t\tjQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :\n\t\tjQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t} ) );\n};\n\njQuery.fn.extend( {\n\tfind: function( selector ) {\n\t\tvar i,\n\t\t\tret = [],\n\t\t\tself = this,\n\t\t\tlen = self.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\treturn this.pushStack( jQuery( selector ).filter( function() {\n\t\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\t\tif ( jQuery.contains( self[ i ], this ) ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} ) );\n\t\t}\n\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, self[ i ], ret );\n\t\t}\n\n\t\t// Needed because $( selector, context ) becomes $( context ).find( selector )\n\t\tret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret );\n\t\tret.selector = this.selector ? this.selector + \" \" + selector : selector;\n\t\treturn ret;\n\t},\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], false ) );\n\t},\n\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow( this, selector || [], true ) );\n\t},\n\tis: function( selector ) {\n\t\treturn !!winnow(\n\t\t\tthis,\n\n\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\ttypeof selector === \"string\" && rneedsContext.test( selector ) ?\n\t\t\t\tjQuery( selector ) :\n\t\t\t\tselector || [],\n\t\t\tfalse\n\t\t).length;\n\t}\n} );\n\n\n// Initialize a jQuery object\n\n\n// A central reference to the root jQuery(document)\nvar rootjQuery,\n\n\t// A simple way to check for HTML strings\n\t// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n\t// Strict HTML recognition (#11290: must start with <)\n\trquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\tinit = jQuery.fn.init = function( selector, context, root ) {\n\t\tvar match, elem;\n\n\t\t// HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\t\tif ( !selector ) {\n\t\t\treturn this;\n\t\t}\n\n\t\t// init accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector.charAt( 0 ) === \"<\" &&\n\t\t\t\tselector.charAt( selector.length - 1 ) === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\n\t\t\t\t// Assume that strings that start and end with <> are HTML and skip the regex check\n\t\t\t\tmatch = [ null, selector, null ];\n\n\t\t\t} else {\n\t\t\t\tmatch = rquickExpr.exec( selector );\n\t\t\t}\n\n\t\t\t// Match html or make sure no context is specified for #id\n\t\t\tif ( match && ( match[ 1 ] || !context ) ) {\n\n\t\t\t\t// HANDLE: $(html) -> $(array)\n\t\t\t\tif ( match[ 1 ] ) {\n\t\t\t\t\tcontext = context instanceof jQuery ? context[ 0 ] : context;\n\n\t\t\t\t\t// scripts is true for back-compat\n\t\t\t\t\t// Intentionally let the error be thrown if parseHTML is not present\n\t\t\t\t\tjQuery.merge( this, jQuery.parseHTML(\n\t\t\t\t\t\tmatch[ 1 ],\n\t\t\t\t\t\tcontext && context.nodeType ? context.ownerDocument || context : document,\n\t\t\t\t\t\ttrue\n\t\t\t\t\t) );\n\n\t\t\t\t\t// HANDLE: $(html, props)\n\t\t\t\t\tif ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {\n\t\t\t\t\t\tfor ( match in context ) {\n\n\t\t\t\t\t\t\t// Properties of context are called as methods if possible\n\t\t\t\t\t\t\tif ( jQuery.isFunction( this[ match ] ) ) {\n\t\t\t\t\t\t\t\tthis[ match ]( context[ match ] );\n\n\t\t\t\t\t\t\t// ...and otherwise set as attributes\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tthis.attr( match, context[ match ] );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\treturn this;\n\n\t\t\t\t// HANDLE: $(#id)\n\t\t\t\t} else {\n\t\t\t\t\telem = document.getElementById( match[ 2 ] );\n\n\t\t\t\t\t// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[ 2 ] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we inject the element directly into the jQuery object\n\t\t\t\t\t\tthis.length = 1;\n\t\t\t\t\t\tthis[ 0 ] = elem;\n\t\t\t\t\t}\n\n\t\t\t\t\tthis.context = document;\n\t\t\t\t\tthis.selector = selector;\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\n\t\t\t// HANDLE: $(expr, $(...))\n\t\t\t} else if ( !context || context.jquery ) {\n\t\t\t\treturn ( context || root ).find( selector );\n\n\t\t\t// HANDLE: $(expr, context)\n\t\t\t// (which is just equivalent to: $(context).find(expr)\n\t\t\t} else {\n\t\t\t\treturn this.constructor( context ).find( selector );\n\t\t\t}\n\n\t\t// HANDLE: $(DOMElement)\n\t\t} else if ( selector.nodeType ) {\n\t\t\tthis.context = this[ 0 ] = selector;\n\t\t\tthis.length = 1;\n\t\t\treturn this;\n\n\t\t// HANDLE: $(function)\n\t\t// Shortcut for document ready\n\t\t} else if ( jQuery.isFunction( selector ) ) {\n\t\t\treturn typeof root.ready !== \"undefined\" ?\n\t\t\t\troot.ready( selector ) :\n\n\t\t\t\t// Execute immediately if ready is not present\n\t\t\t\tselector( jQuery );\n\t\t}\n\n\t\tif ( selector.selector !== undefined ) {\n\t\t\tthis.selector = selector.selector;\n\t\t\tthis.context = selector.context;\n\t\t}\n\n\t\treturn jQuery.makeArray( selector, this );\n\t};\n\n// Give the init function the jQuery prototype for later instantiation\ninit.prototype = jQuery.fn;\n\n// Initialize central reference\nrootjQuery = jQuery( document );\n\n\nvar rparentsprev = /^(?:parents|prev(?:Until|All))/,\n\n\t// methods guaranteed to produce a unique set when starting from a unique set\n\tguaranteedUnique = {\n\t\tchildren: true,\n\t\tcontents: true,\n\t\tnext: true,\n\t\tprev: true\n\t};\n\njQuery.fn.extend( {\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter( function() {\n\t\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\t\tif ( jQuery.contains( this, targets[ i ] ) ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\tclosest: function( selectors, context ) {\n\t\tvar cur,\n\t\t\ti = 0,\n\t\t\tl = this.length,\n\t\t\tmatched = [],\n\t\t\tpos = rneedsContext.test( selectors ) || typeof selectors !== \"string\" ?\n\t\t\t\tjQuery( selectors, context || this.context ) :\n\t\t\t\t0;\n\n\t\tfor ( ; i < l; i++ ) {\n\t\t\tfor ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {\n\n\t\t\t\t// Always skip document fragments\n\t\t\t\tif ( cur.nodeType < 11 && ( pos ?\n\t\t\t\t\tpos.index( cur ) > -1 :\n\n\t\t\t\t\t// Don't pass non-elements to Sizzle\n\t\t\t\t\tcur.nodeType === 1 &&\n\t\t\t\t\t\tjQuery.find.matchesSelector( cur, selectors ) ) ) {\n\n\t\t\t\t\tmatched.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\n\tindex: function( elem ) {\n\n\t\t// No argument, return index in parent\n\t\tif ( !elem ) {\n\t\t\treturn ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;\n\t\t}\n\n\t\t// index in selector\n\t\tif ( typeof elem === \"string\" ) {\n\t\t\treturn jQuery.inArray( this[ 0 ], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[ 0 ] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\treturn this.pushStack(\n\t\t\tjQuery.uniqueSort(\n\t\t\t\tjQuery.merge( this.get(), jQuery( selector, context ) )\n\t\t\t)\n\t\t);\n\t},\n\n\taddBack: function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t}\n} );\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\n\treturn cur;\n}\n\njQuery.each( {\n\tparent: function( elem ) {\n\t\tvar parent = elem.parentNode;\n\t\treturn parent && parent.nodeType !== 11 ? parent : null;\n\t},\n\tparents: function( elem ) {\n\t\treturn dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"parentNode\", until );\n\t},\n\tnext: function( elem ) {\n\t\treturn sibling( elem, \"nextSibling\" );\n\t},\n\tprev: function( elem ) {\n\t\treturn sibling( elem, \"previousSibling\" );\n\t},\n\tnextAll: function( elem ) {\n\t\treturn dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( elem.firstChild );\n\t},\n\tcontents: function( elem ) {\n\t\treturn jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( name.slice( -5 ) !== \"Until\" ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tif ( this.length > 1 ) {\n\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tret = jQuery.uniqueSort( ret );\n\t\t\t}\n\n\t\t\t// Reverse order for parents* and prev-derivatives\n\t\t\tif ( rparentsprev.test( name ) ) {\n\t\t\t\tret = ret.reverse();\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\nvar rnotwhite = ( /\\S+/g );\n\n\n\n// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\n\tjQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {\n\t\tobject[ flag ] = true;\n\t} );\n\treturn object;\n}\n\n/*\n * Create a callback list using the following parameters:\n *\n *\toptions: an optional list of space-separated options that will change how\n *\t\t\tthe callback list behaves or a more traditional option object\n *\n * By default a callback list will act like an event callback list and can be\n * \"fired\" multiple times.\n *\n * Possible options:\n *\n *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n *\n *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n *\t\t\t\t\tvalues (like a Deferred)\n *\n *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n *\n *\tstopOnFalse:\tinterrupt callings when a callback returns false\n *\n */\njQuery.Callbacks = function( options ) {\n\n\t// Convert options from String-formatted to Object-formatted if needed\n\t// (we check in cache first)\n\toptions = typeof options === \"string\" ?\n\t\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\n\t\t\t// Add a callback or a collection of callbacks to the list\n\t\t\tadd: function() {\n\t\t\t\tif ( list ) {\n\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\n\t\t\t\t\t( function add( args ) {\n\t\t\t\t\t\tjQuery.each( args, function( _, arg ) {\n\t\t\t\t\t\t\tif ( jQuery.isFunction( arg ) ) {\n\t\t\t\t\t\t\t\tif ( !options.unique || !self.has( arg ) ) {\n\t\t\t\t\t\t\t\t\tlist.push( arg );\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if ( arg && arg.length && jQuery.type( arg ) !== \"string\" ) {\n\n\t\t\t\t\t\t\t\t// Inspect recursively\n\t\t\t\t\t\t\t\tadd( arg );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} );\n\t\t\t\t\t} )( arguments );\n\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Check if a given callback is in the list.\n\t\t\t// If no argument is given, return whether or not list has callbacks attached.\n\t\t\thas: function( fn ) {\n\t\t\t\treturn fn ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = true;\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tself.disable();\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\n\t\t\t// Call all callbacks with the given context and arguments\n\t\t\tfireWith: function( context, args ) {\n\t\t\t\tif ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Call all the callbacks with the given arguments\n\t\t\tfire: function() {\n\t\t\t\tself.fireWith( this, arguments );\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// To know if the callbacks have already been called at least once\n\t\t\tfired: function() {\n\t\t\t\treturn !!fired;\n\t\t\t}\n\t\t};\n\n\treturn self;\n};\n\n\njQuery.extend( {\n\n\tDeferred: function( func ) {\n\t\tvar tuples = [\n\n\t\t\t\t// action, add listener, listener list, final state\n\t\t\t\t[ \"resolve\", \"done\", jQuery.Callbacks( \"once memory\" ), \"resolved\" ],\n\t\t\t\t[ \"reject\", \"fail\", jQuery.Callbacks( \"once memory\" ), \"rejected\" ],\n\t\t\t\t[ \"notify\", \"progress\", jQuery.Callbacks( \"memory\" ) ]\n\t\t\t],\n\t\t\tstate = \"pending\",\n\t\t\tpromise = {\n\t\t\t\tstate: function() {\n\t\t\t\t\treturn state;\n\t\t\t\t},\n\t\t\t\talways: function() {\n\t\t\t\t\tdeferred.done( arguments ).fail( arguments );\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\t\t\t\tthen: function( /* fnDone, fnFail, fnProgress */ ) {\n\t\t\t\t\tvar fns = arguments;\n\t\t\t\t\treturn jQuery.Deferred( function( newDefer ) {\n\t\t\t\t\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\t\t\t\t\tvar fn = jQuery.isFunction( fns[ i ] ) && fns[ i ];\n\n\t\t\t\t\t\t\t// deferred[ done | fail | progress ] for forwarding actions to newDefer\n\t\t\t\t\t\t\tdeferred[ tuple[ 1 ] ]( function() {\n\t\t\t\t\t\t\t\tvar returned = fn && fn.apply( this, arguments );\n\t\t\t\t\t\t\t\tif ( returned && jQuery.isFunction( returned.promise ) ) {\n\t\t\t\t\t\t\t\t\treturned.promise()\n\t\t\t\t\t\t\t\t\t\t.progress( newDefer.notify )\n\t\t\t\t\t\t\t\t\t\t.done( newDefer.resolve )\n\t\t\t\t\t\t\t\t\t\t.fail( newDefer.reject );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\n\t\t\t\t// Get a promise for this deferred\n\t\t\t\t// If obj is provided, the promise aspect is added to the object\n\t\t\t\tpromise: function( obj ) {\n\t\t\t\t\treturn obj != null ? jQuery.extend( obj, promise ) : promise;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdeferred = {};\n\n\t\t// Keep pipe for back-compat\n\t\tpromise.pipe = promise.then;\n\n\t\t// Add list-specific methods\n\t\tjQuery.each( tuples, function( i, tuple ) {\n\t\t\tvar list = tuple[ 2 ],\n\t\t\t\tstateString = tuple[ 3 ];\n\n\t\t\t// promise[ done | fail | progress ] = list.add\n\t\t\tpromise[ tuple[ 1 ] ] = list.add;\n\n\t\t\t// Handle state\n\t\t\tif ( stateString ) {\n\t\t\t\tlist.add( function() {\n\n\t\t\t\t\t// state = [ resolved | rejected ]\n\t\t\t\t\tstate = stateString;\n\n\t\t\t\t// [ reject_list | resolve_list ].disable; progress_list.lock\n\t\t\t\t}, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock );\n\t\t\t}\n\n\t\t\t// deferred[ resolve | reject | notify ]\n\t\t\tdeferred[ tuple[ 0 ] ] = function() {\n\t\t\t\tdeferred[ tuple[ 0 ] + \"With\" ]( this === deferred ? promise : this, arguments );\n\t\t\t\treturn this;\n\t\t\t};\n\t\t\tdeferred[ tuple[ 0 ] + \"With\" ] = list.fireWith;\n\t\t} );\n\n\t\t// Make the deferred a promise\n\t\tpromise.promise( deferred );\n\n\t\t// Call given func if any\n\t\tif ( func ) {\n\t\t\tfunc.call( deferred, deferred );\n\t\t}\n\n\t\t// All done!\n\t\treturn deferred;\n\t},\n\n\t// Deferred helper\n\twhen: function( subordinate /* , ..., subordinateN */ ) {\n\t\tvar i = 0,\n\t\t\tresolveValues = slice.call( arguments ),\n\t\t\tlength = resolveValues.length,\n\n\t\t\t// the count of uncompleted subordinates\n\t\t\tremaining = length !== 1 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// If resolveValues consist of only a single Deferred, just use that.\n\t\t\tdeferred = remaining === 1 ? subordinate : jQuery.Deferred(),\n\n\t\t\t// Update function for both resolve and progress values\n\t\t\tupdateFunc = function( i, contexts, values ) {\n\t\t\t\treturn function( value ) {\n\t\t\t\t\tcontexts[ i ] = this;\n\t\t\t\t\tvalues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;\n\t\t\t\t\tif ( values === progressValues ) {\n\t\t\t\t\t\tdeferred.notifyWith( contexts, values );\n\n\t\t\t\t\t} else if ( !( --remaining ) ) {\n\t\t\t\t\t\tdeferred.resolveWith( contexts, values );\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t},\n\n\t\t\tprogressValues, progressContexts, resolveContexts;\n\n\t\t// add listeners to Deferred subordinates; treat others as resolved\n\t\tif ( length > 1 ) {\n\t\t\tprogressValues = new Array( length );\n\t\t\tprogressContexts = new Array( length );\n\t\t\tresolveContexts = new Array( length );\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) {\n\t\t\t\t\tresolveValues[ i ].promise()\n\t\t\t\t\t\t.progress( updateFunc( i, progressContexts, progressValues ) )\n\t\t\t\t\t\t.done( updateFunc( i, resolveContexts, resolveValues ) )\n\t\t\t\t\t\t.fail( deferred.reject );\n\t\t\t\t} else {\n\t\t\t\t\t--remaining;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// if we're not waiting on anything, resolve the master\n\t\tif ( !remaining ) {\n\t\t\tdeferred.resolveWith( resolveContexts, resolveValues );\n\t\t}\n\n\t\treturn deferred.promise();\n\t}\n} );\n\n\n// The deferred used on DOM ready\nvar readyList;\n\njQuery.fn.ready = function( fn ) {\n\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\n\t// Is the DOM ready to be used? Set to true once it occurs.\n\tisReady: false,\n\n\t// A counter to track how many items to wait for before\n\t// the ready event fires. See #6781\n\treadyWait: 1,\n\n\t// Hold (or release) the ready event\n\tholdReady: function( hold ) {\n\t\tif ( hold ) {\n\t\t\tjQuery.readyWait++;\n\t\t} else {\n\t\t\tjQuery.ready( true );\n\t\t}\n\t},\n\n\t// Handle when the DOM is ready\n\tready: function( wait ) {\n\n\t\t// Abort if there are pending holds or we're already ready\n\t\tif ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Remember that the DOM is ready\n\t\tjQuery.isReady = true;\n\n\t\t// If a normal DOM Ready event fired, decrement, and wait if need be\n\t\tif ( wait !== true && --jQuery.readyWait > 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If there are functions bound, to execute\n\t\treadyList.resolveWith( document, [ jQuery ] );\n\n\t\t// Trigger any bound ready events\n\t\tif ( jQuery.fn.triggerHandler ) {\n\t\t\tjQuery( document ).triggerHandler( \"ready\" );\n\t\t\tjQuery( document ).off( \"ready\" );\n\t\t}\n\t}\n} );\n\n/**\n * Clean-up method for dom ready events\n */\nfunction detach() {\n\tif ( document.addEventListener ) {\n\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed );\n\t\twindow.removeEventListener( \"load\", completed );\n\n\t} else {\n\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\twindow.detachEvent( \"onload\", completed );\n\t}\n}\n\n/**\n * The ready event handler and self cleanup method\n */\nfunction completed() {\n\n\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\tif ( document.addEventListener ||\n\t\twindow.event.type === \"load\" ||\n\t\tdocument.readyState === \"complete\" ) {\n\n\t\tdetach();\n\t\tjQuery.ready();\n\t}\n}\n\njQuery.ready.promise = function( obj ) {\n\tif ( !readyList ) {\n\n\t\treadyList = jQuery.Deferred();\n\n\t\t// Catch cases where $(document).ready() is called\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE6-10\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\n\n\t\t// If IE event model is used\n\t\t} else {\n\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch ( e ) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t( function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll( \"left\" );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn window.setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t} )();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\n};\n\n// Kick off the DOM ready check even if the user does not\njQuery.ready.promise();\n\n\n\n\n// Support: IE<9\n// Iteration over object's inherited properties before its own\nvar i;\nfor ( i in jQuery( support ) ) {\n\tbreak;\n}\nsupport.ownFirst = i === \"0\";\n\n// Note: most support tests are defined in their respective modules.\n// false until the test is run\nsupport.inlineBlockNeedsLayout = false;\n\n// Execute ASAP in case we need to set body.style.zoom\njQuery( function() {\n\n\t// Minified: var a,b,c,d\n\tvar val, div, body, container;\n\n\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\tif ( !body || !body.style ) {\n\n\t\t// Return for frameset docs that don't have a body\n\t\treturn;\n\t}\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\tbody.appendChild( container ).appendChild( div );\n\n\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t// Support: IE<8\n\t\t// Check if natively block-level elements act like inline-block\n\t\t// elements when setting their display to 'inline' and giving\n\t\t// them layout\n\t\tdiv.style.cssText = \"display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1\";\n\n\t\tsupport.inlineBlockNeedsLayout = val = div.offsetWidth === 3;\n\t\tif ( val ) {\n\n\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t// Support: IE<8\n\t\t\tbody.style.zoom = 1;\n\t\t}\n\t}\n\n\tbody.removeChild( container );\n} );\n\n\n( function() {\n\tvar div = document.createElement( \"div\" );\n\n\t// Support: IE<9\n\tsupport.deleteExpando = true;\n\ttry {\n\t\tdelete div.test;\n\t} catch ( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\nvar acceptData = function( elem ) {\n\tvar noData = jQuery.noData[ ( elem.nodeName + \" \" ).toLowerCase() ],\n\t\tnodeType = +elem.nodeType || 1;\n\n\t// Do not set data on non-element DOM nodes because it will not be cleared (#8335).\n\treturn nodeType !== 1 && nodeType !== 9 ?\n\t\tfalse :\n\n\t\t// Nodes accept data unless otherwise specified; rejection can be conditional\n\t\t!noData || noData !== true && elem.getAttribute( \"classid\" ) === noData;\n};\n\n\n\n\nvar rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction dataAttr( elem, key, data ) {\n\n\t// If nothing was found internally, try to fetch any\n\t// data from the HTML5 data-* attribute\n\tif ( data === undefined && elem.nodeType === 1 ) {\n\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\n\t\tdata = elem.getAttribute( name );\n\n\t\tif ( typeof data === \"string\" ) {\n\t\t\ttry {\n\t\t\t\tdata = data === \"true\" ? true :\n\t\t\t\t\tdata === \"false\" ? false :\n\t\t\t\t\tdata === \"null\" ? null :\n\n\t\t\t\t\t// Only convert to a number if it doesn't change the string\n\t\t\t\t\t+data + \"\" === data ? +data :\n\t\t\t\t\trbrace.test( data ) ? jQuery.parseJSON( data ) :\n\t\t\t\t\tdata;\n\t\t\t} catch ( e ) {}\n\n\t\t\t// Make sure we set the data so it isn't changed later\n\t\t\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[ name ] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar ret, thisCache,\n\t\tinternalKey = jQuery.expando,\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( ( !id || !cache[ id ] || ( !pvt && !cache[ id ].data ) ) &&\n\t\tdata === undefined && typeof name === \"string\" ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\tid = elem[ internalKey ] = deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\n\t\t// Avoid exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tcache[ id ] = isNode ? {} : { toJSON: jQuery.noop };\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( typeof name === \"string\" ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, i,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split( \" \" );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If \"name\" is an array of keys...\n\t\t\t\t// When data is initially created, via (\"key\", \"val\") signature,\n\t\t\t\t// keys will be converted to camelCase.\n\t\t\t\t// Since there is no way to tell _how_ a key was added, remove\n\t\t\t\t// both plain key and camelCase key. #12786\n\t\t\t\t// This will only penalize the array argument path.\n\t\t\t\tname = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\ti = name.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete thisCache[ name[ i ] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( pvt ? !isEmptyDataObject( thisCache ) : !jQuery.isEmptyObject( thisCache ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t/* jshint eqeqeq: false */\n\t} else if ( support.deleteExpando || cache != cache.window ) {\n\t\t/* jshint eqeqeq: true */\n\t\tdelete cache[ id ];\n\n\t// When all else fails, undefined\n\t} else {\n\t\tcache[ id ] = undefined;\n\t}\n}\n\njQuery.extend( {\n\tcache: {},\n\n\t// The following elements (space-suffixed to avoid Object.prototype collisions)\n\t// throw uncatchable exceptions if you attempt to set expando properties\n\tnoData: {\n\t\t\"applet \": true,\n\t\t\"embed \": true,\n\n\t\t// ...but Flash objects (which have this classid) *can* handle expandos\n\t\t\"object \": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\"\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[ jQuery.expando ] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t}\n} );\n\njQuery.fn.extend( {\n\tdata: function( key, value ) {\n\t\tvar i, name, data,\n\t\t\telem = this[ 0 ],\n\t\t\tattrs = elem && elem.attributes;\n\n\t\t// Special expections of .data basically thwart jQuery.access,\n\t\t// so implement the relevant behavior ourselves\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\ti = attrs.length;\n\t\t\t\t\twhile ( i-- ) {\n\n\t\t\t\t\t\t// Support: IE11+\n\t\t\t\t\t\t// The attrs elements can be null (#14894)\n\t\t\t\t\t\tif ( attrs[ i ] ) {\n\t\t\t\t\t\t\tname = attrs[ i ].name;\n\t\t\t\t\t\t\tif ( name.indexOf( \"data-\" ) === 0 ) {\n\t\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice( 5 ) );\n\t\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\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\tjQuery._data( elem, \"parsedAttrs\", true );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn data;\n\t\t}\n\n\t\t// Sets multiple values\n\t\tif ( typeof key === \"object\" ) {\n\t\t\treturn this.each( function() {\n\t\t\t\tjQuery.data( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn arguments.length > 1 ?\n\n\t\t\t// Sets one value\n\t\t\tthis.each( function() {\n\t\t\t\tjQuery.data( this, key, value );\n\t\t\t} ) :\n\n\t\t\t// Gets one value\n\t\t\t// Try to fetch any internally stored data first\n\t\t\telem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : undefined;\n\t},\n\n\tremoveData: function( key ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeData( this, key );\n\t\t} );\n\t}\n} );\n\n\njQuery.extend( {\n\tqueue: function( elem, type, data ) {\n\t\tvar queue;\n\n\t\tif ( elem ) {\n\t\t\ttype = ( type || \"fx\" ) + \"queue\";\n\t\t\tqueue = jQuery._data( elem, type );\n\n\t\t\t// Speed up dequeue by getting out quickly if this is just a lookup\n\t\t\tif ( data ) {\n\t\t\t\tif ( !queue || jQuery.isArray( data ) ) {\n\t\t\t\t\tqueue = jQuery._data( elem, type, jQuery.makeArray( data ) );\n\t\t\t\t} else {\n\t\t\t\t\tqueue.push( data );\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn queue || [];\n\t\t}\n\t},\n\n\tdequeue: function( elem, type ) {\n\t\ttype = type || \"fx\";\n\n\t\tvar queue = jQuery.queue( elem, type ),\n\t\t\tstartLength = queue.length,\n\t\t\tfn = queue.shift(),\n\t\t\thooks = jQuery._queueHooks( elem, type ),\n\t\t\tnext = function() {\n\t\t\t\tjQuery.dequeue( elem, type );\n\t\t\t};\n\n\t\t// If the fx queue is dequeued, always remove the progress sentinel\n\t\tif ( fn === \"inprogress\" ) {\n\t\t\tfn = queue.shift();\n\t\t\tstartLength--;\n\t\t}\n\n\t\tif ( fn ) {\n\n\t\t\t// Add a progress sentinel to prevent the fx queue from being\n\t\t\t// automatically dequeued\n\t\t\tif ( type === \"fx\" ) {\n\t\t\t\tqueue.unshift( \"inprogress\" );\n\t\t\t}\n\n\t\t\t// clear up the last queue stop function\n\t\t\tdelete hooks.stop;\n\t\t\tfn.call( elem, next, hooks );\n\t\t}\n\n\t\tif ( !startLength && hooks ) {\n\t\t\thooks.empty.fire();\n\t\t}\n\t},\n\n\t// not intended for public consumption - generates a queueHooks object,\n\t// or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, key );\n\t\t\t} )\n\t\t} );\n\t}\n} );\n\njQuery.fn.extend( {\n\tqueue: function( type, data ) {\n\t\tvar setter = 2;\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tdata = type;\n\t\t\ttype = \"fx\";\n\t\t\tsetter--;\n\t\t}\n\n\t\tif ( arguments.length < setter ) {\n\t\t\treturn jQuery.queue( this[ 0 ], type );\n\t\t}\n\n\t\treturn data === undefined ?\n\t\t\tthis :\n\t\t\tthis.each( function() {\n\t\t\t\tvar queue = jQuery.queue( this, type, data );\n\n\t\t\t\t// ensure a hooks for this queue\n\t\t\t\tjQuery._queueHooks( this, type );\n\n\t\t\t\tif ( type === \"fx\" && queue[ 0 ] !== \"inprogress\" ) {\n\t\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t\t}\n\t\t\t} );\n\t},\n\tdequeue: function( type ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.dequeue( this, type );\n\t\t} );\n\t},\n\tclearQueue: function( type ) {\n\t\treturn this.queue( type || \"fx\", [] );\n\t},\n\n\t// Get a promise resolved when queues of a certain type\n\t// are emptied (fx is the type by default)\n\tpromise: function( type, obj ) {\n\t\tvar tmp,\n\t\t\tcount = 1,\n\t\t\tdefer = jQuery.Deferred(),\n\t\t\telements = this,\n\t\t\ti = this.length,\n\t\t\tresolve = function() {\n\t\t\t\tif ( !( --count ) ) {\n\t\t\t\t\tdefer.resolveWith( elements, [ elements ] );\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tobj = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\ttype = type || \"fx\";\n\n\t\twhile ( i-- ) {\n\t\t\ttmp = jQuery._data( elements[ i ], type + \"queueHooks\" );\n\t\t\tif ( tmp && tmp.empty ) {\n\t\t\t\tcount++;\n\t\t\t\ttmp.empty.add( resolve );\n\t\t\t}\n\t\t}\n\t\tresolve();\n\t\treturn defer.promise( obj );\n\t}\n} );\n\n\n( function() {\n\tvar shrinkWrapBlocksVal;\n\n\tsupport.shrinkWrapBlocks = function() {\n\t\tif ( shrinkWrapBlocksVal != null ) {\n\t\t\treturn shrinkWrapBlocksVal;\n\t\t}\n\n\t\t// Will be changed later if needed.\n\t\tshrinkWrapBlocksVal = false;\n\n\t\t// Minified: var b,c,d\n\t\tvar div, body, container;\n\n\t\tbody = document.getElementsByTagName( \"body\" )[ 0 ];\n\t\tif ( !body || !body.style ) {\n\n\t\t\t// Test fired too early or in an unsupported environment, exit.\n\t\t\treturn;\n\t\t}\n\n\t\t// Setup\n\t\tdiv = document.createElement( \"div\" );\n\t\tcontainer = document.createElement( \"div\" );\n\t\tcontainer.style.cssText = \"position:absolute;border:0;width:0;height:0;top:0;left:-9999px\";\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE6\n\t\t// Check if elements with layout shrink-wrap their children\n\t\tif ( typeof div.style.zoom !== \"undefined\" ) {\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border\n\t\t\tdiv.style.cssText =\n\n\t\t\t\t// Support: Firefox<29, Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;\" +\n\t\t\t\t\"padding:1px;width:1px;zoom:1\";\n\t\t\tdiv.appendChild( document.createElement( \"div\" ) ).style.width = \"5px\";\n\t\t\tshrinkWrapBlocksVal = div.offsetWidth !== 3;\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\treturn shrinkWrapBlocksVal;\n\t};\n\n} )();\nvar pnum = ( /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/ ).source;\n\nvar rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\n\t\t// isHidden might be called from jQuery#filter function;\n\t\t// in that case, element will be second argument\n\t\telem = el || elem;\n\t\treturn jQuery.css( elem, \"display\" ) === \"none\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\n\n\n// Multifunctional method to get and set values of a collection\n// The value/s can optionally be executed if it's a function\nvar access = function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\tvar i = 0,\n\t\tlength = elems.length,\n\t\tbulk = key == null;\n\n\t// Sets many values\n\tif ( jQuery.type( key ) === \"object\" ) {\n\t\tchainable = true;\n\t\tfor ( i in key ) {\n\t\t\taccess( elems, fn, i, key[ i ], true, emptyGet, raw );\n\t\t}\n\n\t// Sets one value\n\t} else if ( value !== undefined ) {\n\t\tchainable = true;\n\n\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\traw = true;\n\t\t}\n\n\t\tif ( bulk ) {\n\n\t\t\t// Bulk operations run against the entire set\n\t\t\tif ( raw ) {\n\t\t\t\tfn.call( elems, value );\n\t\t\t\tfn = null;\n\n\t\t\t// ...except when executing function values\n\t\t\t} else {\n\t\t\t\tbulk = fn;\n\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\n\t\tif ( fn ) {\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tfn(\n\t\t\t\t\telems[ i ],\n\t\t\t\t\tkey,\n\t\t\t\t\traw ? value : value.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn chainable ?\n\t\telems :\n\n\t\t// Gets\n\t\tbulk ?\n\t\t\tfn.call( elems ) :\n\t\t\tlength ? fn( elems[ 0 ], key ) : emptyGet;\n};\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\nvar rleadingWhitespace = ( /^\\s+/ );\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|\" +\n\t\t\"details|dialog|figcaption|figure|footer|header|hgroup|main|\" +\n\t\t\"mark|meter|nav|output|picture|progress|section|summary|template|time|video\";\n\n\n\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\n\n( function() {\n\tvar div = document.createElement( \"div\" ),\n\t\tfragment = document.createDocumentFragment(),\n\t\tinput = document.createElement( \"input\" );\n\n\t// Setup\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// IE strips leading whitespace when .innerHTML is used\n\tsupport.leadingWhitespace = div.firstChild.nodeType === 3;\n\n\t// Make sure that tbody elements aren't automatically inserted\n\t// IE will insert them into empty tables\n\tsupport.tbody = !div.getElementsByTagName( \"tbody\" ).length;\n\n\t// Make sure that link elements get serialized correctly by innerHTML\n\t// This requires a wrapper element in IE\n\tsupport.htmlSerialize = !!div.getElementsByTagName( \"link\" ).length;\n\n\t// Makes sure cloning an html5 element does not cause problems\n\t// Where outerHTML is undefined, this still works\n\tsupport.html5Clone =\n\t\tdocument.createElement( \"nav\" ).cloneNode( true ).outerHTML !== \"<:nav></:nav>\";\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tinput.type = \"checkbox\";\n\tinput.checked = true;\n\tfragment.appendChild( input );\n\tsupport.appendChecked = input.checked;\n\n\t// Make sure textarea (and checkbox) defaultValue is properly cloned\n\t// Support: IE6-IE11+\n\tdiv.innerHTML = \"<textarea>x</textarea>\";\n\tsupport.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tfragment.appendChild( div );\n\n\t// Support: Windows Web Apps (WWA)\n\t// `name` and `type` must use .setAttribute for WWA (#14901)\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"type\", \"radio\" );\n\tinput.setAttribute( \"checked\", \"checked\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tdiv.appendChild( input );\n\n\t// Support: Safari 5.1, iOS 5.1, Android 4.x, Android 2.3\n\t// old WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Cloned elements keep attachEvent handlers, we use addEventListener on IE9+\n\tsupport.noCloneEvent = !!div.addEventListener;\n\n\t// Support: IE<9\n\t// Since attributes and properties are the same in IE,\n\t// cleanData must set properties to undefined rather than use removeAttribute\n\tdiv[ jQuery.expando ] = 1;\n\tsupport.attributes = !div.getAttribute( jQuery.expando );\n} )();\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\tarea: [ 1, \"<map>\", \"</map>\" ],\n\n\t// Support: IE8\n\tparam: [ 1, \"<object>\", \"</object>\" ],\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t// unless wrapped in a div with non-breaking characters in front of it.\n\t_default: support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\" ]\n};\n\n// Support: IE8-IE9\nwrapMap.optgroup = wrapMap.option;\n\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.querySelectorAll( tag || \"*\" ) :\n\t\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context;\n\t\t\t( elem = elems[ i ] ) != null;\n\t\t\ti++\n\t\t) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\tjQuery._data(\n\t\t\telem,\n\t\t\t\"globalEval\",\n\t\t\t!refElements || jQuery._data( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/,\n\trtbody = /<tbody/i;\n\nfunction fixDefaultChecked( elem ) {\n\tif ( rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar j, elem, contains,\n\t\ttmp, tag, tbody, wrap,\n\t\tl = elems.length,\n\n\t\t// Ensure a safe fragment\n\t\tsafe = createSafeFragment( context ),\n\n\t\tnodes = [],\n\t\ti = 0;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || safe.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Manually add leading whitespace removed by IE\n\t\t\t\tif ( !support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[ 0 ] ) );\n\t\t\t\t}\n\n\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\tif ( !support.tbody ) {\n\n\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\twrap[ 1 ] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t0;\n\n\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\tif ( jQuery.nodeName( ( tbody = elem.childNodes[ j ] ), \"tbody\" ) &&\n\t\t\t\t\t\t\t!tbody.childNodes.length ) {\n\n\t\t\t\t\t\t\telem.removeChild( tbody );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t}\n\n\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\ttmp = safe.lastChild;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Fix #11356: Clear elements from fragment\n\tif ( tmp ) {\n\t\tsafe.removeChild( tmp );\n\t}\n\n\t// Reset defaultChecked for any radios and checkboxes\n\t// about to be appended to the DOM in IE 6/7 (#8060)\n\tif ( !support.appendChecked ) {\n\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t}\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( safe.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\ttmp = null;\n\n\treturn safe;\n}\n\n\n( function() {\n\tvar i, eventName,\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox (lack focus(in | out) events)\n\tfor ( i in { submit: true, change: true, focusin: true } ) {\n\t\teventName = \"on\" + i;\n\n\t\tif ( !( support[ i ] = eventName in window ) ) {\n\n\t\t\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP)\n\t\t\tdiv.setAttribute( eventName, \"t\" );\n\t\t\tsupport[ i ] = div.attributes[ eventName ].expando === false;\n\t\t}\n\t}\n\n\t// Null elements to avoid leaks in IE.\n\tdiv = null;\n} )();\n\n\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\n}\n\n/*\n * Helper functions for managing events -- not part of the public interface.\n * Props to Dean Edwards' addEvent library for many of the ideas.\n */\njQuery.event = {\n\n\tglobal: {},\n\n\tadd: function( elem, types, handler, data, selector ) {\n\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( elem );\n\n\t\t// Don't attach events to noData or text/comment nodes (but allow plain objects)\n\t\tif ( !elemData ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Caller can pass in an object of custom data in lieu of the handler\n\t\tif ( handler.handler ) {\n\t\t\thandleObjIn = handler;\n\t\t\thandler = handleObjIn.handler;\n\t\t\tselector = handleObjIn.selector;\n\t\t}\n\n\t\t// Make sure that the handler has a unique ID, used to find/remove it later\n\t\tif ( !handler.guid ) {\n\t\t\thandler.guid = jQuery.guid++;\n\t\t}\n\n\t\t// Init the element's event structure and main handler, if this is the first\n\t\tif ( !( events = elemData.events ) ) {\n\t\t\tevents = elemData.events = {};\n\t\t}\n\t\tif ( !( eventHandle = elemData.handle ) ) {\n\t\t\teventHandle = elemData.handle = function( e ) {\n\n\t\t\t\t// Discard the second event of a jQuery.event.trigger() and\n\t\t\t\t// when an event is called after a page has unloaded\n\t\t\t\treturn typeof jQuery !== \"undefined\" &&\n\t\t\t\t\t( !e || jQuery.event.triggered !== e.type ) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak\n\t\t\t// with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// There *must* be a type, no attaching namespace-only handlers\n\t\t\tif ( !type ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// If event changes its type, use the special event handlers for the changed type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// If selector defined, determine special event api type, otherwise given type\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\n\t\t\t// Update special based on newly reset type\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\n\t\t\t// handleObj is passed to all event handlers\n\t\t\thandleObj = jQuery.extend( {\n\t\t\t\ttype: type,\n\t\t\t\torigType: origType,\n\t\t\t\tdata: data,\n\t\t\t\thandler: handler,\n\t\t\t\tguid: handler.guid,\n\t\t\t\tselector: selector,\n\t\t\t\tneedsContext: selector && jQuery.expr.match.needsContext.test( selector ),\n\t\t\t\tnamespace: namespaces.join( \".\" )\n\t\t\t}, handleObjIn );\n\n\t\t\t// Init the event handler queue if we're the first\n\t\t\tif ( !( handlers = events[ type ] ) ) {\n\t\t\t\thandlers = events[ type ] = [];\n\t\t\t\thandlers.delegateCount = 0;\n\n\t\t\t\t// Only use addEventListener/attachEvent if the special events handler returns false\n\t\t\t\tif ( !special.setup ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( special.add ) {\n\t\t\t\tspecial.add.call( elem, handleObj );\n\n\t\t\t\tif ( !handleObj.handler.guid ) {\n\t\t\t\t\thandleObj.handler.guid = handler.guid;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Add to the element's handler list, delegates in front\n\t\t\tif ( selector ) {\n\t\t\t\thandlers.splice( handlers.delegateCount++, 0, handleObj );\n\t\t\t} else {\n\t\t\t\thandlers.push( handleObj );\n\t\t\t}\n\n\t\t\t// Keep track of which events have ever been used, for event optimization\n\t\t\tjQuery.event.global[ type ] = true;\n\t\t}\n\n\t\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( elem );\n\n\t\tif ( !elemData || !( events = elemData.events ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Once for each type.namespace in types; type may be omitted\n\t\ttypes = ( types || \"\" ).match( rnotwhite ) || [ \"\" ];\n\t\tt = types.length;\n\t\twhile ( t-- ) {\n\t\t\ttmp = rtypenamespace.exec( types[ t ] ) || [];\n\t\t\ttype = origType = tmp[ 1 ];\n\t\t\tnamespaces = ( tmp[ 2 ] || \"\" ).split( \".\" ).sort();\n\n\t\t\t// Unbind all events (on this namespace, if provided) for the element\n\t\t\tif ( !type ) {\n\t\t\t\tfor ( type in events ) {\n\t\t\t\t\tjQuery.event.remove( elem, type + types[ t ], handler, selector, true );\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tspecial = jQuery.event.special[ type ] || {};\n\t\t\ttype = ( selector ? special.delegateType : special.bindType ) || type;\n\t\t\thandlers = events[ type ] || [];\n\t\t\ttmp = tmp[ 2 ] &&\n\t\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" );\n\n\t\t\t// Remove matching events\n\t\t\torigCount = j = handlers.length;\n\t\t\twhile ( j-- ) {\n\t\t\t\thandleObj = handlers[ j ];\n\n\t\t\t\tif ( ( mappedTypes || origType === handleObj.origType ) &&\n\t\t\t\t\t( !handler || handler.guid === handleObj.guid ) &&\n\t\t\t\t\t( !tmp || tmp.test( handleObj.namespace ) ) &&\n\t\t\t\t\t( !selector || selector === handleObj.selector ||\n\t\t\t\t\t\tselector === \"**\" && handleObj.selector ) ) {\n\t\t\t\t\thandlers.splice( j, 1 );\n\n\t\t\t\t\tif ( handleObj.selector ) {\n\t\t\t\t\t\thandlers.delegateCount--;\n\t\t\t\t\t}\n\t\t\t\t\tif ( special.remove ) {\n\t\t\t\t\t\tspecial.remove.call( elem, handleObj );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove generic event handler if we removed something and no more handlers exist\n\t\t\t// (avoids potential for endless recursion during removal of special event handlers)\n\t\t\tif ( origCount && !handlers.length ) {\n\t\t\t\tif ( !special.teardown ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\n\t\t\t\t\tjQuery.removeEvent( elem, type, elemData.handle );\n\t\t\t\t}\n\n\t\t\t\tdelete events[ type ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdelete elemData.handle;\n\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = hasOwn.call( event, \"namespace\" ) ? event.namespace.split( \".\" ) : [];\n\n\t\tcur = tmp = elem = elem || document;\n\n\t\t// Don't do events on text and comment nodes\n\t\tif ( elem.nodeType === 3 || elem.nodeType === 8 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// focus/blur morphs to focusin/out; ensure we're not firing them right now\n\t\tif ( rfocusMorph.test( type + jQuery.event.triggered ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( type.indexOf( \".\" ) > -1 ) {\n\n\t\t\t// Namespaced trigger; create a regexp to match event type in handle()\n\t\t\tnamespaces = type.split( \".\" );\n\t\t\ttype = namespaces.shift();\n\t\t\tnamespaces.sort();\n\t\t}\n\t\tontype = type.indexOf( \":\" ) < 0 && \"on\" + type;\n\n\t\t// Caller can pass in a jQuery.Event object, Object, or just an event type string\n\t\tevent = event[ jQuery.expando ] ?\n\t\t\tevent :\n\t\t\tnew jQuery.Event( type, typeof event === \"object\" && event );\n\n\t\t// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\t\tevent.isTrigger = onlyHandlers ? 2 : 3;\n\t\tevent.namespace = namespaces.join( \".\" );\n\t\tevent.rnamespace = event.namespace ?\n\t\t\tnew RegExp( \"(^|\\\\.)\" + namespaces.join( \"\\\\.(?:.*\\\\.|)\" ) + \"(\\\\.|$)\" ) :\n\t\t\tnull;\n\n\t\t// Clean up the event in case it is being reused\n\t\tevent.result = undefined;\n\t\tif ( !event.target ) {\n\t\t\tevent.target = elem;\n\t\t}\n\n\t\t// Clone any incoming data and prepend the event, creating the handler arg list\n\t\tdata = data == null ?\n\t\t\t[ event ] :\n\t\t\tjQuery.makeArray( data, [ event ] );\n\n\t\t// Allow special events to draw outside the lines\n\t\tspecial = jQuery.event.special[ type ] || {};\n\t\tif ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine event propagation path in advance, per W3C events spec (#9951)\n\t\t// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\t\tif ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {\n\n\t\t\tbubbleType = special.delegateType || type;\n\t\t\tif ( !rfocusMorph.test( bubbleType + type ) ) {\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t\tfor ( ; cur; cur = cur.parentNode ) {\n\t\t\t\teventPath.push( cur );\n\t\t\t\ttmp = cur;\n\t\t\t}\n\n\t\t\t// Only add window if we got to document (e.g., not plain obj or detached DOM)\n\t\t\tif ( tmp === ( elem.ownerDocument || document ) ) {\n\t\t\t\teventPath.push( tmp.defaultView || tmp.parentWindow || window );\n\t\t\t}\n\t\t}\n\n\t\t// Fire handlers on the event path\n\t\ti = 0;\n\t\twhile ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {\n\n\t\t\tevent.type = i > 1 ?\n\t\t\t\tbubbleType :\n\t\t\t\tspecial.bindType || type;\n\n\t\t\t// jQuery handler\n\t\t\thandle = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tjQuery._data( cur, \"handle\" );\n\n\t\t\tif ( handle ) {\n\t\t\t\thandle.apply( cur, data );\n\t\t\t}\n\n\t\t\t// Native handler\n\t\t\thandle = ontype && cur[ ontype ];\n\t\t\tif ( handle && handle.apply && acceptData( cur ) ) {\n\t\t\t\tevent.result = handle.apply( cur, data );\n\t\t\t\tif ( event.result === false ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tevent.type = type;\n\n\t\t// If nobody prevented the default action, do it now\n\t\tif ( !onlyHandlers && !event.isDefaultPrevented() ) {\n\n\t\t\tif (\n\t\t\t\t( !special._default ||\n\t\t\t\t special._default.apply( eventPath.pop(), data ) === false\n\t\t\t\t) && acceptData( elem )\n\t\t\t) {\n\n\t\t\t\t// Call a native DOM method on the target with the same name name as the event.\n\t\t\t\t// Can't use an .isFunction() check here because IE6/7 fails that test.\n\t\t\t\t// Don't do default actions on window, that's where global variables be (#6170)\n\t\t\t\tif ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// Don't re-trigger an onFOO event when we call its FOO() method\n\t\t\t\t\ttmp = elem[ ontype ];\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = null;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prevent re-triggering of the same event, since we already bubbled it above\n\t\t\t\t\tjQuery.event.triggered = type;\n\t\t\t\t\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\n\t\t\t\t\tjQuery.event.triggered = undefined;\n\n\t\t\t\t\tif ( tmp ) {\n\t\t\t\t\t\telem[ ontype ] = tmp;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\tdispatch: function( event ) {\n\n\t\t// Make a writable jQuery.Event from the native event object\n\t\tevent = jQuery.event.fix( event );\n\n\t\tvar i, j, ret, matched, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\targs = slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( this, \"events\" ) || {} )[ event.type ] || [],\n\t\t\tspecial = jQuery.event.special[ event.type ] || {};\n\n\t\t// Use the fix-ed jQuery.Event rather than the (read-only) native event\n\t\targs[ 0 ] = event;\n\t\tevent.delegateTarget = this;\n\n\t\t// Call the preDispatch hook for the mapped type, and let it bail if desired\n\t\tif ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Determine handlers\n\t\thandlerQueue = jQuery.event.handlers.call( this, event, handlers );\n\n\t\t// Run delegates first; they may want to stop propagation beneath us\n\t\ti = 0;\n\t\twhile ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {\n\t\t\tevent.currentTarget = matched.elem;\n\n\t\t\tj = 0;\n\t\t\twhile ( ( handleObj = matched.handlers[ j++ ] ) &&\n\t\t\t\t!event.isImmediatePropagationStopped() ) {\n\n\t\t\t\t// Triggered event must either 1) have no namespace, or 2) have namespace(s)\n\t\t\t\t// a subset or equal to those in the bound event (both can have no namespace).\n\t\t\t\tif ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {\n\n\t\t\t\t\tevent.handleObj = handleObj;\n\t\t\t\t\tevent.data = handleObj.data;\n\n\t\t\t\t\tret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||\n\t\t\t\t\t\thandleObj.handler ).apply( matched.elem, args );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\tif ( ( event.result = ret ) === false ) {\n\t\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\t\tevent.stopPropagation();\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\n\t\t// Call the postDispatch hook for the mapped type\n\t\tif ( special.postDispatch ) {\n\t\t\tspecial.postDispatch.call( this, event );\n\t\t}\n\n\t\treturn event.result;\n\t},\n\n\thandlers: function( event, handlers ) {\n\t\tvar i, matches, sel, handleObj,\n\t\t\thandlerQueue = [],\n\t\t\tdelegateCount = handlers.delegateCount,\n\t\t\tcur = event.target;\n\n\t\t// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\t/* jshint eqeqeq: false */\n\t\t\tfor ( ; cur != this; cur = cur.parentNode || this ) {\n\t\t\t\t/* jshint eqeqeq: true */\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== \"click\" ) ) {\n\t\t\t\t\tmatches = [];\n\t\t\t\t\tfor ( i = 0; i < delegateCount; i++ ) {\n\t\t\t\t\t\thandleObj = handlers[ i ];\n\n\t\t\t\t\t\t// Don't conflict with Object.prototype properties (#13203)\n\t\t\t\t\t\tsel = handleObj.selector + \" \";\n\n\t\t\t\t\t\tif ( matches[ sel ] === undefined ) {\n\t\t\t\t\t\t\tmatches[ sel ] = handleObj.needsContext ?\n\t\t\t\t\t\t\t\tjQuery( sel, this ).index( cur ) > -1 :\n\t\t\t\t\t\t\t\tjQuery.find( sel, this, null, [ cur ] ).length;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( matches[ sel ] ) {\n\t\t\t\t\t\t\tmatches.push( handleObj );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif ( matches.length ) {\n\t\t\t\t\t\thandlerQueue.push( { elem: cur, handlers: matches } );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Add the remaining (directly-bound) handlers\n\t\tif ( delegateCount < handlers.length ) {\n\t\t\thandlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );\n\t\t}\n\n\t\treturn handlerQueue;\n\t},\n\n\tfix: function( event ) {\n\t\tif ( event[ jQuery.expando ] ) {\n\t\t\treturn event;\n\t\t}\n\n\t\t// Create a writable copy of the event object and normalize some properties\n\t\tvar i, prop, copy,\n\t\t\ttype = event.type,\n\t\t\toriginalEvent = event,\n\t\t\tfixHook = this.fixHooks[ type ];\n\n\t\tif ( !fixHook ) {\n\t\t\tthis.fixHooks[ type ] = fixHook =\n\t\t\t\trmouseEvent.test( type ) ? this.mouseHooks :\n\t\t\t\trkeyEvent.test( type ) ? this.keyHooks :\n\t\t\t\t{};\n\t\t}\n\t\tcopy = fixHook.props ? this.props.concat( fixHook.props ) : this.props;\n\n\t\tevent = new jQuery.Event( originalEvent );\n\n\t\ti = copy.length;\n\t\twhile ( i-- ) {\n\t\t\tprop = copy[ i ];\n\t\t\tevent[ prop ] = originalEvent[ prop ];\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Safari 6-8+\n\t\t// Target should not be a text node (#504, #13143)\n\t\tif ( event.target.nodeType === 3 ) {\n\t\t\tevent.target = event.target.parentNode;\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\n\t},\n\n\t// Includes some event props shared by KeyEvent and MouseEvent\n\tprops: ( \"altKey bubbles cancelable ctrlKey currentTarget detail eventPhase \" +\n\t\t\"metaKey relatedTarget shiftKey target timeStamp view which\" ).split( \" \" ),\n\n\tfixHooks: {},\n\n\tkeyHooks: {\n\t\tprops: \"char charCode key keyCode\".split( \" \" ),\n\t\tfilter: function( event, original ) {\n\n\t\t\t// Add which for key events\n\t\t\tif ( event.which == null ) {\n\t\t\t\tevent.which = original.charCode != null ? original.charCode : original.keyCode;\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tmouseHooks: {\n\t\tprops: ( \"button buttons clientX clientY fromElement offsetX offsetY \" +\n\t\t\t\"pageX pageY screenX screenY toElement\" ).split( \" \" ),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\n\n\t\t\t// Calculate pageX/Y if missing and clientX/Y available\n\t\t\tif ( event.pageX == null && original.clientX != null ) {\n\t\t\t\teventDoc = event.target.ownerDocument || document;\n\t\t\t\tdoc = eventDoc.documentElement;\n\t\t\t\tbody = eventDoc.body;\n\n\t\t\t\tevent.pageX = original.clientX +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( doc && doc.clientTop  || body && body.clientTop  || 0 );\n\t\t\t}\n\n\t\t\t// Add relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ?\n\t\t\t\t\toriginal.toElement :\n\t\t\t\t\tfromElement;\n\t\t\t}\n\n\t\t\t// Add which for click: 1 === left; 2 === middle; 3 === right\n\t\t\t// Note: button is not normalized, so don't use it\n\t\t\tif ( !event.which && button !== undefined ) {\n\t\t\t\tevent.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );\n\t\t\t}\n\n\t\t\treturn event;\n\t\t}\n\t},\n\n\tspecial: {\n\t\tload: {\n\n\t\t\t// Prevent triggered image.load events from bubbling to window.load\n\t\t\tnoBubble: true\n\t\t},\n\t\tfocus: {\n\n\t\t\t// Fire native event if possible so blur/focus sequence is correct\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this !== safeActiveElement() && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusin\"\n\t\t},\n\t\tblur: {\n\t\t\ttrigger: function() {\n\t\t\t\tif ( this === safeActiveElement() && this.blur ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\t\t\tdelegateType: \"focusout\"\n\t\t},\n\t\tclick: {\n\n\t\t\t// For checkbox, fire native event so checked state will be right\n\t\t\ttrigger: function() {\n\t\t\t\tif ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// For cross-browser consistency, don't fire native .click() on links\n\t\t\t_default: function( event ) {\n\t\t\t\treturn jQuery.nodeName( event.target, \"a\" );\n\t\t\t}\n\t\t},\n\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Support: Firefox 20+\n\t\t\t\t// Firefox doesn't alert if the returnValue field is not set.\n\t\t\t\tif ( event.result !== undefined && event.originalEvent ) {\n\t\t\t\t\tevent.originalEvent.returnValue = event.result;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\n\t\tvar e = jQuery.extend(\n\t\t\tnew jQuery.Event(),\n\t\t\tevent,\n\t\t\t{\n\t\t\t\ttype: type,\n\t\t\t\tisSimulated: true\n\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// Guard for simulated events was moved to jQuery.event.stopPropagation function\n\t\t\t\t// since `originalEvent` should point to the original event for the\n\t\t\t\t// constancy with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n};\n\njQuery.removeEvent = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\n\t\t// This \"if\" is needed for plain objects\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event,\n\t\t\t// to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === \"undefined\" ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\n\njQuery.Event = function( src, props ) {\n\n\t// Allow instantiation without the 'new' keyword\n\tif ( !( this instanceof jQuery.Event ) ) {\n\t\treturn new jQuery.Event( src, props );\n\t}\n\n\t// Event object\n\tif ( src && src.type ) {\n\t\tthis.originalEvent = src;\n\t\tthis.type = src.type;\n\n\t\t// Events bubbling up the document may have been marked as prevented\n\t\t// by a handler lower down the tree; reflect the correct value.\n\t\tthis.isDefaultPrevented = src.defaultPrevented ||\n\t\t\t\tsrc.defaultPrevented === undefined &&\n\n\t\t\t\t// Support: IE < 9, Android < 4.0\n\t\t\t\tsrc.returnValue === false ?\n\t\t\treturnTrue :\n\t\t\treturnFalse;\n\n\t// Event type\n\t} else {\n\t\tthis.type = src;\n\t}\n\n\t// Put explicitly provided properties onto the event object\n\tif ( props ) {\n\t\tjQuery.extend( this, props );\n\t}\n\n\t// Create a timestamp if incoming event doesn't have one\n\tthis.timeStamp = src && src.timeStamp || jQuery.now();\n\n\t// Mark it as fixed\n\tthis[ jQuery.expando ] = true;\n};\n\n// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\njQuery.Event.prototype = {\n\tconstructor: jQuery.Event,\n\tisDefaultPrevented: returnFalse,\n\tisPropagationStopped: returnFalse,\n\tisImmediatePropagationStopped: returnFalse,\n\n\tpreventDefault: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isDefaultPrevented = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\n\t\tif ( !e || this.isSimulated ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\n\t\tif ( e && e.stopImmediatePropagation ) {\n\t\t\te.stopImmediatePropagation();\n\t\t}\n\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\n// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\njQuery.each( {\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\",\n\tpointerenter: \"pointerover\",\n\tpointerleave: \"pointerout\"\n}, function( orig, fix ) {\n\tjQuery.event.special[ orig ] = {\n\t\tdelegateType: fix,\n\t\tbindType: fix,\n\n\t\thandle: function( event ) {\n\t\t\tvar ret,\n\t\t\t\ttarget = this,\n\t\t\t\trelated = event.relatedTarget,\n\t\t\t\thandleObj = event.handleObj;\n\n\t\t\t// For mouseenter/leave call the handler if related is outside the target.\n\t\t\t// NB: No relatedTarget if the mouse left/entered the browser window\n\t\t\tif ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {\n\t\t\t\tevent.type = handleObj.origType;\n\t\t\t\tret = handleObj.handler.apply( this, arguments );\n\t\t\t\tevent.type = fix;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t};\n} );\n\n// IE submit delegation\nif ( !support.submit ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ?\n\n\t\t\t\t\t\t// Support: IE <=8\n\t\t\t\t\t\t// We use jQuery.prop instead of elem.form\n\t\t\t\t\t\t// to allow fixing the IE8 delegated submit issue (gh-2332)\n\t\t\t\t\t\t// by 3rd party polyfills/workarounds.\n\t\t\t\t\t\tjQuery.prop( elem, \"form\" ) :\n\t\t\t\t\t\tundefined;\n\n\t\t\t\tif ( form && !jQuery._data( form, \"submit\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submitBubble = true;\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( form, \"submit\", true );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submitBubble ) {\n\t\t\t\tdelete event._submitBubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !support.change ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._justChanged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._justChanged && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._justChanged = false;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event );\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"change\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tjQuery._data( elem, \"change\", true );\n\t\t\t\t}\n\t\t\t} );\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger ||\n\t\t\t\t( elem.type !== \"radio\" && elem.type !== \"checkbox\" ) ) {\n\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\n\tjQuery.each( { focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler on the document while someone wants focusin/focusout\n\t\tvar handler = function( event ) {\n\t\t\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\t\t};\n\n\t\tjQuery.event.special[ fix ] = {\n\t\t\tsetup: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix );\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t\tjQuery._data( doc, fix, ( attaches || 0 ) + 1 );\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tvar doc = this.ownerDocument || this,\n\t\t\t\t\tattaches = jQuery._data( doc, fix ) - 1;\n\n\t\t\t\tif ( !attaches ) {\n\t\t\t\t\tdoc.removeEventListener( orig, handler, true );\n\t\t\t\t\tjQuery._removeData( doc, fix );\n\t\t\t\t} else {\n\t\t\t\t\tjQuery._data( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\njQuery.fn.extend( {\n\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn, 1 );\n\t},\n\toff: function( types, selector, fn ) {\n\t\tvar handleObj, type;\n\t\tif ( types && types.preventDefault && types.handleObj ) {\n\n\t\t\t// ( event )  dispatched jQuery.Event\n\t\t\thandleObj = types.handleObj;\n\t\t\tjQuery( types.delegateTarget ).off(\n\t\t\t\thandleObj.namespace ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.origType,\n\t\t\t\thandleObj.selector,\n\t\t\t\thandleObj.handler\n\t\t\t);\n\t\t\treturn this;\n\t\t}\n\t\tif ( typeof types === \"object\" ) {\n\n\t\t\t// ( types-object [, selector] )\n\t\t\tfor ( type in types ) {\n\t\t\t\tthis.off( type, selector, types[ type ] );\n\t\t\t}\n\t\t\treturn this;\n\t\t}\n\t\tif ( selector === false || typeof selector === \"function\" ) {\n\n\t\t\t// ( types [, fn] )\n\t\t\tfn = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tif ( fn === false ) {\n\t\t\tfn = returnFalse;\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.remove( this, types, fn, selector );\n\t\t} );\n\t},\n\n\ttrigger: function( type, data ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.event.trigger( type, data, this );\n\t\t} );\n\t},\n\ttriggerHandler: function( type, data ) {\n\t\tvar elem = this[ 0 ];\n\t\tif ( elem ) {\n\t\t\treturn jQuery.event.trigger( type, data, elem, true );\n\t\t}\n\t}\n} );\n\n\nvar rinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp( \"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\" ),\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g,\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement( \"div\" ) );\n\n// Support: IE<8\n// Manipulating tables requires a tbody\nfunction manipulationTarget( elem, content ) {\n\treturn jQuery.nodeName( elem, \"table\" ) &&\n\t\tjQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, \"tr\" ) ?\n\n\t\telem.getElementsByTagName( \"tbody\" )[ 0 ] ||\n\t\t\telem.appendChild( elem.ownerDocument.createElement( \"tbody\" ) ) :\n\t\telem;\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\telem.type = ( jQuery.find.attr( elem, \"type\" ) !== null ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[ 1 ];\n\t} else {\n\t\telem.removeAttribute( \"type\" );\n\t}\n\treturn elem;\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( support.html5Clone && ( src.innerHTML && !jQuery.trim( dest.innerHTML ) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && rcheckableType.test( src.type ) ) {\n\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\n\t}\n}\n\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar first, node, hasScripts,\n\t\tscripts, doc, fragment,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!jQuery._data( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\t\t\t\t\t\t\t// Optional AJAX dependency, but won't run scripts if not present\n\t\t\t\t\t\t\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval(\n\t\t\t\t\t\t\t\t( node.text || node.textContent || node.innerHTML || \"\" )\n\t\t\t\t\t\t\t\t\t.replace( rcleanScript, \"\" )\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\n\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\tfragment = first = null;\n\t\t}\n\t}\n\n\treturn collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\telems = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = elems[ i ] ) != null; i++ ) {\n\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( support.html5Clone || jQuery.isXMLDoc( elem ) ||\n\t\t\t!rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( ( !support.noCloneEvent || !support.noCloneChecked ) &&\n\t\t\t\t( elem.nodeType === 1 || elem.nodeType === 11 ) && !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2\n\t\t\tdestElements = getAll( clone );\n\t\t\tsrcElements = getAll( elem );\n\n\t\t\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; ++i ) {\n\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[ i ] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Copy the events from the original to the clone\n\t\tif ( dataAndEvents ) {\n\t\t\tif ( deepDataAndEvents ) {\n\t\t\t\tsrcElements = srcElements || getAll( elem );\n\t\t\t\tdestElements = destElements || getAll( clone );\n\n\t\t\t\tfor ( i = 0; ( node = srcElements[ i ] ) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, destElements[ i ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tcloneCopyEvent( elem, clone );\n\t\t\t}\n\t\t}\n\n\t\t// Preserve script evaluation history\n\t\tdestElements = getAll( clone, \"script\" );\n\t\tif ( destElements.length > 0 ) {\n\t\t\tsetGlobalEval( destElements, !inPage && getAll( elem, \"script\" ) );\n\t\t}\n\n\t\tdestElements = srcElements = node = null;\n\n\t\t// Return the cloned set\n\t\treturn clone;\n\t},\n\n\tcleanData: function( elems, /* internal */ forceAcceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tattributes = support.attributes,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\tif ( forceAcceptData || acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\n\t\t\t\t\tif ( data.events ) {\n\t\t\t\t\t\tfor ( type in data.events ) {\n\t\t\t\t\t\t\tif ( special[ type ] ) {\n\t\t\t\t\t\t\t\tjQuery.event.remove( elem, type );\n\n\t\t\t\t\t\t\t// This is a shortcut to avoid jQuery.event.remove's overhead\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tjQuery.removeEvent( elem, type, data.handle );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes\n\t\t\t\t\t\t// IE creates expando attributes along with the property\n\t\t\t\t\t\t// IE does not have a removeAttribute function on Document nodes\n\t\t\t\t\t\tif ( !attributes && typeof elem.removeAttribute !== \"undefined\" ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = undefined;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdeletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\n\ttext: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append(\n\t\t\t\t\t( this[ 0 ] && this[ 0 ].ownerDocument || document ).createTextNode( value )\n\t\t\t\t);\n\t\t}, null, value, arguments.length );\n\t},\n\n\tappend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.appendChild( elem );\n\t\t\t}\n\t\t} );\n\t},\n\n\tprepend: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tvar target = manipulationTarget( this, elem );\n\t\t\t\ttarget.insertBefore( elem, target.firstChild );\n\t\t\t}\n\t\t} );\n\t},\n\n\tbefore: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this );\n\t\t\t}\n\t\t} );\n\t},\n\n\tafter: function() {\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tif ( this.parentNode ) {\n\t\t\t\tthis.parentNode.insertBefore( elem, this.nextSibling );\n\t\t\t}\n\t\t} );\n\t},\n\n\tempty: function() {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; ( elem = this[ i ] ) != null; i++ ) {\n\n\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tclone: function( dataAndEvents, deepDataAndEvents ) {\n\t\tdataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n\t\tdeepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n\n\t\treturn this.map( function() {\n\t\t\treturn jQuery.clone( this, dataAndEvents, deepDataAndEvents );\n\t\t} );\n\t},\n\n\thtml: function( value ) {\n\t\treturn access( this, function( value ) {\n\t\t\tvar elem = this[ 0 ] || {},\n\t\t\t\ti = 0,\n\t\t\t\tl = this.length;\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// See if we can take a shortcut and just use innerHTML\n\t\t\tif ( typeof value === \"string\" && !rnoInnerhtml.test( value ) &&\n\t\t\t\t( support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( support.leadingWhitespace || !rleadingWhitespace.test( value ) ) &&\n\t\t\t\t!wrapMap[ ( rtagName.exec( value ) || [ \"\", \"\" ] )[ 1 ].toLowerCase() ] ) {\n\n\t\t\t\tvalue = jQuery.htmlPrefilter( value );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( ; i < l; i++ ) {\n\n\t\t\t\t\t\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[ i ] || {};\n\t\t\t\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t\t\t\t\telem.innerHTML = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\telem = 0;\n\n\t\t\t\t// If using innerHTML throws an exception, use the fallback method\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t\tif ( elem ) {\n\t\t\t\tthis.empty().append( value );\n\t\t\t}\n\t\t}, null, value, arguments.length );\n\t},\n\n\treplaceWith: function() {\n\t\tvar ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\n\t}\n} );\n\njQuery.each( {\n\tappendTo: \"append\",\n\tprependTo: \"prepend\",\n\tinsertBefore: \"before\",\n\tinsertAfter: \"after\",\n\treplaceAll: \"replaceWith\"\n}, function( name, original ) {\n\tjQuery.fn[ name ] = function( selector ) {\n\t\tvar elems,\n\t\t\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\n\n\t\tfor ( ; i <= last; i++ ) {\n\t\t\telems = i === last ? this : this.clone( true );\n\t\t\tjQuery( insert[ i ] )[ original ]( elems );\n\n\t\t\t// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tpush.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n} );\n\n\nvar iframe,\n\telemdisplay = {\n\n\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\n\n/**\n * Retrieve the actual display of a element\n * @param {String} name nodeName of the element\n * @param {Object} doc Document object\n */\n\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = jQuery.css( elem[ 0 ], \"display\" );\n\n\t// We don't have any data stored on the element,\n\t// so use \"detach\" method as fast way to get rid of the element\n\telem.detach();\n\n\treturn display;\n}\n\n/**\n * Try to determine the default display value of an element\n * @param {String} nodeName\n */\nfunction defaultDisplay( nodeName ) {\n\tvar doc = document,\n\t\tdisplay = elemdisplay[ nodeName ];\n\n\tif ( !display ) {\n\t\tdisplay = actualDisplay( nodeName, doc );\n\n\t\t// If the simple way fails, read from inside an iframe\n\t\tif ( display === \"none\" || !display ) {\n\n\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe || jQuery( \"<iframe frameborder='0' width='0' height='0'/>\" ) )\n\t\t\t\t.appendTo( doc.documentElement );\n\n\t\t\t// Always write a new HTML skeleton so Webkit and Firefox don't choke on reuse\n\t\t\tdoc = ( iframe[ 0 ].contentWindow || iframe[ 0 ].contentDocument ).document;\n\n\t\t\t// Support: IE\n\t\t\tdoc.write();\n\t\t\tdoc.close();\n\n\t\t\tdisplay = actualDisplay( nodeName, doc );\n\t\t\tiframe.detach();\n\t\t}\n\n\t\t// Store the correct default display\n\t\telemdisplay[ nodeName ] = display;\n\t}\n\n\treturn display;\n}\nvar rmargin = ( /^margin/ );\n\nvar rnumnonpx = new RegExp( \"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\" );\n\nvar swap = function( elem, options, callback, args ) {\n\tvar ret, name,\n\t\told = {};\n\n\t// Remember the old values, and insert the new ones\n\tfor ( name in options ) {\n\t\told[ name ] = elem.style[ name ];\n\t\telem.style[ name ] = options[ name ];\n\t}\n\n\tret = callback.apply( elem, args || [] );\n\n\t// Revert the old values\n\tfor ( name in options ) {\n\t\telem.style[ name ] = old[ name ];\n\t}\n\n\treturn ret;\n};\n\n\nvar documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, pixelMarginRightVal, boxSizingReliableVal,\n\t\treliableHiddenOffsetsVal, reliableMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\n\tif ( !div.style ) {\n\t\treturn;\n\t}\n\n\tdiv.style.cssText = \"float:left;opacity:.5\";\n\n\t// Support: IE<9\n\t// Make sure that element opacity exists (as opposed to filter)\n\tsupport.opacity = div.style.opacity === \"0.5\";\n\n\t// Verify style float existence\n\t// (IE uses styleFloat instead of cssFloat)\n\tsupport.cssFloat = !!div.style.cssFloat;\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\tcontainer = document.createElement( \"div\" );\n\tcontainer.style.cssText = \"border:0;width:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;position:absolute\";\n\tdiv.innerHTML = \"\";\n\tcontainer.appendChild( div );\n\n\t// Support: Firefox<29, Android 2.3\n\t// Vendor-prefix box-sizing\n\tsupport.boxSizing = div.style.boxSizing === \"\" || div.style.MozBoxSizing === \"\" ||\n\t\tdiv.style.WebkitBoxSizing === \"\";\n\n\tjQuery.extend( support, {\n\t\treliableHiddenOffsets: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableHiddenOffsetsVal;\n\t\t},\n\n\t\tboxSizingReliable: function() {\n\n\t\t\t// We're checking for pixelPositionVal here instead of boxSizingReliableVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\n\t\tpixelPosition: function() {\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelPositionVal;\n\t\t},\n\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginRightVal;\n\t\t},\n\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( pixelPositionVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t}\n\t} );\n\n\tfunction computeStyleTests() {\n\t\tvar contents, divStyle,\n\t\t\tdocumentElement = document.documentElement;\n\n\t\t// Setup\n\t\tdocumentElement.appendChild( container );\n\n\t\tdiv.style.cssText =\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Vendor-prefix box-sizing\n\t\t\t\"-webkit-box-sizing:border-box;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\n\t\t// Support: IE<9\n\t\t// Assume reasonable values in the absence of getComputedStyle\n\t\tpixelPositionVal = boxSizingReliableVal = reliableMarginLeftVal = false;\n\t\tpixelMarginRightVal = reliableMarginRightVal = true;\n\n\t\t// Check for getComputedStyle so that this code is not run in IE<9.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tdivStyle = window.getComputedStyle( div );\n\t\t\tpixelPositionVal = ( divStyle || {} ).top !== \"1%\";\n\t\t\treliableMarginLeftVal = ( divStyle || {} ).marginLeft === \"2px\";\n\t\t\tboxSizingReliableVal = ( divStyle || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Support: Android 4.0 - 4.3 only\n\t\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\t\tdiv.style.marginRight = \"50%\";\n\t\t\tpixelMarginRightVal = ( divStyle || { marginRight: \"4px\" } ).marginRight === \"4px\";\n\n\t\t\t// Support: Android 2.3 only\n\t\t\t// Div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tcontents = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tcontents.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;-moz-box-sizing:content-box;\" +\n\t\t\t\t\"box-sizing:content-box;display:block;margin:0;border:0;padding:0\";\n\t\t\tcontents.style.marginRight = contents.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\treliableMarginRightVal =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( contents ) || {} ).marginRight );\n\n\t\t\tdiv.removeChild( contents );\n\t\t}\n\n\t\t// Support: IE6-8\n\t\t// First check that getClientRects works as expected\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.style.display = \"none\";\n\t\treliableHiddenOffsetsVal = div.getClientRects().length === 0;\n\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\tdiv.style.display = \"\";\n\t\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\t\tdiv.childNodes[ 0 ].style.borderCollapse = \"separate\";\n\t\t\tcontents = div.getElementsByTagName( \"td\" );\n\t\t\tcontents[ 0 ].style.cssText = \"margin:0;border:0;padding:0;display:none\";\n\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t\tif ( reliableHiddenOffsetsVal ) {\n\t\t\t\tcontents[ 0 ].style.display = \"\";\n\t\t\t\tcontents[ 1 ].style.display = \"none\";\n\t\t\t\treliableHiddenOffsetsVal = contents[ 0 ].offsetHeight === 0;\n\t\t\t}\n\t\t}\n\n\t\t// Teardown\n\t\tdocumentElement.removeChild( container );\n\t}\n\n} )();\n\n\nvar getStyles, curCSS,\n\trposition = /^(top|right|bottom|left)$/;\n\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\n\t\t// Support: IE<=11+, Firefox<=30+ (#15098, #14150)\n\t\t// IE throws on elements created in popups\n\t\t// FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n\t\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar width, minWidth, maxWidth, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\n\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t\t// Support: Opera 12.1x only\n\t\t// Fall back to style even without computed\n\t\t// computed is undefined for elems on document fragments\n\t\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\tret = jQuery.style( elem, name );\n\t\t}\n\n\t\tif ( computed ) {\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\"\n\t\t\t// instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values,\n\t\t\t// but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec:\n\t\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\";\n\t};\n} else if ( documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, computed ) {\n\t\tvar left, rs, rsLeft, ret,\n\t\t\tstyle = elem.style;\n\n\t\tcomputed = computed || getStyles( elem );\n\t\tret = computed ? computed[ name ] : undefined;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are\n\t\t// proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it\n\t\t// might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\t// Support: IE\n\t\t// IE returns zIndex value as an integer.\n\t\treturn ret === undefined ?\n\t\t\tret :\n\t\t\tret + \"\" || \"auto\";\n\t};\n}\n\n\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\n\t// Define the hook, we'll check on the first run if it's really needed.\n\treturn {\n\t\tget: function() {\n\t\t\tif ( conditionFn() ) {\n\n\t\t\t\t// Hook not needed (or it's not possible to use it due\n\t\t\t\t// to missing dependency), remove it.\n\t\t\t\tdelete this.get;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Hook needed; redefine it so that the support test is not executed again.\n\t\t\treturn ( this.get = hookFn ).apply( this, arguments );\n\t\t}\n\t};\n}\n\n\nvar\n\n\t\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/i,\n\n\t// swappable if display is none or starts with table except\n\t// \"table\", \"table-cell\", or \"table-caption\"\n\t// see here for display values:\n\t// https://developer.mozilla.org/en-US/docs/CSS/display\n\trdisplayswap = /^(none|table(?!-c[ea]).+)/,\n\trnumsplit = new RegExp( \"^(\" + pnum + \")(.*)$\", \"i\" ),\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: \"0\",\n\t\tfontWeight: \"400\"\n\t},\n\n\tcssPrefixes = [ \"Webkit\", \"O\", \"Moz\", \"ms\" ],\n\temptyStyle = document.createElement( \"div\" ).style;\n\n\n// return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\n\t\treturn name;\n\t}\n\n\t// check for vendor prefixed names\n\tvar capName = name.charAt( 0 ).toUpperCase() + name.slice( 1 ),\n\t\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction showHide( elements, show ) {\n\tvar display, elem, hidden,\n\t\tvalues = [],\n\t\tindex = 0,\n\t\tlength = elements.length;\n\n\tfor ( ; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tvalues[ index ] = jQuery._data( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\n\t\t\t// Reset the inline display of this element to learn if it is\n\t\t\t// being hidden by cascaded rules or not\n\t\t\tif ( !values[ index ] && display === \"none\" ) {\n\t\t\t\telem.style.display = \"\";\n\t\t\t}\n\n\t\t\t// Set elements which have been overridden with display: none\n\t\t\t// in a stylesheet to whatever the default browser style is\n\t\t\t// for such an element\n\t\t\tif ( elem.style.display === \"\" && isHidden( elem ) ) {\n\t\t\t\tvalues[ index ] =\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", defaultDisplay( elem.nodeName ) );\n\t\t\t}\n\t\t} else {\n\t\t\thidden = isHidden( elem );\n\n\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\tjQuery._data(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Set the display of most of the elements in a second loop\n\t// to avoid the constant reflow\n\tfor ( index = 0; index < length; index++ ) {\n\t\telem = elements[ index ];\n\t\tif ( !elem.style ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( !show || elem.style.display === \"none\" || elem.style.display === \"\" ) {\n\t\t\telem.style.display = show ? values[ index ] || \"\" : \"none\";\n\t\t}\n\t}\n\n\treturn elements;\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\tvar matches = rnumsplit.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\n\t\t// Otherwise initialize for horizontal or vertical properties\n\t\tname === \"width\" ? 1 : 0,\n\n\t\tval = 0;\n\n\tfor ( ; i < 4; i += 2 ) {\n\n\t\t// both box models exclude margin, so add it if we want it\n\t\tif ( extra === \"margin\" ) {\n\t\t\tval += jQuery.css( elem, extra + cssExpand[ i ], true, styles );\n\t\t}\n\n\t\tif ( isBorderBox ) {\n\n\t\t\t// border-box includes padding, so remove it if we want content\n\t\t\tif ( extra === \"content\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\t\t\t}\n\n\t\t\t// at this point, extra isn't border nor margin, so remove border\n\t\t\tif ( extra !== \"margin\" ) {\n\t\t\t\tval -= jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t} else {\n\n\t\t\t// at this point, extra isn't content, so add padding\n\t\t\tval += jQuery.css( elem, \"padding\" + cssExpand[ i ], true, styles );\n\n\t\t\t// at this point, extra isn't content nor padding, so add border\n\t\t\tif ( extra !== \"padding\" ) {\n\t\t\t\tval += jQuery.css( elem, \"border\" + cssExpand[ i ] + \"Width\", true, styles );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn val;\n}\n\nfunction getWidthOrHeight( elem, name, extra ) {\n\n\t// Start with offset property, which is equivalent to the border-box value\n\tvar valueIsBorderBox = true,\n\t\tval = name === \"width\" ? elem.offsetWidth : elem.offsetHeight,\n\t\tstyles = getStyles( elem ),\n\t\tisBorderBox = support.boxSizing &&\n\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\";\n\n\t// some non-html elements return undefined for offsetWidth, so check for null/undefined\n\t// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285\n\t// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668\n\tif ( val <= 0 || val == null ) {\n\n\t\t// Fall back to computed then uncomputed css if necessary\n\t\tval = curCSS( elem, name, styles );\n\t\tif ( val < 0 || val == null ) {\n\t\t\tval = elem.style[ name ];\n\t\t}\n\n\t\t// Computed unit is not pixels. Stop here and return.\n\t\tif ( rnumnonpx.test( val ) ) {\n\t\t\treturn val;\n\t\t}\n\n\t\t// we need the check for style in case a browser which returns unreliable values\n\t\t// for getComputedStyle silently falls back to the reliable elem.style\n\t\tvalueIsBorderBox = isBorderBox &&\n\t\t\t( support.boxSizingReliable() || val === elem.style[ name ] );\n\n\t\t// Normalize \"\", auto, and prepare for extra\n\t\tval = parseFloat( val ) || 0;\n\t}\n\n\t// use the active box-sizing model to add/subtract irrelevant styles\n\treturn ( val +\n\t\taugmentWidthOrHeight(\n\t\t\telem,\n\t\t\tname,\n\t\t\textra || ( isBorderBox ? \"border\" : \"content\" ),\n\t\t\tvalueIsBorderBox,\n\t\t\tstyles\n\t\t)\n\t) + \"px\";\n}\n\njQuery.extend( {\n\n\t// Add in style property hooks for overriding the default\n\t// behavior of getting and setting a style property\n\tcssHooks: {\n\t\topacity: {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\n\t\t\t\t\t// We should always get a number back from opacity\n\t\t\t\t\tvar ret = curCSS( elem, \"opacity\" );\n\t\t\t\t\treturn ret === \"\" ? \"1\" : ret;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t// Don't automatically add \"px\" to these possibly-unitless properties\n\tcssNumber: {\n\t\t\"animationIterationCount\": true,\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"flexGrow\": true,\n\t\t\"flexShrink\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": true,\n\t\t\"order\": true,\n\t\t\"orphans\": true,\n\t\t\"widows\": true,\n\t\t\"zIndex\": true,\n\t\t\"zoom\": true\n\t},\n\n\t// Add in properties whose names you wish to fix before\n\t// setting or getting the value\n\tcssProps: {\n\n\t\t// normalize float css property\n\t\t\"float\": support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\n\n\t\t// Don't set styles on text and comment nodes\n\t\tif ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Make sure that we're working with the right name\n\t\tvar ret, type, hooks,\n\t\t\torigName = jQuery.camelCase( name ),\n\t\t\tstyle = elem.style;\n\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// Check if we're setting a value\n\t\tif ( value !== undefined ) {\n\t\t\ttype = typeof value;\n\n\t\t\t// Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\t\t\tif ( type === \"string\" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\n\t\t\t\t// Fixes bug #9237\n\t\t\t\ttype = \"number\";\n\t\t\t}\n\n\t\t\t// Make sure that null and NaN values aren't set. See: #7116\n\t\t\tif ( value == null || value !== value ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"px\" );\n\t\t\t}\n\n\t\t\t// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight\n\t\t\t// (for every problematic property) identical functions\n\t\t\tif ( !support.clearCloneStyle && value === \"\" && name.indexOf( \"background\" ) === 0 ) {\n\t\t\t\tstyle[ name ] = \"inherit\";\n\t\t\t}\n\n\t\t\t// If a hook was provided, use that value, otherwise just set the specified value\n\t\t\tif ( !hooks || !( \"set\" in hooks ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\t// Support: IE\n\t\t\t\t// Swallow errors from 'invalid' CSS values (#5509)\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch ( e ) {}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\t// Otherwise just get the value from the style object\n\t\t\treturn style[ name ];\n\t\t}\n\t},\n\n\tcss: function( elem, name, extra, styles ) {\n\t\tvar num, val, hooks,\n\t\t\torigName = jQuery.camelCase( name );\n\n\t\t// Make sure that we're working with the right name\n\t\tname = jQuery.cssProps[ origName ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );\n\n\t\t// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\n\t\thooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];\n\n\t\t// If a hook was provided get the computed value from there\n\t\tif ( hooks && \"get\" in hooks ) {\n\t\t\tval = hooks.get( elem, true, extra );\n\t\t}\n\n\t\t// Otherwise, if a way to get the computed value exists, use that\n\t\tif ( val === undefined ) {\n\t\t\tval = curCSS( elem, name, styles );\n\t\t}\n\n\t\t//convert \"normal\" to computed value\n\t\tif ( val === \"normal\" && name in cssNormalTransform ) {\n\t\t\tval = cssNormalTransform[ name ];\n\t\t}\n\n\t\t// Return, converting to number if forced or a qualifier was provided and val looks numeric\n\t\tif ( extra === \"\" || extra ) {\n\t\t\tnum = parseFloat( val );\n\t\t\treturn extra === true || isFinite( num ) ? num || 0 : val;\n\t\t}\n\t\treturn val;\n\t}\n} );\n\njQuery.each( [ \"height\", \"width\" ], function( i, name ) {\n\tjQuery.cssHooks[ name ] = {\n\t\tget: function( elem, computed, extra ) {\n\t\t\tif ( computed ) {\n\n\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn rdisplayswap.test( jQuery.css( elem, \"display\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t\tgetWidthOrHeight( elem, name, extra );\n\t\t\t}\n\t\t},\n\n\t\tset: function( elem, value, extra ) {\n\t\t\tvar styles = extra && getStyles( elem );\n\t\t\treturn setPositiveNumber( elem, value, extra ?\n\t\t\t\taugmentWidthOrHeight(\n\t\t\t\t\telem,\n\t\t\t\t\tname,\n\t\t\t\t\textra,\n\t\t\t\t\tsupport.boxSizing &&\n\t\t\t\t\t\tjQuery.css( elem, \"boxSizing\", false, styles ) === \"border-box\",\n\t\t\t\t\tstyles\n\t\t\t\t) : 0\n\t\t\t);\n\t\t}\n\t};\n} );\n\nif ( !support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( ( computed && elem.currentStyle ?\n\t\t\t\telem.currentStyle.filter :\n\t\t\t\telem.style.filter ) || \"\" ) ?\n\t\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist -\n\t\t\t// attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule\n\t\t\t\t// or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\njQuery.cssHooks.marginRight = addGetHookIf( support.reliableMarginRight,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t}\n\t}\n);\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn (\n\t\t\t\tparseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\n\t\t\t\t// Support: IE<=11+\n\t\t\t\t// Running getBoundingClientRect on a disconnected node in IE throws an error\n\t\t\t\t// Support: IE8 only\n\t\t\t\t// getClientRects() errors on disconnected elems\n\t\t\t\t( jQuery.contains( elem.ownerDocument, elem ) ?\n\t\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t\t} ) :\n\t\t\t\t\t0\n\t\t\t\t)\n\t\t\t) + \"px\";\n\t\t}\n\t}\n);\n\n// These hooks are used by animate to expand properties\njQuery.each( {\n\tmargin: \"\",\n\tpadding: \"\",\n\tborder: \"Width\"\n}, function( prefix, suffix ) {\n\tjQuery.cssHooks[ prefix + suffix ] = {\n\t\texpand: function( value ) {\n\t\t\tvar i = 0,\n\t\t\t\texpanded = {},\n\n\t\t\t\t// assumes a single number if not a string\n\t\t\t\tparts = typeof value === \"string\" ? value.split( \" \" ) : [ value ];\n\n\t\t\tfor ( ; i < 4; i++ ) {\n\t\t\t\texpanded[ prefix + cssExpand[ i ] + suffix ] =\n\t\t\t\t\tparts[ i ] || parts[ i - 2 ] || parts[ 0 ];\n\t\t\t}\n\n\t\t\treturn expanded;\n\t\t}\n\t};\n\n\tif ( !rmargin.test( prefix ) ) {\n\t\tjQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;\n\t}\n} );\n\njQuery.fn.extend( {\n\tcss: function( name, value ) {\n\t\treturn access( this, function( elem, name, value ) {\n\t\t\tvar styles, len,\n\t\t\t\tmap = {},\n\t\t\t\ti = 0;\n\n\t\t\tif ( jQuery.isArray( name ) ) {\n\t\t\t\tstyles = getStyles( elem );\n\t\t\t\tlen = name.length;\n\n\t\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t\tmap[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );\n\t\t\t\t}\n\n\t\t\t\treturn map;\n\t\t\t}\n\n\t\t\treturn value !== undefined ?\n\t\t\t\tjQuery.style( elem, name, value ) :\n\t\t\t\tjQuery.css( elem, name );\n\t\t}, name, value, arguments.length > 1 );\n\t},\n\tshow: function() {\n\t\treturn showHide( this, true );\n\t},\n\thide: function() {\n\t\treturn showHide( this );\n\t},\n\ttoggle: function( state ) {\n\t\tif ( typeof state === \"boolean\" ) {\n\t\t\treturn state ? this.show() : this.hide();\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tif ( isHidden( this ) ) {\n\t\t\t\tjQuery( this ).show();\n\t\t\t} else {\n\t\t\t\tjQuery( this ).hide();\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\nfunction Tween( elem, options, prop, end, easing ) {\n\treturn new Tween.prototype.init( elem, options, prop, end, easing );\n}\njQuery.Tween = Tween;\n\nTween.prototype = {\n\tconstructor: Tween,\n\tinit: function( elem, options, prop, end, easing, unit ) {\n\t\tthis.elem = elem;\n\t\tthis.prop = prop;\n\t\tthis.easing = easing || jQuery.easing._default;\n\t\tthis.options = options;\n\t\tthis.start = this.now = this.cur();\n\t\tthis.end = end;\n\t\tthis.unit = unit || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\t},\n\tcur: function() {\n\t\tvar hooks = Tween.propHooks[ this.prop ];\n\n\t\treturn hooks && hooks.get ?\n\t\t\thooks.get( this ) :\n\t\t\tTween.propHooks._default.get( this );\n\t},\n\trun: function( percent ) {\n\t\tvar eased,\n\t\t\thooks = Tween.propHooks[ this.prop ];\n\n\t\tif ( this.options.duration ) {\n\t\t\tthis.pos = eased = jQuery.easing[ this.easing ](\n\t\t\t\tpercent, this.options.duration * percent, 0, 1, this.options.duration\n\t\t\t);\n\t\t} else {\n\t\t\tthis.pos = eased = percent;\n\t\t}\n\t\tthis.now = ( this.end - this.start ) * eased + this.start;\n\n\t\tif ( this.options.step ) {\n\t\t\tthis.options.step.call( this.elem, this.now, this );\n\t\t}\n\n\t\tif ( hooks && hooks.set ) {\n\t\t\thooks.set( this );\n\t\t} else {\n\t\t\tTween.propHooks._default.set( this );\n\t\t}\n\t\treturn this;\n\t}\n};\n\nTween.prototype.init.prototype = Tween.prototype;\n\nTween.propHooks = {\n\t_default: {\n\t\tget: function( tween ) {\n\t\t\tvar result;\n\n\t\t\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {\n\t\t\t\treturn tween.elem[ tween.prop ];\n\t\t\t}\n\n\t\t\t// passing an empty string as a 3rd parameter to .css will automatically\n\t\t\t// attempt a parseFloat and fallback to a string if the parse fails\n\t\t\t// so, simple values such as \"10px\" are parsed to Float.\n\t\t\t// complex values such as \"rotate(1rad)\" are returned as is.\n\t\t\tresult = jQuery.css( tween.elem, tween.prop, \"\" );\n\n\t\t\t// Empty strings, null, undefined and \"auto\" are converted to 0.\n\t\t\treturn !result || result === \"auto\" ? 0 : result;\n\t\t},\n\t\tset: function( tween ) {\n\n\t\t\t// use step hook for back compat - use cssHook if its there - use .style if its\n\t\t\t// available and use plain properties where available\n\t\t\tif ( jQuery.fx.step[ tween.prop ] ) {\n\t\t\t\tjQuery.fx.step[ tween.prop ]( tween );\n\t\t\t} else if ( tween.elem.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.cssHooks[ tween.prop ] ) ) {\n\t\t\t\tjQuery.style( tween.elem, tween.prop, tween.now + tween.unit );\n\t\t\t} else {\n\t\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t\t}\n\t\t}\n\t}\n};\n\n// Support: IE <=9\n// Panic based approach to setting things on disconnected nodes\n\nTween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n\tset: function( tween ) {\n\t\tif ( tween.elem.nodeType && tween.elem.parentNode ) {\n\t\t\ttween.elem[ tween.prop ] = tween.now;\n\t\t}\n\t}\n};\n\njQuery.easing = {\n\tlinear: function( p ) {\n\t\treturn p;\n\t},\n\tswing: function( p ) {\n\t\treturn 0.5 - Math.cos( p * Math.PI ) / 2;\n\t},\n\t_default: \"swing\"\n};\n\njQuery.fx = Tween.prototype.init;\n\n// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\n\n\n\nvar\n\tfxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( function() {\n\t\tfxNow = undefined;\n\t} );\n\treturn ( fxNow = jQuery.now() );\n}\n\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, step value is 2 to skip over Left and Right\n\tincludeWidth = includeWidth ? 1 : 0;\n\tfor ( ; i < 4 ; i += 2 - includeWidth ) {\n\t\twhich = cssExpand[ i ];\n\t\tattrs[ \"margin\" + which ] = attrs[ \"padding\" + which ] = type;\n\t}\n\n\tif ( includeWidth ) {\n\t\tattrs.opacity = attrs.width = type;\n\t}\n\n\treturn attrs;\n}\n\nfunction createTween( value, prop, animation ) {\n\tvar tween,\n\t\tcollection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ \"*\" ] ),\n\t\tindex = 0,\n\t\tlength = collection.length;\n\tfor ( ; index < length; index++ ) {\n\t\tif ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {\n\n\t\t\t// we're done with this property\n\t\t\treturn tween;\n\t\t}\n\t}\n}\n\nfunction defaultPrefilter( elem, props, opts ) {\n\t/* jshint validthis: true */\n\tvar prop, value, toggle, tween, hooks, oldfire, display, checkDisplay,\n\t\tanim = this,\n\t\torig = {},\n\t\tstyle = elem.style,\n\t\thidden = elem.nodeType && isHidden( elem ),\n\t\tdataShow = jQuery._data( elem, \"fxshow\" );\n\n\t// handle queue: false promises\n\tif ( !opts.queue ) {\n\t\thooks = jQuery._queueHooks( elem, \"fx\" );\n\t\tif ( hooks.unqueued == null ) {\n\t\t\thooks.unqueued = 0;\n\t\t\toldfire = hooks.empty.fire;\n\t\t\thooks.empty.fire = function() {\n\t\t\t\tif ( !hooks.unqueued ) {\n\t\t\t\t\toldfire();\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\thooks.unqueued++;\n\n\t\tanim.always( function() {\n\n\t\t\t// doing this makes sure that the complete handler will be called\n\t\t\t// before this completes\n\t\t\tanim.always( function() {\n\t\t\t\thooks.unqueued--;\n\t\t\t\tif ( !jQuery.queue( elem, \"fx\" ).length ) {\n\t\t\t\t\thooks.empty.fire();\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// height/width overflow pass\n\tif ( elem.nodeType === 1 && ( \"height\" in props || \"width\" in props ) ) {\n\n\t\t// Make sure that nothing sneaks out\n\t\t// Record all 3 overflow attributes because IE does not\n\t\t// change the overflow attribute when overflowX and\n\t\t// overflowY are set to the same value\n\t\topts.overflow = [ style.overflow, style.overflowX, style.overflowY ];\n\n\t\t// Set display property to inline-block for height/width\n\t\t// animations on inline elements that are having width/height animated\n\t\tdisplay = jQuery.css( elem, \"display\" );\n\n\t\t// Test default display if display is currently \"none\"\n\t\tcheckDisplay = display === \"none\" ?\n\t\t\tjQuery._data( elem, \"olddisplay\" ) || defaultDisplay( elem.nodeName ) : display;\n\n\t\tif ( checkDisplay === \"inline\" && jQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !support.inlineBlockNeedsLayout || defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !support.shrinkWrapBlocks() ) {\n\t\t\tanim.always( function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t} );\n\t\t}\n\t}\n\n\t// show/hide pass\n\tfor ( prop in props ) {\n\t\tvalue = props[ prop ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ prop ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\n\t\t\t\t// If there is dataShow left over from a stopped hide or show\n\t\t\t\t// and we are going to proceed with show, we should pretend to be hidden\n\t\t\t\tif ( value === \"show\" && dataShow && dataShow[ prop ] !== undefined ) {\n\t\t\t\t\thidden = true;\n\t\t\t\t} else {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t}\n\t\t\torig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );\n\n\t\t// Any non-fx value stops us from restoring the original display value\n\t\t} else {\n\t\t\tdisplay = undefined;\n\t\t}\n\t}\n\n\tif ( !jQuery.isEmptyObject( orig ) ) {\n\t\tif ( dataShow ) {\n\t\t\tif ( \"hidden\" in dataShow ) {\n\t\t\t\thidden = dataShow.hidden;\n\t\t\t}\n\t\t} else {\n\t\t\tdataShow = jQuery._data( elem, \"fxshow\", {} );\n\t\t}\n\n\t\t// store state if its toggle - enables .stop().toggle() to \"reverse\"\n\t\tif ( toggle ) {\n\t\t\tdataShow.hidden = !hidden;\n\t\t}\n\t\tif ( hidden ) {\n\t\t\tjQuery( elem ).show();\n\t\t} else {\n\t\t\tanim.done( function() {\n\t\t\t\tjQuery( elem ).hide();\n\t\t\t} );\n\t\t}\n\t\tanim.done( function() {\n\t\t\tvar prop;\n\t\t\tjQuery._removeData( elem, \"fxshow\" );\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tjQuery.style( elem, prop, orig[ prop ] );\n\t\t\t}\n\t\t} );\n\t\tfor ( prop in orig ) {\n\t\t\ttween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );\n\n\t\t\tif ( !( prop in dataShow ) ) {\n\t\t\t\tdataShow[ prop ] = tween.start;\n\t\t\t\tif ( hidden ) {\n\t\t\t\t\ttween.end = tween.start;\n\t\t\t\t\ttween.start = prop === \"width\" || prop === \"height\" ? 1 : 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t// If this is a noop like .hide().hide(), restore an overwritten display value\n\t} else if ( ( display === \"none\" ? defaultDisplay( elem.nodeName ) : display ) === \"inline\" ) {\n\t\tstyle.display = display;\n\t}\n}\n\nfunction propFilter( props, specialEasing ) {\n\tvar index, name, easing, value, hooks;\n\n\t// camelCase, specialEasing and expand cssHook pass\n\tfor ( index in props ) {\n\t\tname = jQuery.camelCase( index );\n\t\teasing = specialEasing[ name ];\n\t\tvalue = props[ index ];\n\t\tif ( jQuery.isArray( value ) ) {\n\t\t\teasing = value[ 1 ];\n\t\t\tvalue = props[ index ] = value[ 0 ];\n\t\t}\n\n\t\tif ( index !== name ) {\n\t\t\tprops[ name ] = value;\n\t\t\tdelete props[ index ];\n\t\t}\n\n\t\thooks = jQuery.cssHooks[ name ];\n\t\tif ( hooks && \"expand\" in hooks ) {\n\t\t\tvalue = hooks.expand( value );\n\t\t\tdelete props[ name ];\n\n\t\t\t// not quite $.extend, this wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above because we have the correct \"name\"\n\t\t\tfor ( index in value ) {\n\t\t\t\tif ( !( index in props ) ) {\n\t\t\t\t\tprops[ index ] = value[ index ];\n\t\t\t\t\tspecialEasing[ index ] = easing;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tspecialEasing[ name ] = easing;\n\t\t}\n\t}\n}\n\nfunction Animation( elem, properties, options ) {\n\tvar result,\n\t\tstopped,\n\t\tindex = 0,\n\t\tlength = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\n\t\t\t// don't match elem in the :animated selector\n\t\t\tdelete tick.elem;\n\t\t} ),\n\t\ttick = function() {\n\t\t\tif ( stopped ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tvar currentTime = fxNow || createFxNow(),\n\t\t\t\tremaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n\t\t\t\ttemp = remaining / animation.duration || 0,\n\t\t\t\tpercent = 1 - temp,\n\t\t\t\tindex = 0,\n\t\t\t\tlength = animation.tweens.length;\n\n\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\tanimation.tweens[ index ].run( percent );\n\t\t\t}\n\n\t\t\tdeferred.notifyWith( elem, [ animation, percent, remaining ] );\n\n\t\t\tif ( percent < 1 && length ) {\n\t\t\t\treturn remaining;\n\t\t\t} else {\n\t\t\t\tdeferred.resolveWith( elem, [ animation ] );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t},\n\t\tanimation = deferred.promise( {\n\t\t\telem: elem,\n\t\t\tprops: jQuery.extend( {}, properties ),\n\t\t\topts: jQuery.extend( true, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, options ),\n\t\t\toriginalProperties: properties,\n\t\t\toriginalOptions: options,\n\t\t\tstartTime: fxNow || createFxNow(),\n\t\t\tduration: options.duration,\n\t\t\ttweens: [],\n\t\t\tcreateTween: function( prop, end ) {\n\t\t\t\tvar tween = jQuery.Tween( elem, animation.opts, prop, end,\n\t\t\t\t\t\tanimation.opts.specialEasing[ prop ] || animation.opts.easing );\n\t\t\t\tanimation.tweens.push( tween );\n\t\t\t\treturn tween;\n\t\t\t},\n\t\t\tstop: function( gotoEnd ) {\n\t\t\t\tvar index = 0,\n\n\t\t\t\t\t// if we are going to the end, we want to run all the tweens\n\t\t\t\t\t// otherwise we skip this part\n\t\t\t\t\tlength = gotoEnd ? animation.tweens.length : 0;\n\t\t\t\tif ( stopped ) {\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t\tstopped = true;\n\t\t\t\tfor ( ; index < length ; index++ ) {\n\t\t\t\t\tanimation.tweens[ index ].run( 1 );\n\t\t\t\t}\n\n\t\t\t\t// resolve when we played the last frame\n\t\t\t\t// otherwise, reject\n\t\t\t\tif ( gotoEnd ) {\n\t\t\t\t\tdeferred.notifyWith( elem, [ animation, 1, 0 ] );\n\t\t\t\t\tdeferred.resolveWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t} else {\n\t\t\t\t\tdeferred.rejectWith( elem, [ animation, gotoEnd ] );\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t}\n\t\t} ),\n\t\tprops = animation.props;\n\n\tpropFilter( props, animation.opts.specialEasing );\n\n\tfor ( ; index < length ; index++ ) {\n\t\tresult = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\n\t\t\treturn result;\n\t\t}\n\t}\n\n\tjQuery.map( props, createTween, animation );\n\n\tif ( jQuery.isFunction( animation.opts.start ) ) {\n\t\tanimation.opts.start.call( elem, animation );\n\t}\n\n\tjQuery.fx.timer(\n\t\tjQuery.extend( tick, {\n\t\t\telem: elem,\n\t\t\tanim: animation,\n\t\t\tqueue: animation.opts.queue\n\t\t} )\n\t);\n\n\t// attach callbacks from options\n\treturn animation.progress( animation.opts.progress )\n\t\t.done( animation.opts.done, animation.opts.complete )\n\t\t.fail( animation.opts.fail )\n\t\t.always( animation.opts.always );\n}\n\njQuery.Animation = jQuery.extend( Animation, {\n\n\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\n\n\ttweener: function( props, callback ) {\n\t\tif ( jQuery.isFunction( props ) ) {\n\t\t\tcallback = props;\n\t\t\tprops = [ \"*\" ];\n\t\t} else {\n\t\t\tprops = props.match( rnotwhite );\n\t\t}\n\n\t\tvar prop,\n\t\t\tindex = 0,\n\t\t\tlength = props.length;\n\n\t\tfor ( ; index < length ; index++ ) {\n\t\t\tprop = props[ index ];\n\t\t\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.push( callback );\n\t\t}\n\t}\n} );\n\njQuery.speed = function( speed, easing, fn ) {\n\tvar opt = speed && typeof speed === \"object\" ? jQuery.extend( {}, speed ) : {\n\t\tcomplete: fn || !fn && easing ||\n\t\t\tjQuery.isFunction( speed ) && speed,\n\t\tduration: speed,\n\t\teasing: fn && easing || easing && !jQuery.isFunction( easing ) && easing\n\t};\n\n\topt.duration = jQuery.fx.off ? 0 : typeof opt.duration === \"number\" ? opt.duration :\n\t\topt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;\n\n\t// normalize opt.queue - true/undefined/null -> \"fx\"\n\tif ( opt.queue == null || opt.queue === true ) {\n\t\topt.queue = \"fx\";\n\t}\n\n\t// Queueing\n\topt.old = opt.complete;\n\n\topt.complete = function() {\n\t\tif ( jQuery.isFunction( opt.old ) ) {\n\t\t\topt.old.call( this );\n\t\t}\n\n\t\tif ( opt.queue ) {\n\t\t\tjQuery.dequeue( this, opt.queue );\n\t\t}\n\t};\n\n\treturn opt;\n};\n\njQuery.fn.extend( {\n\tfadeTo: function( speed, to, easing, callback ) {\n\n\t\t// show any hidden elements after setting opacity to 0\n\t\treturn this.filter( isHidden ).css( \"opacity\", 0 ).show()\n\n\t\t\t// animate to the value specified\n\t\t\t.end().animate( { opacity: to }, speed, easing, callback );\n\t},\n\tanimate: function( prop, speed, easing, callback ) {\n\t\tvar empty = jQuery.isEmptyObject( prop ),\n\t\t\toptall = jQuery.speed( speed, easing, callback ),\n\t\t\tdoAnimation = function() {\n\n\t\t\t\t// Operate on a copy of prop so per-property easing won't be lost\n\t\t\t\tvar anim = Animation( this, jQuery.extend( {}, prop ), optall );\n\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( this, \"finish\" ) ) {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t}\n\t\t\t};\n\t\t\tdoAnimation.finish = doAnimation;\n\n\t\treturn empty || optall.queue === false ?\n\t\t\tthis.each( doAnimation ) :\n\t\t\tthis.queue( optall.queue, doAnimation );\n\t},\n\tstop: function( type, clearQueue, gotoEnd ) {\n\t\tvar stopQueue = function( hooks ) {\n\t\t\tvar stop = hooks.stop;\n\t\t\tdelete hooks.stop;\n\t\t\tstop( gotoEnd );\n\t\t};\n\n\t\tif ( typeof type !== \"string\" ) {\n\t\t\tgotoEnd = clearQueue;\n\t\t\tclearQueue = type;\n\t\t\ttype = undefined;\n\t\t}\n\t\tif ( clearQueue && type !== false ) {\n\t\t\tthis.queue( type || \"fx\", [] );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar dequeue = true,\n\t\t\t\tindex = type != null && type + \"queueHooks\",\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tdata = jQuery._data( this );\n\n\t\t\tif ( index ) {\n\t\t\t\tif ( data[ index ] && data[ index ].stop ) {\n\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor ( index in data ) {\n\t\t\t\t\tif ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {\n\t\t\t\t\t\tstopQueue( data[ index ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\n\t\t\t\t\ttimers[ index ].anim.stop( gotoEnd );\n\t\t\t\t\tdequeue = false;\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// start the next in the queue if the last step wasn't forced\n\t\t\t// timers currently will call their complete callbacks, which will dequeue\n\t\t\t// but only if they were gotoEnd\n\t\t\tif ( dequeue || !gotoEnd ) {\n\t\t\t\tjQuery.dequeue( this, type );\n\t\t\t}\n\t\t} );\n\t},\n\tfinish: function( type ) {\n\t\tif ( type !== false ) {\n\t\t\ttype = type || \"fx\";\n\t\t}\n\t\treturn this.each( function() {\n\t\t\tvar index,\n\t\t\t\tdata = jQuery._data( this ),\n\t\t\t\tqueue = data[ type + \"queue\" ],\n\t\t\t\thooks = data[ type + \"queueHooks\" ],\n\t\t\t\ttimers = jQuery.timers,\n\t\t\t\tlength = queue ? queue.length : 0;\n\n\t\t\t// enable finishing flag on private data\n\t\t\tdata.finish = true;\n\n\t\t\t// empty the queue first\n\t\t\tjQuery.queue( this, type, [] );\n\n\t\t\tif ( hooks && hooks.stop ) {\n\t\t\t\thooks.stop.call( this, true );\n\t\t\t}\n\n\t\t\t// look for any active animations, and finish them\n\t\t\tfor ( index = timers.length; index--; ) {\n\t\t\t\tif ( timers[ index ].elem === this && timers[ index ].queue === type ) {\n\t\t\t\t\ttimers[ index ].anim.stop( true );\n\t\t\t\t\ttimers.splice( index, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// look for any animations in the old queue and finish them\n\t\t\tfor ( index = 0; index < length; index++ ) {\n\t\t\t\tif ( queue[ index ] && queue[ index ].finish ) {\n\t\t\t\t\tqueue[ index ].finish.call( this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// turn off finishing flag\n\t\t\tdelete data.finish;\n\t\t} );\n\t}\n} );\n\njQuery.each( [ \"toggle\", \"show\", \"hide\" ], function( i, name ) {\n\tvar cssFn = jQuery.fn[ name ];\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn speed == null || typeof speed === \"boolean\" ?\n\t\t\tcssFn.apply( this, arguments ) :\n\t\t\tthis.animate( genFx( name, true ), speed, easing, callback );\n\t};\n} );\n\n// Generate shortcuts for custom animations\njQuery.each( {\n\tslideDown: genFx( \"show\" ),\n\tslideUp: genFx( \"hide\" ),\n\tslideToggle: genFx( \"toggle\" ),\n\tfadeIn: { opacity: \"show\" },\n\tfadeOut: { opacity: \"hide\" },\n\tfadeToggle: { opacity: \"toggle\" }\n}, function( name, props ) {\n\tjQuery.fn[ name ] = function( speed, easing, callback ) {\n\t\treturn this.animate( props, speed, easing, callback );\n\t};\n} );\n\njQuery.timers = [];\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\n\n\tfxNow = jQuery.now();\n\n\tfor ( ; i < timers.length; i++ ) {\n\t\ttimer = timers[ i ];\n\n\t\t// Checks the timer has not already been removed\n\t\tif ( !timer() && timers[ i ] === timer ) {\n\t\t\ttimers.splice( i--, 1 );\n\t\t}\n\t}\n\n\tif ( !timers.length ) {\n\t\tjQuery.fx.stop();\n\t}\n\tfxNow = undefined;\n};\n\njQuery.fx.timer = function( timer ) {\n\tjQuery.timers.push( timer );\n\tif ( timer() ) {\n\t\tjQuery.fx.start();\n\t} else {\n\t\tjQuery.timers.pop();\n\t}\n};\n\njQuery.fx.interval = 13;\n\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\njQuery.fn.delay = function( time, type ) {\n\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\ttype = type || \"fx\";\n\n\treturn this.queue( type, function( next, hooks ) {\n\t\tvar timeout = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( timeout );\n\t\t};\n\t} );\n};\n\n\n( function() {\n\tvar a,\n\t\tinput = document.createElement( \"input\" ),\n\t\tdiv = document.createElement( \"div\" ),\n\t\tselect = document.createElement( \"select\" ),\n\t\topt = select.appendChild( document.createElement( \"option\" ) );\n\n\t// Setup\n\tdiv = document.createElement( \"div\" );\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// Support: Windows Web Apps (WWA)\n\t// `type` must use .setAttribute for WWA (#14901)\n\tinput.setAttribute( \"type\", \"checkbox\" );\n\tdiv.appendChild( input );\n\n\ta = div.getElementsByTagName( \"a\" )[ 0 ];\n\n\t// First batch of tests.\n\ta.style.cssText = \"top:1px\";\n\n\t// Test setAttribute on camelCase class.\n\t// If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\tsupport.getSetAttribute = div.className !== \"t\";\n\n\t// Get the style information from getAttribute\n\t// (IE uses .cssText instead)\n\tsupport.style = /top/.test( a.getAttribute( \"style\" ) );\n\n\t// Make sure that URLs aren't manipulated\n\t// (IE normalizes it by default)\n\tsupport.hrefNormalized = a.getAttribute( \"href\" ) === \"/a\";\n\n\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\tsupport.checkOn = !!input.value;\n\n\t// Make sure that a selected-by-default option has a working selected property.\n\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\tsupport.optSelected = opt.selected;\n\n\t// Tests for enctype support on a form (#6743)\n\tsupport.enctype = !!document.createElement( \"form\" ).enctype;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE8 only\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement( \"input\" );\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n} )();\n\n\nvar rreturn = /\\r/g,\n\trspaces = /[\\x20\\t\\r\\n\\f]+/g;\n\njQuery.fn.extend( {\n\tval: function( value ) {\n\t\tvar hooks, ret, isFunction,\n\t\t\telem = this[ 0 ];\n\n\t\tif ( !arguments.length ) {\n\t\t\tif ( elem ) {\n\t\t\t\thooks = jQuery.valHooks[ elem.type ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif (\n\t\t\t\t\thooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\n\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\t\tret = elem.value;\n\n\t\t\t\treturn typeof ret === \"string\" ?\n\n\t\t\t\t\t// handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\n\t\t\t\t\t// handle cases where value is null/undef or number\n\t\t\t\t\tret == null ? \"\" : ret;\n\t\t\t}\n\n\t\t\treturn;\n\t\t}\n\n\t\tisFunction = jQuery.isFunction( value );\n\n\t\treturn this.each( function( i ) {\n\t\t\tvar val;\n\n\t\t\tif ( this.nodeType !== 1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( isFunction ) {\n\t\t\t\tval = value.call( this, i, jQuery( this ).val() );\n\t\t\t} else {\n\t\t\t\tval = value;\n\t\t\t}\n\n\t\t\t// Treat null/undefined as \"\"; convert numbers to string\n\t\t\tif ( val == null ) {\n\t\t\t\tval = \"\";\n\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\n\t\t\t} else if ( jQuery.isArray( val ) ) {\n\t\t\t\tval = jQuery.map( val, function( value ) {\n\t\t\t\t\treturn value == null ? \"\" : value + \"\";\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\thooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];\n\n\t\t\t// If set returns undefined, fall back to normal setting\n\t\t\tif ( !hooks || !( \"set\" in hooks ) || hooks.set( this, val, \"value\" ) === undefined ) {\n\t\t\t\tthis.value = val;\n\t\t\t}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tvalHooks: {\n\t\toption: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar val = jQuery.find.attr( elem, \"value\" );\n\t\t\t\treturn val != null ?\n\t\t\t\t\tval :\n\n\t\t\t\t\t// Support: IE10-11+\n\t\t\t\t\t// option.text throws exceptions (#14686, #14858)\n\t\t\t\t\t// Strip and collapse whitespace\n\t\t\t\t\t// https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n\t\t\t\t\tjQuery.trim( jQuery.text( elem ) ).replace( rspaces, \" \" );\n\t\t\t}\n\t\t},\n\t\tselect: {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar value, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tindex = elem.selectedIndex,\n\t\t\t\t\tone = elem.type === \"select-one\" || index < 0,\n\t\t\t\t\tvalues = one ? null : [],\n\t\t\t\t\tmax = one ? index + 1 : options.length,\n\t\t\t\t\ti = index < 0 ?\n\t\t\t\t\t\tmax :\n\t\t\t\t\t\tone ? index : 0;\n\n\t\t\t\t// Loop through all the selected options\n\t\t\t\tfor ( ; i < max; i++ ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\t// oldIE doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\n\t\t\t\t\t\t\t// Don't return options that are disabled or in a disabled optgroup\n\t\t\t\t\t\t\t( support.optDisabled ?\n\t\t\t\t\t\t\t\t!option.disabled :\n\t\t\t\t\t\t\t\toption.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!jQuery.nodeName( option.parentNode, \"optgroup\" ) ) ) {\n\n\t\t\t\t\t\t// Get the specific value for the option\n\t\t\t\t\t\tvalue = jQuery( option ).val();\n\n\t\t\t\t\t\t// We don't need an array for one selects\n\t\t\t\t\t\tif ( one ) {\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Multi-Selects return an array\n\t\t\t\t\t\tvalues.push( value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn values;\n\t\t\t},\n\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar optionSet, option,\n\t\t\t\t\toptions = elem.options,\n\t\t\t\t\tvalues = jQuery.makeArray( value ),\n\t\t\t\t\ti = options.length;\n\n\t\t\t\twhile ( i-- ) {\n\t\t\t\t\toption = options[ i ];\n\n\t\t\t\t\tif ( jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1 ) {\n\n\t\t\t\t\t\t// Support: IE6\n\t\t\t\t\t\t// When new option element is added to select box we need to\n\t\t\t\t\t\t// force reflow of newly added node in order to workaround delay\n\t\t\t\t\t\t// of initialization properties\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\toption.selected = optionSet = true;\n\n\t\t\t\t\t\t} catch ( _ ) {\n\n\t\t\t\t\t\t\t// Will be executed only in IE6\n\t\t\t\t\t\t\toption.scrollHeight;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\toption.selected = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Force browsers to behave consistently when non-matching value is set\n\t\t\t\tif ( !optionSet ) {\n\t\t\t\t\telem.selectedIndex = -1;\n\t\t\t\t}\n\n\t\t\t\treturn options;\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Radios and checkboxes getter/setter\njQuery.each( [ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = {\n\t\tset: function( elem, value ) {\n\t\t\tif ( jQuery.isArray( value ) ) {\n\t\t\t\treturn ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );\n\t\t\t}\n\t\t}\n\t};\n\tif ( !support.checkOn ) {\n\t\tjQuery.valHooks[ this ].get = function( elem ) {\n\t\t\treturn elem.getAttribute( \"value\" ) === null ? \"on\" : elem.value;\n\t\t};\n\t}\n} );\n\n\n\n\nvar nodeHook, boolHook,\n\tattrHandle = jQuery.expr.attrHandle,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = support.getSetAttribute,\n\tgetSetInput = support.input;\n\njQuery.fn.extend( {\n\tattr: function( name, value ) {\n\t\treturn access( this, jQuery.attr, name, value, arguments.length > 1 );\n\t},\n\n\tremoveAttr: function( name ) {\n\t\treturn this.each( function() {\n\t\t\tjQuery.removeAttr( this, name );\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tattr: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Fallback to prop when attributes are not supported\n\t\tif ( typeof elem.getAttribute === \"undefined\" ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] ||\n\t\t\t\t( jQuery.expr.match.bool.test( name ) ? boolHook : nodeHook );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\n\t},\n\n\tattrHooks: {\n\t\ttype: {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( !support.radioValue && value === \"radio\" &&\n\t\t\t\t\tjQuery.nodeName( elem, \"input\" ) ) {\n\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE8-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\n\t\t\t\t\tvar val = elem.value;\n\t\t\t\t\telem.setAttribute( \"type\", value );\n\t\t\t\t\tif ( val ) {\n\t\t\t\t\t\telem.value = val;\n\t\t\t\t\t}\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremoveAttr: function( elem, value ) {\n\t\tvar name, propName,\n\t\t\ti = 0,\n\t\t\tattrNames = value && value.match( rnotwhite );\n\n\t\tif ( attrNames && elem.nodeType === 1 ) {\n\t\t\twhile ( ( name = attrNames[ i++ ] ) ) {\n\t\t\t\tpropName = jQuery.propFix[ name ] || name;\n\n\t\t\t\t// Boolean attributes get special treatment (#10870)\n\t\t\t\tif ( jQuery.expr.match.bool.test( name ) ) {\n\n\t\t\t\t\t// Set corresponding property to false\n\t\t\t\t\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ propName ] = false;\n\n\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate)\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\n\t\t\t// Remove boolean attributes when set to false\n\t\t\tjQuery.removeAttr( elem, name );\n\t\t} else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t} else {\n\n\t\t\t// Support: IE<9\n\t\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\t\treturn name;\n\t}\n};\n\njQuery.each( jQuery.expr.match.bool.source.match( /\\w+/g ), function( i, name ) {\n\tvar getter = attrHandle[ name ] || jQuery.find.attr;\n\n\tif ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tvar ret, handle;\n\t\t\tif ( !isXML ) {\n\n\t\t\t\t// Avoid an infinite loop by temporarily removing this function from the getter\n\t\t\t\thandle = attrHandle[ name ];\n\t\t\t\tattrHandle[ name ] = ret;\n\t\t\t\tret = getter( elem, name, isXML ) != null ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t\tattrHandle[ name ] = handle;\n\t\t\t}\n\t\t\treturn ret;\n\t\t};\n\t} else {\n\t\tattrHandle[ name ] = function( elem, name, isXML ) {\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn elem[ jQuery.camelCase( \"default-\" + name ) ] ?\n\t\t\t\t\tname.toLowerCase() :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\t}\n} );\n\n// fix oldIE attroperties\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = {\n\t\tset: function( elem, value, name ) {\n\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t( ret = elem.ownerDocument.createAttribute( name ) )\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\tif ( name === \"value\" || value === elem.getAttribute( name ) ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t};\n\n\t// Some attributes are constructed with empty-string values when not defined\n\tattrHandle.id = attrHandle.name = attrHandle.coords =\n\t\tfunction( elem, name, isXML ) {\n\t\t\tvar ret;\n\t\t\tif ( !isXML ) {\n\t\t\t\treturn ( ret = elem.getAttributeNode( name ) ) && ret.value !== \"\" ?\n\t\t\t\t\tret.value :\n\t\t\t\t\tnull;\n\t\t\t}\n\t\t};\n\n\t// Fixing value retrieval on a button requires this module\n\tjQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( ret && ret.specified ) {\n\t\t\t\treturn ret.value;\n\t\t\t}\n\t\t},\n\t\tset: nodeHook.set\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each( [ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\n\nif ( !support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case sensitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n\n\n\nvar rfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i;\n\njQuery.fn.extend( {\n\tprop: function( name, value ) {\n\t\treturn access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each( function() {\n\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch ( e ) {}\n\t\t} );\n\t}\n} );\n\njQuery.extend( {\n\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\n\t\t\t// Fix name and attach hooks\n\t\t\tname = jQuery.propFix[ name ] || name;\n\t\t\thooks = jQuery.propHooks[ name ];\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\n\t}\n} );\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !support.hrefNormalized ) {\n\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each( [ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t} );\n}\n\n// Support: Safari, IE9+\n// Accessing the selectedIndex property\n// forces the browser to respect setting selected\n// on the option\n// The getter ensures a default option is selected\n// when in an optgroup\nif ( !support.optSelected ) {\n\tjQuery.propHooks.selected = {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tset: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\njQuery.each( [\n\t\"tabIndex\",\n\t\"readOnly\",\n\t\"maxLength\",\n\t\"cellSpacing\",\n\t\"cellPadding\",\n\t\"rowSpan\",\n\t\"colSpan\",\n\t\"useMap\",\n\t\"frameBorder\",\n\t\"contentEditable\"\n], function() {\n\tjQuery.propFix[ this.toLowerCase() ] = this;\n} );\n\n// IE6/7 call enctype encoding\nif ( !support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n\n\n\nvar rclass = /[\\t\\r\\n\\f]/g;\n\nfunction getClass( elem ) {\n\treturn jQuery.attr( elem, \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).addClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\t\t\t\t\t\tif ( cur.indexOf( \" \" + clazz + \" \" ) < 0 ) {\n\t\t\t\t\t\t\tcur += clazz + \" \";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tjQuery.attr( elem, \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\tremoveClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( j ) {\n\t\t\t\tjQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\n\t\t\t\t\t\t\tcur = cur.replace( \" \" + clazz + \" \", \" \" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Only assign if different to avoid unneeded rendering.\n\t\t\t\t\tfinalValue = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\tjQuery.attr( elem, \"class\", finalValue );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\ttoggleClass: function( value, stateVal ) {\n\t\tvar type = typeof value;\n\n\t\tif ( typeof stateVal === \"boolean\" && type === \"string\" ) {\n\t\t\treturn stateVal ? this.addClass( value ) : this.removeClass( value );\n\t\t}\n\n\t\tif ( jQuery.isFunction( value ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).toggleClass(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\n\t\t\t\t\t// Check each className given, space separated list\n\t\t\t\t\tif ( self.hasClass( className ) ) {\n\t\t\t\t\t\tself.removeClass( className );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tself.addClass( className );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// store className if set\n\t\t\t\t\tjQuery._data( this, \"__className__\", className );\n\t\t\t\t}\n\n\t\t\t\t// If the element has a class name or if we're passed \"false\",\n\t\t\t\t// then remove the whole classname (if there was one, the above saved it).\n\t\t\t\t// Otherwise bring back whatever was previously saved (if anything),\n\t\t\t\t// falling back to the empty string if nothing was stored.\n\t\t\t\tjQuery.attr( this, \"class\",\n\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\"\" :\n\t\t\t\t\tjQuery._data( this, \"__className__\" ) || \"\"\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t}\n} );\n\n\n\n\n// Return jQuery for attributes-only inclusion\n\n\njQuery.each( ( \"blur focus focusin focusout load resize scroll unload click dblclick \" +\n\t\"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" +\n\t\"change select submit keydown keypress keyup error contextmenu\" ).split( \" \" ),\n\tfunction( i, name ) {\n\n\t// Handle event binding\n\tjQuery.fn[ name ] = function( data, fn ) {\n\t\treturn arguments.length > 0 ?\n\t\t\tthis.on( name, null, data, fn ) :\n\t\t\tthis.trigger( name );\n\t};\n} );\n\njQuery.fn.extend( {\n\thover: function( fnOver, fnOut ) {\n\t\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n\t}\n} );\n\n\nvar location = window.location;\n\nvar nonce = jQuery.now();\n\nvar rquery = ( /\\?/ );\n\n\n\nvar rvalidtokens = /(,)|(\\[|{)|(}|])|\"(?:[^\"\\\\\\r\\n]|\\\\[\"\\\\\\/bfnrt]|\\\\u[\\da-fA-F]{4})*\"\\s*:?|true|false|null|-?(?!0\\d)\\d+(?:\\.\\d+|)(?:[eE][+-]?\\d+|)/g;\n\njQuery.parseJSON = function( data ) {\n\n\t// Attempt to parse using the native JSON parser first\n\tif ( window.JSON && window.JSON.parse ) {\n\n\t\t// Support: Android 2.3\n\t\t// Workaround failure to string-cast null input\n\t\treturn window.JSON.parse( data + \"\" );\n\t}\n\n\tvar requireNonComma,\n\t\tdepth = null,\n\t\tstr = jQuery.trim( data + \"\" );\n\n\t// Guard against invalid (and possibly dangerous) input by ensuring that nothing remains\n\t// after removing valid tokens\n\treturn str && !jQuery.trim( str.replace( rvalidtokens, function( token, comma, open, close ) {\n\n\t\t// Force termination if we see a misplaced comma\n\t\tif ( requireNonComma && comma ) {\n\t\t\tdepth = 0;\n\t\t}\n\n\t\t// Perform no more replacements after returning to outermost depth\n\t\tif ( depth === 0 ) {\n\t\t\treturn token;\n\t\t}\n\n\t\t// Commas must not follow \"[\", \"{\", or \",\"\n\t\trequireNonComma = open || comma;\n\n\t\t// Determine new depth\n\t\t// array/object open (\"[\" or \"{\"): depth += true - false (increment)\n\t\t// array/object close (\"]\" or \"}\"): depth += false - true (decrement)\n\t\t// other cases (\",\" or primitive): depth += true - true (numeric cast)\n\t\tdepth += !close - !open;\n\n\t\t// Remove this token\n\t\treturn \"\";\n\t} ) ) ?\n\t\t( Function( \"return \" + str ) )() :\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n};\n\n\n// Cross-browser xml parsing\njQuery.parseXML = function( data ) {\n\tvar xml, tmp;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\ttry {\n\t\tif ( window.DOMParser ) { // Standard\n\t\t\ttmp = new window.DOMParser();\n\t\t\txml = tmp.parseFromString( data, \"text/xml\" );\n\t\t} else { // IE\n\t\t\txml = new window.ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\txml.async = \"false\";\n\t\t\txml.loadXML( data );\n\t\t}\n\t} catch ( e ) {\n\t\txml = undefined;\n\t}\n\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\tjQuery.error( \"Invalid XML: \" + data );\n\t}\n\treturn xml;\n};\n\n\nvar\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\n\t// IE leaves an \\r character at EOL\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg,\n\n\t// #7653, #8125, #8152: local protocol detection\n\trlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n\trnoContent = /^(?:GET|HEAD)$/,\n\trprotocol = /^\\/\\//,\n\trurl = /^([\\w.+-]+:)(?:\\/\\/(?:[^\\/?#]*@|)([^\\/?#:]*)(?::(\\d+)|)|)/,\n\n\t/* Prefilters\n\t * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n\t * 2) These are called:\n\t *    - BEFORE asking for a transport\n\t *    - AFTER param serialization (s.data is a string if s.processData is true)\n\t * 3) key is the dataType\n\t * 4) the catchall symbol \"*\" can be used\n\t * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n\t */\n\tprefilters = {},\n\n\t/* Transports bindings\n\t * 1) key is the dataType\n\t * 2) the catchall symbol \"*\" can be used\n\t * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n\t */\n\ttransports = {},\n\n\t// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n\tallTypes = \"*/\".concat( \"*\" ),\n\n\t// Document location\n\tajaxLocation = location.href,\n\n\t// Segment location into parts\n\tajaxLocParts = rurl.exec( ajaxLocation.toLowerCase() ) || [];\n\n// Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\nfunction addToPrefiltersOrTransports( structure ) {\n\n\t// dataTypeExpression is optional and defaults to \"*\"\n\treturn function( dataTypeExpression, func ) {\n\n\t\tif ( typeof dataTypeExpression !== \"string\" ) {\n\t\t\tfunc = dataTypeExpression;\n\t\t\tdataTypeExpression = \"*\";\n\t\t}\n\n\t\tvar dataType,\n\t\t\ti = 0,\n\t\t\tdataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];\n\n\t\tif ( jQuery.isFunction( func ) ) {\n\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\n\t\t\t\t// Prepend if requested\n\t\t\t\tif ( dataType.charAt( 0 ) === \"+\" ) {\n\t\t\t\t\tdataType = dataType.slice( 1 ) || \"*\";\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );\n\n\t\t\t\t// Otherwise append\n\t\t\t\t} else {\n\t\t\t\t\t( structure[ dataType ] = structure[ dataType ] || [] ).push( func );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n}\n\n// Base inspection function for prefilters and transports\nfunction inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {\n\n\tvar inspected = {},\n\t\tseekingTransport = ( structure === transports );\n\n\tfunction inspect( dataType ) {\n\t\tvar selected;\n\t\tinspected[ dataType ] = true;\n\t\tjQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {\n\t\t\tvar dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );\n\t\t\tif ( typeof dataTypeOrTransport === \"string\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\n\t\t\t\toptions.dataTypes.unshift( dataTypeOrTransport );\n\t\t\t\tinspect( dataTypeOrTransport );\n\t\t\t\treturn false;\n\t\t\t} else if ( seekingTransport ) {\n\t\t\t\treturn !( selected = dataTypeOrTransport );\n\t\t\t}\n\t\t} );\n\t\treturn selected;\n\t}\n\n\treturn inspect( options.dataTypes[ 0 ] ) || !inspected[ \"*\" ] && inspect( \"*\" );\n}\n\n// A special extend for ajax options\n// that takes \"flat\" options (not to be deep extended)\n// Fixes #9887\nfunction ajaxExtend( target, src ) {\n\tvar deep, key,\n\t\tflatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n\tfor ( key in src ) {\n\t\tif ( src[ key ] !== undefined ) {\n\t\t\t( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];\n\t\t}\n\t}\n\tif ( deep ) {\n\t\tjQuery.extend( true, target, deep );\n\t}\n\n\treturn target;\n}\n\n/* Handles responses to an ajax request:\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes;\n\n\t// Remove auto dataType and get content-type in the process\n\twhile ( dataTypes[ 0 ] === \"*\" ) {\n\t\tdataTypes.shift();\n\t\tif ( ct === undefined ) {\n\t\t\tct = s.mimeType || jqXHR.getResponseHeader( \"Content-Type\" );\n\t\t}\n\t}\n\n\t// Check if we're dealing with a known content-type\n\tif ( ct ) {\n\t\tfor ( type in contents ) {\n\t\t\tif ( contents[ type ] && contents[ type ].test( ct ) ) {\n\t\t\t\tdataTypes.unshift( type );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check to see if we have a response for the expected dataType\n\tif ( dataTypes[ 0 ] in responses ) {\n\t\tfinalDataType = dataTypes[ 0 ];\n\t} else {\n\n\t\t// Try convertible dataTypes\n\t\tfor ( type in responses ) {\n\t\t\tif ( !dataTypes[ 0 ] || s.converters[ type + \" \" + dataTypes[ 0 ] ] ) {\n\t\t\t\tfinalDataType = type;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif ( !firstDataType ) {\n\t\t\t\tfirstDataType = type;\n\t\t\t}\n\t\t}\n\n\t\t// Or just use first one\n\t\tfinalDataType = finalDataType || firstDataType;\n\t}\n\n\t// If we found a dataType\n\t// We add the dataType to the list if needed\n\t// and return the corresponding response\n\tif ( finalDataType ) {\n\t\tif ( finalDataType !== dataTypes[ 0 ] ) {\n\t\t\tdataTypes.unshift( finalDataType );\n\t\t}\n\t\treturn responses[ finalDataType ];\n\t}\n}\n\n/* Chain conversions given the request and the original response\n * Also sets the responseXXX fields on the jqXHR instance\n */\nfunction ajaxConvert( s, response, jqXHR, isSuccess ) {\n\tvar conv2, current, conv, tmp, prev,\n\t\tconverters = {},\n\n\t\t// Work with a copy of dataTypes in case we need to modify it for conversion\n\t\tdataTypes = s.dataTypes.slice();\n\n\t// Create converters map with lowercased keys\n\tif ( dataTypes[ 1 ] ) {\n\t\tfor ( conv in s.converters ) {\n\t\t\tconverters[ conv.toLowerCase() ] = s.converters[ conv ];\n\t\t}\n\t}\n\n\tcurrent = dataTypes.shift();\n\n\t// Convert to each sequential dataType\n\twhile ( current ) {\n\n\t\tif ( s.responseFields[ current ] ) {\n\t\t\tjqXHR[ s.responseFields[ current ] ] = response;\n\t\t}\n\n\t\t// Apply the dataFilter if provided\n\t\tif ( !prev && isSuccess && s.dataFilter ) {\n\t\t\tresponse = s.dataFilter( response, s.dataType );\n\t\t}\n\n\t\tprev = current;\n\t\tcurrent = dataTypes.shift();\n\n\t\tif ( current ) {\n\n\t\t\t// There's only work to do if current dataType is non-auto\n\t\t\tif ( current === \"*\" ) {\n\n\t\t\t\tcurrent = prev;\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\t} else if ( prev !== \"*\" && prev !== current ) {\n\n\t\t\t\t// Seek a direct converter\n\t\t\t\tconv = converters[ prev + \" \" + current ] || converters[ \"* \" + current ];\n\n\t\t\t\t// If none found, seek a pair\n\t\t\t\tif ( !conv ) {\n\t\t\t\t\tfor ( conv2 in converters ) {\n\n\t\t\t\t\t\t// If conv2 outputs current\n\t\t\t\t\t\ttmp = conv2.split( \" \" );\n\t\t\t\t\t\tif ( tmp[ 1 ] === current ) {\n\n\t\t\t\t\t\t\t// If prev can be converted to accepted input\n\t\t\t\t\t\t\tconv = converters[ prev + \" \" + tmp[ 0 ] ] ||\n\t\t\t\t\t\t\t\tconverters[ \"* \" + tmp[ 0 ] ];\n\t\t\t\t\t\t\tif ( conv ) {\n\n\t\t\t\t\t\t\t\t// Condense equivalence converters\n\t\t\t\t\t\t\t\tif ( conv === true ) {\n\t\t\t\t\t\t\t\t\tconv = converters[ conv2 ];\n\n\t\t\t\t\t\t\t\t// Otherwise, insert the intermediate dataType\n\t\t\t\t\t\t\t\t} else if ( converters[ conv2 ] !== true ) {\n\t\t\t\t\t\t\t\t\tcurrent = tmp[ 0 ];\n\t\t\t\t\t\t\t\t\tdataTypes.unshift( tmp[ 1 ] );\n\t\t\t\t\t\t\t\t}\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\n\t\t\t\t// Apply converter (if not an equivalence)\n\t\t\t\tif ( conv !== true ) {\n\n\t\t\t\t\t// Unless errors are allowed to bubble, catch and return them\n\t\t\t\t\tif ( conv && s[ \"throws\" ] ) { // jscs:ignore requireDotNotation\n\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\tresponse = conv( response );\n\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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}\n\t}\n\n\treturn { state: \"success\", data: response };\n}\n\njQuery.extend( {\n\n\t// Counter for holding the number of active queries\n\tactive: 0,\n\n\t// Last-Modified header cache for next request\n\tlastModified: {},\n\tetag: {},\n\n\tajaxSettings: {\n\t\turl: ajaxLocation,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( ajaxLocParts[ 1 ] ),\n\t\tglobal: true,\n\t\tprocessData: true,\n\t\tasync: true,\n\t\tcontentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\t\t/*\n\t\ttimeout: 0,\n\t\tdata: null,\n\t\tdataType: null,\n\t\tusername: null,\n\t\tpassword: null,\n\t\tcache: null,\n\t\tthrows: false,\n\t\ttraditional: false,\n\t\theaders: {},\n\t\t*/\n\n\t\taccepts: {\n\t\t\t\"*\": allTypes,\n\t\t\ttext: \"text/plain\",\n\t\t\thtml: \"text/html\",\n\t\t\txml: \"application/xml, text/xml\",\n\t\t\tjson: \"application/json, text/javascript\"\n\t\t},\n\n\t\tcontents: {\n\t\t\txml: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\n\t\t},\n\n\t\tresponseFields: {\n\t\t\txml: \"responseXML\",\n\t\t\ttext: \"responseText\",\n\t\t\tjson: \"responseJSON\"\n\t\t},\n\n\t\t// Data converters\n\t\t// Keys separate source (or catchall \"*\") and destination types with a single space\n\t\tconverters: {\n\n\t\t\t// Convert anything to text\n\t\t\t\"* text\": String,\n\n\t\t\t// Text to html (true = no transformation)\n\t\t\t\"text html\": true,\n\n\t\t\t// Evaluate text as a json expression\n\t\t\t\"text json\": jQuery.parseJSON,\n\n\t\t\t// Parse text as xml\n\t\t\t\"text xml\": jQuery.parseXML\n\t\t},\n\n\t\t// For options that shouldn't be deep extended:\n\t\t// you can add your own custom options here if\n\t\t// and when you create one that shouldn't be\n\t\t// deep extended (see ajaxExtend)\n\t\tflatOptions: {\n\t\t\turl: true,\n\t\t\tcontext: true\n\t\t}\n\t},\n\n\t// Creates a full fledged settings object into target\n\t// with both ajaxSettings and settings fields.\n\t// If target is omitted, writes into ajaxSettings.\n\tajaxSetup: function( target, settings ) {\n\t\treturn settings ?\n\n\t\t\t// Building a settings object\n\t\t\tajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :\n\n\t\t\t// Extending ajaxSettings\n\t\t\tajaxExtend( jQuery.ajaxSettings, target );\n\t},\n\n\tajaxPrefilter: addToPrefiltersOrTransports( prefilters ),\n\tajaxTransport: addToPrefiltersOrTransports( transports ),\n\n\t// Main method\n\tajax: function( url, options ) {\n\n\t\t// If url is an object, simulate pre-1.5 signature\n\t\tif ( typeof url === \"object\" ) {\n\t\t\toptions = url;\n\t\t\turl = undefined;\n\t\t}\n\n\t\t// Force options to be an object\n\t\toptions = options || {};\n\n\t\tvar\n\n\t\t\t// Cross-domain detection vars\n\t\t\tparts,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\n\t\t\t// Context for global events is callbackContext if it is a DOM node or jQuery collection\n\t\t\tglobalEventContext = s.context &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\n\t\t\t// Fake xhr\n\t\t\tjqXHR = {\n\t\t\t\treadyState: 0,\n\n\t\t\t\t// Builds headers hashtable if needed\n\t\t\t\tgetResponseHeader: function( key ) {\n\t\t\t\t\tvar match;\n\t\t\t\t\tif ( state === 2 ) {\n\t\t\t\t\t\tif ( !responseHeaders ) {\n\t\t\t\t\t\t\tresponseHeaders = {};\n\t\t\t\t\t\t\twhile ( ( match = rheaders.exec( responseHeadersString ) ) ) {\n\t\t\t\t\t\t\t\tresponseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tmatch = responseHeaders[ key.toLowerCase() ];\n\t\t\t\t\t}\n\t\t\t\t\treturn match == null ? null : match;\n\t\t\t\t},\n\n\t\t\t\t// Raw string\n\t\t\t\tgetAllResponseHeaders: function() {\n\t\t\t\t\treturn state === 2 ? responseHeadersString : null;\n\t\t\t\t},\n\n\t\t\t\t// Caches the header\n\t\t\t\tsetRequestHeader: function( name, value ) {\n\t\t\t\t\tvar lname = name.toLowerCase();\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\tname = requestHeadersNames[ lname ] = requestHeadersNames[ lname ] || name;\n\t\t\t\t\t\trequestHeaders[ name ] = value;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Overrides response content-type header\n\t\t\t\toverrideMimeType: function( type ) {\n\t\t\t\t\tif ( !state ) {\n\t\t\t\t\t\ts.mimeType = type;\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Status-dependent callbacks\n\t\t\t\tstatusCode: function( map ) {\n\t\t\t\t\tvar code;\n\t\t\t\t\tif ( map ) {\n\t\t\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\t\t\tfor ( code in map ) {\n\n\t\t\t\t\t\t\t\t// Lazy-add the new callback in a way that preserves old ones\n\t\t\t\t\t\t\t\tstatusCode[ code ] = [ statusCode[ code ], map[ code ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\t// Execute the appropriate callbacks\n\t\t\t\t\t\t\tjqXHR.always( map[ jqXHR.status ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn this;\n\t\t\t\t},\n\n\t\t\t\t// Cancel the request\n\t\t\t\tabort: function( statusText ) {\n\t\t\t\t\tvar finalText = statusText || strAbort;\n\t\t\t\t\tif ( transport ) {\n\t\t\t\t\t\ttransport.abort( finalText );\n\t\t\t\t\t}\n\t\t\t\t\tdone( 0, finalText );\n\t\t\t\t\treturn this;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Attach deferreds\n\t\tdeferred.promise( jqXHR ).complete = completeDeferred.add;\n\t\tjqXHR.success = jqXHR.done;\n\t\tjqXHR.error = jqXHR.fail;\n\n\t\t// Remove hash character (#7531: and string promotion)\n\t\t// Add protocol if not provided (#5866: IE7 issue with protocol-less urls)\n\t\t// Handle falsy url in the settings object (#10093: consistency with old signature)\n\t\t// We also use the url parameter if available\n\t\ts.url = ( ( url || s.url || ajaxLocation ) + \"\" )\n\t\t\t.replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, ajaxLocParts[ 1 ] + \"//\" );\n\n\t\t// Alias method option to type as per ticket #12004\n\t\ts.type = options.method || options.type || s.method || s.type;\n\n\t\t// Extract dataTypes list\n\t\ts.dataTypes = jQuery.trim( s.dataType || \"*\" ).toLowerCase().match( rnotwhite ) || [ \"\" ];\n\n\t\t// A cross-domain request is in order when we have a protocol:host:port mismatch\n\t\tif ( s.crossDomain == null ) {\n\t\t\tparts = rurl.exec( s.url.toLowerCase() );\n\t\t\ts.crossDomain = !!( parts &&\n\t\t\t\t( parts[ 1 ] !== ajaxLocParts[ 1 ] || parts[ 2 ] !== ajaxLocParts[ 2 ] ||\n\t\t\t\t\t( parts[ 3 ] || ( parts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) !==\n\t\t\t\t\t\t( ajaxLocParts[ 3 ] || ( ajaxLocParts[ 1 ] === \"http:\" ? \"80\" : \"443\" ) ) )\n\t\t\t);\n\t\t}\n\n\t\t// Convert data if not already a string\n\t\tif ( s.data && s.processData && typeof s.data !== \"string\" ) {\n\t\t\ts.data = jQuery.param( s.data, s.traditional );\n\t\t}\n\n\t\t// Apply prefilters\n\t\tinspectPrefiltersOrTransports( prefilters, s, options, jqXHR );\n\n\t\t// If request was aborted inside a prefilter, stop there\n\t\tif ( state === 2 ) {\n\t\t\treturn jqXHR;\n\t\t}\n\n\t\t// We can fire global events as of now if asked to\n\t\t// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\t\tfireGlobals = jQuery.event && s.global;\n\n\t\t// Watch for a new set of requests\n\t\tif ( fireGlobals && jQuery.active++ === 0 ) {\n\t\t\tjQuery.event.trigger( \"ajaxStart\" );\n\t\t}\n\n\t\t// Uppercase the type\n\t\ts.type = s.type.toUpperCase();\n\n\t\t// Determine if request has content\n\t\ts.hasContent = !rnoContent.test( s.type );\n\n\t\t// Save the URL in case we're toying with the If-Modified-Since\n\t\t// and/or If-None-Match header later on\n\t\tcacheURL = s.url;\n\n\t\t// More options handling for requests with no content\n\t\tif ( !s.hasContent ) {\n\n\t\t\t// If data is available, append data to url\n\t\t\tif ( s.data ) {\n\t\t\t\tcacheURL = ( s.url += ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + s.data );\n\n\t\t\t\t// #9682: remove data so that it's not used in an eventual retry\n\t\t\t\tdelete s.data;\n\t\t\t}\n\n\t\t\t// Add anti-cache in url if needed\n\t\t\tif ( s.cache === false ) {\n\t\t\t\ts.url = rts.test( cacheURL ) ?\n\n\t\t\t\t\t// If there is already a '_' parameter, set its value\n\t\t\t\t\tcacheURL.replace( rts, \"$1_=\" + nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + nonce++;\n\t\t\t}\n\t\t}\n\n\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\tif ( s.ifModified ) {\n\t\t\tif ( jQuery.lastModified[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-Modified-Since\", jQuery.lastModified[ cacheURL ] );\n\t\t\t}\n\t\t\tif ( jQuery.etag[ cacheURL ] ) {\n\t\t\t\tjqXHR.setRequestHeader( \"If-None-Match\", jQuery.etag[ cacheURL ] );\n\t\t\t}\n\t\t}\n\n\t\t// Set the correct header, if data is being sent\n\t\tif ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {\n\t\t\tjqXHR.setRequestHeader( \"Content-Type\", s.contentType );\n\t\t}\n\n\t\t// Set the Accepts header for the server, depending on the dataType\n\t\tjqXHR.setRequestHeader(\n\t\t\t\"Accept\",\n\t\t\ts.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?\n\t\t\t\ts.accepts[ s.dataTypes[ 0 ] ] +\n\t\t\t\t\t( s.dataTypes[ 0 ] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\" ) :\n\t\t\t\ts.accepts[ \"*\" ]\n\t\t);\n\n\t\t// Check for headers option\n\t\tfor ( i in s.headers ) {\n\t\t\tjqXHR.setRequestHeader( i, s.headers[ i ] );\n\t\t}\n\n\t\t// Allow custom headers/mimetypes and early abort\n\t\tif ( s.beforeSend &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\n\t\t\t// Abort if not done already and return\n\t\t\treturn jqXHR.abort();\n\t\t}\n\n\t\t// aborting is no longer a cancellation\n\t\tstrAbort = \"abort\";\n\n\t\t// Install callbacks on deferreds\n\t\tfor ( i in { success: 1, error: 1, complete: 1 } ) {\n\t\t\tjqXHR[ i ]( s[ i ] );\n\t\t}\n\n\t\t// Get transport\n\t\ttransport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );\n\n\t\t// If no transport, we auto-abort\n\t\tif ( !transport ) {\n\t\t\tdone( -1, \"No Transport\" );\n\t\t} else {\n\t\t\tjqXHR.readyState = 1;\n\n\t\t\t// Send global event\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxSend\", [ jqXHR, s ] );\n\t\t\t}\n\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.setTimeout( function() {\n\t\t\t\t\tjqXHR.abort( \"timeout\" );\n\t\t\t\t}, s.timeout );\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tstate = 1;\n\t\t\t\ttransport.send( requestHeaders, done );\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// Propagate exception as error if not done\n\t\t\t\tif ( state < 2 ) {\n\t\t\t\t\tdone( -1, e );\n\n\t\t\t\t// Simply rethrow otherwise\n\t\t\t\t} else {\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Callback for when everything is done\n\t\tfunction done( status, nativeStatusText, responses, headers ) {\n\t\t\tvar isSuccess, success, error, response, modified,\n\t\t\t\tstatusText = nativeStatusText;\n\n\t\t\t// Called once\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// State is \"done\" now\n\t\t\tstate = 2;\n\n\t\t\t// Clear timeout if it exists\n\t\t\tif ( timeoutTimer ) {\n\t\t\t\twindow.clearTimeout( timeoutTimer );\n\t\t\t}\n\n\t\t\t// Dereference transport for early garbage collection\n\t\t\t// (no matter how long the jqXHR object will be used)\n\t\t\ttransport = undefined;\n\n\t\t\t// Cache response headers\n\t\t\tresponseHeadersString = headers || \"\";\n\n\t\t\t// Set readyState\n\t\t\tjqXHR.readyState = status > 0 ? 4 : 0;\n\n\t\t\t// Determine if successful\n\t\t\tisSuccess = status >= 200 && status < 300 || status === 304;\n\n\t\t\t// Get response data\n\t\t\tif ( responses ) {\n\t\t\t\tresponse = ajaxHandleResponses( s, jqXHR, responses );\n\t\t\t}\n\n\t\t\t// Convert no matter what (that way responseXXX fields are always set)\n\t\t\tresponse = ajaxConvert( s, response, jqXHR, isSuccess );\n\n\t\t\t// If successful, handle type chaining\n\t\t\tif ( isSuccess ) {\n\n\t\t\t\t// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\t\t\t\tif ( s.ifModified ) {\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"Last-Modified\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.lastModified[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t\tmodified = jqXHR.getResponseHeader( \"etag\" );\n\t\t\t\t\tif ( modified ) {\n\t\t\t\t\t\tjQuery.etag[ cacheURL ] = modified;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// if no content\n\t\t\t\tif ( status === 204 || s.type === \"HEAD\" ) {\n\t\t\t\t\tstatusText = \"nocontent\";\n\n\t\t\t\t// if not modified\n\t\t\t\t} else if ( status === 304 ) {\n\t\t\t\t\tstatusText = \"notmodified\";\n\n\t\t\t\t// If we have data, let's convert it\n\t\t\t\t} else {\n\t\t\t\t\tstatusText = response.state;\n\t\t\t\t\tsuccess = response.data;\n\t\t\t\t\terror = response.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status for non-aborts\n\t\t\t\terror = statusText;\n\t\t\t\tif ( status || !statusText ) {\n\t\t\t\t\tstatusText = \"error\";\n\t\t\t\t\tif ( status < 0 ) {\n\t\t\t\t\t\tstatus = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Set data for the fake xhr object\n\t\t\tjqXHR.status = status;\n\t\t\tjqXHR.statusText = ( nativeStatusText || statusText ) + \"\";\n\n\t\t\t// Success/Error\n\t\t\tif ( isSuccess ) {\n\t\t\t\tdeferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );\n\t\t\t} else {\n\t\t\t\tdeferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );\n\t\t\t}\n\n\t\t\t// Status-dependent callbacks\n\t\t\tjqXHR.statusCode( statusCode );\n\t\t\tstatusCode = undefined;\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( isSuccess ? \"ajaxSuccess\" : \"ajaxError\",\n\t\t\t\t\t[ jqXHR, s, isSuccess ? success : error ] );\n\t\t\t}\n\n\t\t\t// Complete\n\t\t\tcompleteDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );\n\n\t\t\tif ( fireGlobals ) {\n\t\t\t\tglobalEventContext.trigger( \"ajaxComplete\", [ jqXHR, s ] );\n\n\t\t\t\t// Handle the global AJAX counter\n\t\t\t\tif ( !( --jQuery.active ) ) {\n\t\t\t\t\tjQuery.event.trigger( \"ajaxStop\" );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn jqXHR;\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t},\n\n\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t}\n} );\n\njQuery.each( [ \"get\", \"post\" ], function( i, method ) {\n\tjQuery[ method ] = function( url, data, callback, type ) {\n\n\t\t// shift arguments if data argument was omitted\n\t\tif ( jQuery.isFunction( data ) ) {\n\t\t\ttype = type || callback;\n\t\t\tcallback = data;\n\t\t\tdata = undefined;\n\t\t}\n\n\t\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\n\t\t\turl: url,\n\t\t\ttype: method,\n\t\t\tdataType: type,\n\t\t\tdata: data,\n\t\t\tsuccess: callback\n\t\t}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\n\t\ttype: \"GET\",\n\t\tdataType: \"script\",\n\t\tcache: true,\n\t\tasync: false,\n\t\tglobal: false,\n\t\t\"throws\": true\n\t} );\n};\n\n\njQuery.fn.extend( {\n\twrapAll: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapAll( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( this[ 0 ] ) {\n\n\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );\n\n\t\t\tif ( this[ 0 ].parentNode ) {\n\t\t\t\twrap.insertBefore( this[ 0 ] );\n\t\t\t}\n\n\t\t\twrap.map( function() {\n\t\t\t\tvar elem = this;\n\n\t\t\t\twhile ( elem.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\n\t\t\t\t}\n\n\t\t\t\treturn elem;\n\t\t\t} ).append( this );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\twrapInner: function( html ) {\n\t\tif ( jQuery.isFunction( html ) ) {\n\t\t\treturn this.each( function( i ) {\n\t\t\t\tjQuery( this ).wrapInner( html.call( this, i ) );\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar self = jQuery( this ),\n\t\t\t\tcontents = self.contents();\n\n\t\t\tif ( contents.length ) {\n\t\t\t\tcontents.wrapAll( html );\n\n\t\t\t} else {\n\t\t\t\tself.append( html );\n\t\t\t}\n\t\t} );\n\t},\n\n\twrap: function( html ) {\n\t\tvar isFunction = jQuery.isFunction( html );\n\n\t\treturn this.each( function( i ) {\n\t\t\tjQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );\n\t\t} );\n\t},\n\n\tunwrap: function() {\n\t\treturn this.parent().each( function() {\n\t\t\tif ( !jQuery.nodeName( this, \"body\" ) ) {\n\t\t\t\tjQuery( this ).replaceWith( this.childNodes );\n\t\t\t}\n\t\t} ).end();\n\t}\n} );\n\n\nfunction getDisplay( elem ) {\n\treturn elem.style && elem.style.display || jQuery.css( elem, \"display\" );\n}\n\nfunction filterHidden( elem ) {\n\n\t// Disconnected elements are considered hidden\n\tif ( !jQuery.contains( elem.ownerDocument || document, elem ) ) {\n\t\treturn true;\n\t}\n\twhile ( elem && elem.nodeType === 1 ) {\n\t\tif ( getDisplay( elem ) === \"none\" || elem.type === \"hidden\" ) {\n\t\t\treturn true;\n\t\t}\n\t\telem = elem.parentNode;\n\t}\n\treturn false;\n}\n\njQuery.expr.filters.hidden = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\treturn support.reliableHiddenOffsets() ?\n\t\t( elem.offsetWidth <= 0 && elem.offsetHeight <= 0 &&\n\t\t\t!elem.getClientRects().length ) :\n\t\t\tfilterHidden( elem );\n};\n\njQuery.expr.filters.visible = function( elem ) {\n\treturn !jQuery.expr.filters.hidden( elem );\n};\n\n\n\n\nvar r20 = /%20/g,\n\trbracket = /\\[\\]$/,\n\trCRLF = /\\r?\\n/g,\n\trsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n\trsubmittable = /^(?:input|select|textarea|keygen)/i;\n\nfunction buildParams( prefix, obj, traditional, add ) {\n\tvar name;\n\n\tif ( jQuery.isArray( obj ) ) {\n\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\n\t\t\t\t// Treat each array item as a scalar.\n\t\t\t\tadd( prefix, v );\n\n\t\t\t} else {\n\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\n\t\t// Serialize object item.\n\t\tfor ( name in obj ) {\n\t\t\tbuildParams( prefix + \"[\" + name + \"]\", obj[ name ], traditional, add );\n\t\t}\n\n\t} else {\n\n\t\t// Serialize scalar item.\n\t\tadd( prefix, obj );\n\t}\n}\n\n// Serialize an array of form elements or a set of\n// key/values into a query string\njQuery.param = function( a, traditional ) {\n\tvar prefix,\n\t\ts = [],\n\t\tadd = function( key, value ) {\n\n\t\t\t// If value is a function, invoke it and return its value\n\t\t\tvalue = jQuery.isFunction( value ) ? value() : ( value == null ? \"\" : value );\n\t\t\ts[ s.length ] = encodeURIComponent( key ) + \"=\" + encodeURIComponent( value );\n\t\t};\n\n\t// Set traditional to true for jQuery <= 1.3.2 behavior.\n\tif ( traditional === undefined ) {\n\t\ttraditional = jQuery.ajaxSettings && jQuery.ajaxSettings.traditional;\n\t}\n\n\t// If an array was passed in, assume that it is an array of form elements.\n\tif ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {\n\n\t\t// Serialize the form elements\n\t\tjQuery.each( a, function() {\n\t\t\tadd( this.name, this.value );\n\t\t} );\n\n\t} else {\n\n\t\t// If traditional, encode the \"old\" way (the way 1.3.2 or older\n\t\t// did it), otherwise encode params recursively.\n\t\tfor ( prefix in a ) {\n\t\t\tbuildParams( prefix, a[ prefix ], traditional, add );\n\t\t}\n\t}\n\n\t// Return the resulting serialization\n\treturn s.join( \"&\" ).replace( r20, \"+\" );\n};\n\njQuery.fn.extend( {\n\tserialize: function() {\n\t\treturn jQuery.param( this.serializeArray() );\n\t},\n\tserializeArray: function() {\n\t\treturn this.map( function() {\n\n\t\t\t// Can add propHook for \"elements\" to filter or add form elements\n\t\t\tvar elements = jQuery.prop( this, \"elements\" );\n\t\t\treturn elements ? jQuery.makeArray( elements ) : this;\n\t\t} )\n\t\t.filter( function() {\n\t\t\tvar type = this.type;\n\n\t\t\t// Use .is(\":disabled\") so that fieldset[disabled] works\n\t\t\treturn this.name && !jQuery( this ).is( \":disabled\" ) &&\n\t\t\t\trsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&\n\t\t\t\t( this.checked || !rcheckableType.test( type ) );\n\t\t} )\n\t\t.map( function( i, elem ) {\n\t\t\tvar val = jQuery( this ).val();\n\n\t\t\treturn val == null ?\n\t\t\t\tnull :\n\t\t\t\tjQuery.isArray( val ) ?\n\t\t\t\t\tjQuery.map( val, function( val ) {\n\t\t\t\t\t\treturn { name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t\t\t\t} ) :\n\t\t\t\t\t{ name: elem.name, value: val.replace( rCRLF, \"\\r\\n\" ) };\n\t\t} ).get();\n\t}\n} );\n\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject !== undefined ?\n\n\t// Support: IE6-IE8\n\tfunction() {\n\n\t\t// XHR cannot access local files, always use ActiveX for that case\n\t\tif ( this.isLocal ) {\n\t\t\treturn createActiveXHR();\n\t\t}\n\n\t\t// Support: IE 9-11\n\t\t// IE seems to error on cross-domain PATCH requests when ActiveX XHR\n\t\t// is used. In IE 9+ always use the native XHR.\n\t\t// Note: this condition won't catch Edge as it doesn't define\n\t\t// document.documentMode but it also doesn't support ActiveX so it won't\n\t\t// reach this code.\n\t\tif ( document.documentMode > 8 ) {\n\t\t\treturn createStandardXHR();\n\t\t}\n\n\t\t// Support: IE<9\n\t\t// oldIE XHR does not support non-RFC2616 methods (#13240)\n\t\t// See http://msdn.microsoft.com/en-us/library/ie/ms536648(v=vs.85).aspx\n\t\t// and http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9\n\t\t// Although this check for six methods instead of eight\n\t\t// since IE also does not support \"trace\" and \"connect\"\n\t\treturn /^(get|post|head|put|delete|options)$/i.test( this.type ) &&\n\t\t\tcreateStandardXHR() || createActiveXHR();\n\t} :\n\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\nvar xhrId = 0,\n\txhrCallbacks = {},\n\txhrSupported = jQuery.ajaxSettings.xhr();\n\n// Support: IE<10\n// Open requests must be manually aborted on unload (#5280)\n// See https://support.microsoft.com/kb/2856746 for more info\nif ( window.attachEvent ) {\n\twindow.attachEvent( \"onunload\", function() {\n\t\tfor ( var key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t} );\n}\n\n// Determine support properties\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport( function( options ) {\n\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !options.crossDomain || support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\t\t\t\t\tvar i,\n\t\t\t\t\t\txhr = options.xhr(),\n\t\t\t\t\t\tid = ++xhrId;\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\txhr.open(\n\t\t\t\t\t\toptions.type,\n\t\t\t\t\t\toptions.url,\n\t\t\t\t\t\toptions.async,\n\t\t\t\t\t\toptions.username,\n\t\t\t\t\t\toptions.password\n\t\t\t\t\t);\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( options.xhrFields ) {\n\t\t\t\t\t\tfor ( i in options.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = options.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( options.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( options.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !options.crossDomain && !headers[ \"X-Requested-With\" ] ) {\n\t\t\t\t\t\theaders[ \"X-Requested-With\" ] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Set headers\n\t\t\t\t\tfor ( i in headers ) {\n\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// IE's ActiveXObject throws a 'Type Mismatch' exception when setting\n\t\t\t\t\t\t// request header to a null-value.\n\t\t\t\t\t\t//\n\t\t\t\t\t\t// To keep consistent with other XHR implementations, cast the value\n\t\t\t\t\t\t// to string and ignore `undefined`.\n\t\t\t\t\t\tif ( headers[ i ] !== undefined ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] + \"\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( options.hasContent && options.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, statusText, responses;\n\n\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t// Clean up\n\t\t\t\t\t\t\tdelete xhrCallbacks[ id ];\n\t\t\t\t\t\t\tcallback = undefined;\n\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\n\t\t\t\t\t\t\t// Abort manually if needed\n\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\tstatus = xhr.status;\n\n\t\t\t\t\t\t\t\t// Support: IE<10\n\t\t\t\t\t\t\t\t// Accessing binary-data responseText throws an exception\n\t\t\t\t\t\t\t\t// (#11426)\n\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\tif ( !status && options.isLocal && !options.crossDomain ) {\n\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\n\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\tstatus = 204;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, xhr.getAllResponseHeaders() );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// `xhr.send` may raise an exception, but it will be\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\tif ( !options.async ) {\n\n\t\t\t\t\t\t// If we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\twindow.setTimeout( callback );\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Register the callback, but delay it in case `xhr.send` throws\n\t\t\t\t\t\t// Add to the list of active xhr callbacks\n\t\t\t\t\t\txhr.onreadystatechange = xhrCallbacks[ id ] = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t} );\n}\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch ( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject( \"Microsoft.XMLHTTP\" );\n\t} catch ( e ) {}\n}\n\n\n\n\n// Install script dataType\njQuery.ajaxSetup( {\n\taccepts: {\n\t\tscript: \"text/javascript, application/javascript, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\n\t},\n\tconverters: {\n\t\t\"text script\": function( text ) {\n\t\t\tjQuery.globalEval( text );\n\t\t\treturn text;\n\t\t}\n\t}\n} );\n\n// Handle cache's special case and global\njQuery.ajaxPrefilter( \"script\", function( s ) {\n\tif ( s.cache === undefined ) {\n\t\ts.cache = false;\n\t}\n\tif ( s.crossDomain ) {\n\t\ts.type = \"GET\";\n\t\ts.global = false;\n\t}\n} );\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function( s ) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery( \"head\" )[ 0 ] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement( \"script\" );\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n} );\n\n\n\n\nvar oldCallbacks = [],\n\trjsonp = /(=)\\?(?=&|$)|\\?\\?/;\n\n// Default jsonp settings\njQuery.ajaxSetup( {\n\tjsonp: \"callback\",\n\tjsonpCallback: function() {\n\t\tvar callback = oldCallbacks.pop() || ( jQuery.expando + \"_\" + ( nonce++ ) );\n\t\tthis[ callback ] = true;\n\t\treturn callback;\n\t}\n} );\n\n// Detect, normalize options and install callbacks for jsonp requests\njQuery.ajaxPrefilter( \"json jsonp\", function( s, originalSettings, jqXHR ) {\n\n\tvar callbackName, overwritten, responseContainer,\n\t\tjsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?\n\t\t\t\"url\" :\n\t\t\ttypeof s.data === \"string\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.test( s.data ) && \"data\"\n\t\t);\n\n\t// Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\tif ( jsonProp || s.dataTypes[ 0 ] === \"jsonp\" ) {\n\n\t\t// Get callback name, remembering preexisting value associated with it\n\t\tcallbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?\n\t\t\ts.jsonpCallback() :\n\t\t\ts.jsonpCallback;\n\n\t\t// Insert callback into url or form data\n\t\tif ( jsonProp ) {\n\t\t\ts[ jsonProp ] = s[ jsonProp ].replace( rjsonp, \"$1\" + callbackName );\n\t\t} else if ( s.jsonp !== false ) {\n\t\t\ts.url += ( rquery.test( s.url ) ? \"&\" : \"?\" ) + s.jsonp + \"=\" + callbackName;\n\t\t}\n\n\t\t// Use data converter to retrieve json after script execution\n\t\ts.converters[ \"script json\" ] = function() {\n\t\t\tif ( !responseContainer ) {\n\t\t\t\tjQuery.error( callbackName + \" was not called\" );\n\t\t\t}\n\t\t\treturn responseContainer[ 0 ];\n\t\t};\n\n\t\t// force json dataType\n\t\ts.dataTypes[ 0 ] = \"json\";\n\n\t\t// Install callback\n\t\toverwritten = window[ callbackName ];\n\t\twindow[ callbackName ] = function() {\n\t\t\tresponseContainer = arguments;\n\t\t};\n\n\t\t// Clean-up function (fires after converters)\n\t\tjqXHR.always( function() {\n\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\n\t\t\t\t// make sure that re-using the options doesn't screw things around\n\t\t\t\ts.jsonpCallback = originalSettings.jsonpCallback;\n\n\t\t\t\t// save the callback name for future use\n\t\t\t\toldCallbacks.push( callbackName );\n\t\t\t}\n\n\t\t\t// Call if it was a function and we have a response\n\t\t\tif ( responseContainer && jQuery.isFunction( overwritten ) ) {\n\t\t\t\toverwritten( responseContainer[ 0 ] );\n\t\t\t}\n\n\t\t\tresponseContainer = overwritten = undefined;\n\t\t} );\n\n\t\t// Delegate to script\n\t\treturn \"script\";\n\t}\n} );\n\n\n\n\n// data: string of html\n// context (optional): If specified, the fragment will be created in this context,\n// defaults to document\n// keepScripts (optional): If true, will include scripts passed in the html string\njQuery.parseHTML = function( data, context, keepScripts ) {\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\tif ( typeof context === \"boolean\" ) {\n\t\tkeepScripts = context;\n\t\tcontext = false;\n\t}\n\tcontext = context || document;\n\n\tvar parsed = rsingleTag.exec( data ),\n\t\tscripts = !keepScripts && [];\n\n\t// Single tag\n\tif ( parsed ) {\n\t\treturn [ context.createElement( parsed[ 1 ] ) ];\n\t}\n\n\tparsed = buildFragment( [ data ], context, scripts );\n\n\tif ( scripts && scripts.length ) {\n\t\tjQuery( scripts ).remove();\n\t}\n\n\treturn jQuery.merge( [], parsed.childNodes );\n};\n\n\n// Keep a copy of the old load method\nvar _load = jQuery.fn.load;\n\n/**\n * Load a url into a page\n */\njQuery.fn.load = function( url, params, callback ) {\n\tif ( typeof url !== \"string\" && _load ) {\n\t\treturn _load.apply( this, arguments );\n\t}\n\n\tvar selector, type, response,\n\t\tself = this,\n\t\toff = url.indexOf( \" \" );\n\n\tif ( off > -1 ) {\n\t\tselector = jQuery.trim( url.slice( off, url.length ) );\n\t\turl = url.slice( 0, off );\n\t}\n\n\t// If it's a function\n\tif ( jQuery.isFunction( params ) ) {\n\n\t\t// We assume that it's the callback\n\t\tcallback = params;\n\t\tparams = undefined;\n\n\t// Otherwise, build a param string\n\t} else if ( params && typeof params === \"object\" ) {\n\t\ttype = \"POST\";\n\t}\n\n\t// If we have elements to modify, make the request\n\tif ( self.length > 0 ) {\n\t\tjQuery.ajax( {\n\t\t\turl: url,\n\n\t\t\t// If \"type\" variable is undefined, then \"GET\" method will be used.\n\t\t\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\n\t\t\tdataType: \"html\",\n\t\t\tdata: params\n\t\t} ).done( function( responseText ) {\n\n\t\t\t// Save response for use in complete callback\n\t\t\tresponse = arguments;\n\n\t\t\tself.html( selector ?\n\n\t\t\t\t// If a selector was specified, locate the right elements in a dummy div\n\t\t\t\t// Exclude scripts to avoid IE 'Permission Denied' errors\n\t\t\t\tjQuery( \"<div>\" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :\n\n\t\t\t\t// Otherwise use the full result\n\t\t\t\tresponseText );\n\n\t\t// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\n\t\t} );\n\t}\n\n\treturn this;\n};\n\n\n\n\n// Attach a bunch of functions for handling common AJAX events\njQuery.each( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], function( i, type ) {\n\tjQuery.fn[ type ] = function( fn ) {\n\t\treturn this.on( type, fn );\n\t};\n} );\n\n\n\n\njQuery.expr.filters.animated = function( elem ) {\n\treturn jQuery.grep( jQuery.timers, function( fn ) {\n\t\treturn elem === fn.elem;\n\t} ).length;\n};\n\n\n\n\n\n/**\n * Gets a window from an element\n */\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\n}\n\njQuery.offset = {\n\tsetOffset: function( elem, options, i ) {\n\t\tvar curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,\n\t\t\tposition = jQuery.css( elem, \"position\" ),\n\t\t\tcurElem = jQuery( elem ),\n\t\t\tprops = {};\n\n\t\t// set position first, in-case top/left are set even on static elem\n\t\tif ( position === \"static\" ) {\n\t\t\telem.style.position = \"relative\";\n\t\t}\n\n\t\tcurOffset = curElem.offset();\n\t\tcurCSSTop = jQuery.css( elem, \"top\" );\n\t\tcurCSSLeft = jQuery.css( elem, \"left\" );\n\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) &&\n\t\t\tjQuery.inArray( \"auto\", [ curCSSTop, curCSSLeft ] ) > -1;\n\n\t\t// need to be able to calculate position if either top or left\n\t\t// is auto and position is either absolute or fixed\n\t\tif ( calculatePosition ) {\n\t\t\tcurPosition = curElem.position();\n\t\t\tcurTop = curPosition.top;\n\t\t\tcurLeft = curPosition.left;\n\t\t} else {\n\t\t\tcurTop = parseFloat( curCSSTop ) || 0;\n\t\t\tcurLeft = parseFloat( curCSSLeft ) || 0;\n\t\t}\n\n\t\tif ( jQuery.isFunction( options ) ) {\n\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, curOffset ) );\n\t\t}\n\n\t\tif ( options.top != null ) {\n\t\t\tprops.top = ( options.top - curOffset.top ) + curTop;\n\t\t}\n\t\tif ( options.left != null ) {\n\t\t\tprops.left = ( options.left - curOffset.left ) + curLeft;\n\t\t}\n\n\t\tif ( \"using\" in options ) {\n\t\t\toptions.using.call( elem, props );\n\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\njQuery.fn.extend( {\n\toffset: function( options ) {\n\t\tif ( arguments.length ) {\n\t\t\treturn options === undefined ?\n\t\t\t\tthis :\n\t\t\t\tthis.each( function( i ) {\n\t\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t\t} );\n\t\t}\n\n\t\tvar docElem, win,\n\t\t\tbox = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ],\n\t\t\tdoc = elem && elem.ownerDocument;\n\n\t\tif ( !doc ) {\n\t\t\treturn;\n\t\t}\n\n\t\tdocElem = doc.documentElement;\n\n\t\t// Make sure it's not a disconnected DOM node\n\t\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\t\treturn box;\n\t\t}\n\n\t\t// If we don't have gBCR, just use 0,0 rather than error\n\t\t// BlackBerry 5, iOS 3 (original iPhone)\n\t\tif ( typeof elem.getBoundingClientRect !== \"undefined\" ) {\n\t\t\tbox = elem.getBoundingClientRect();\n\t\t}\n\t\twin = getWindow( doc );\n\t\treturn {\n\t\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t\t};\n\t},\n\n\tposition: function() {\n\t\tif ( !this[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar offsetParent, offset,\n\t\t\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// Fixed elements are offset from window (parentOffset = {top:0, left: 0},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\n\t\t} else {\n\n\t\t\t// Get *real* offsetParent\n\t\t\toffsetParent = this.offsetParent();\n\n\t\t\t// Get correct offsets\n\t\t\toffset = this.offset();\n\t\t\tif ( !jQuery.nodeName( offsetParent[ 0 ], \"html\" ) ) {\n\t\t\t\tparentOffset = offsetParent.offset();\n\t\t\t}\n\n\t\t\t// Add offsetParent borders\n\t\t\tparentOffset.top  += jQuery.css( offsetParent[ 0 ], \"borderTopWidth\", true );\n\t\t\tparentOffset.left += jQuery.css( offsetParent[ 0 ], \"borderLeftWidth\", true );\n\t\t}\n\n\t\t// Subtract parent offsets and element margins\n\t\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\n\t\treturn {\n\t\t\ttop:  offset.top  - parentOffset.top - jQuery.css( elem, \"marginTop\", true ),\n\t\t\tleft: offset.left - parentOffset.left - jQuery.css( elem, \"marginLeft\", true )\n\t\t};\n\t},\n\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && ( !jQuery.nodeName( offsetParent, \"html\" ) &&\n\t\t\t\tjQuery.css( offsetParent, \"position\" ) === \"static\" ) ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\t\t\treturn offsetParent || documentElement;\n\t\t} );\n\t}\n} );\n\n// Create scrollLeft and scrollTop methods\njQuery.each( { scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\" }, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn access( this, function( elem, method, val ) {\n\t\t\tvar win = getWindow( elem );\n\n\t\t\tif ( val === undefined ) {\n\t\t\t\treturn win ? ( prop in win ) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ method ];\n\t\t\t}\n\n\t\t\tif ( win ) {\n\t\t\t\twin.scrollTo(\n\t\t\t\t\t!top ? val : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\n\t\t\t\t);\n\n\t\t\t} else {\n\t\t\t\telem[ method ] = val;\n\t\t\t}\n\t\t}, method, val, arguments.length, null );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\n// Add the top/left cssHooks using jQuery.fn.position\n// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n// getComputedStyle returns percent when specified for top/left/bottom/right\n// rather than make the css module depend on the offset module, we just check for it here\njQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\tjQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,\n\t\tfunction( elem, computed ) {\n\t\t\tif ( computed ) {\n\t\t\t\tcomputed = curCSS( elem, prop );\n\n\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\tcomputed;\n\t\t\t}\n\t\t}\n\t);\n} );\n\n\n// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\njQuery.each( { Height: \"height\", Width: \"width\" }, function( name, type ) {\n\tjQuery.each( { padding: \"inner\" + name, content: type, \"\": \"outer\" + name },\n\tfunction( defaultExtra, funcName ) {\n\n\t\t// margin is only for outerHeight, outerWidth\n\t\tjQuery.fn[ funcName ] = function( margin, value ) {\n\t\t\tvar chainable = arguments.length && ( defaultExtra || typeof margin !== \"boolean\" ),\n\t\t\t\textra = defaultExtra || ( margin === true || value === true ? \"margin\" : \"border\" );\n\n\t\t\treturn access( this, function( elem, type, value ) {\n\t\t\t\tvar doc;\n\n\t\t\t\tif ( jQuery.isWindow( elem ) ) {\n\n\t\t\t\t\t// As of 5/8/2012 this will yield incorrect results for Mobile Safari, but there\n\t\t\t\t\t// isn't a whole lot we can do. See pull request at this URL for discussion:\n\t\t\t\t\t// https://github.com/jquery/jquery/pull/764\n\t\t\t\t\treturn elem.document.documentElement[ \"client\" + name ];\n\t\t\t\t}\n\n\t\t\t\t// Get document width or height\n\t\t\t\tif ( elem.nodeType === 9 ) {\n\t\t\t\t\tdoc = elem.documentElement;\n\n\t\t\t\t\t// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n\t\t\t\t\t// whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only,\n\t\t\t\t\t// but there is currently no good, small way to fix it.\n\t\t\t\t\treturn Math.max(\n\t\t\t\t\t\telem.body[ \"scroll\" + name ], doc[ \"scroll\" + name ],\n\t\t\t\t\t\telem.body[ \"offset\" + name ], doc[ \"offset\" + name ],\n\t\t\t\t\t\tdoc[ \"client\" + name ]\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\treturn value === undefined ?\n\n\t\t\t\t\t// Get width or height on the element, requesting but not forcing parseFloat\n\t\t\t\t\tjQuery.css( elem, type, extra ) :\n\n\t\t\t\t\t// Set width or height on the element\n\t\t\t\t\tjQuery.style( elem, type, value, extra );\n\t\t\t}, type, chainable ? margin : undefined, chainable, null );\n\t\t};\n\t} );\n} );\n\n\njQuery.fn.extend( {\n\n\tbind: function( types, data, fn ) {\n\t\treturn this.on( types, null, data, fn );\n\t},\n\tunbind: function( types, fn ) {\n\t\treturn this.off( types, null, fn );\n\t},\n\n\tdelegate: function( selector, types, data, fn ) {\n\t\treturn this.on( types, selector, data, fn );\n\t},\n\tundelegate: function( selector, types, fn ) {\n\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t}\n} );\n\n// The number of elements contained in the matched element set\njQuery.fn.size = function() {\n\treturn this.length;\n};\n\njQuery.fn.andSelf = jQuery.fn.addBack;\n\n\n\n\n// Register as a named AMD module, since jQuery can be concatenated with other\n// files that may use define, but not via a proper concatenation script that\n// understands anonymous AMD modules. A named AMD is safest and most robust\n// way to register. Lowercase jquery is used because AMD module names are\n// derived from file names, and jQuery is normally delivered in a lowercase\n// file name. Do this after creating the global so that if an AMD module wants\n// to call noConflict to hide this version of jQuery, it will work.\n\n// Note that for maximum portability, libraries that are not jQuery should\n// declare themselves as anonymous modules, and avoid setting a global if an\n// AMD loader is present. jQuery is a special case. For more information, see\n// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\nif ( typeof define === \"function\" && define.amd ) {\n\tdefine( \"jquery\", [], function() {\n\t\treturn jQuery;\n\t} );\n}\n\n\n\nvar\n\n\t// Map over jQuery in case of overwrite\n\t_jQuery = window.jQuery,\n\n\t// Map over the $ in case of overwrite\n\t_$ = window.$;\n\njQuery.noConflict = function( deep ) {\n\tif ( window.$ === jQuery ) {\n\t\twindow.$ = _$;\n\t}\n\n\tif ( deep && window.jQuery === jQuery ) {\n\t\twindow.jQuery = _jQuery;\n\t}\n\n\treturn jQuery;\n};\n\n// Expose jQuery and $ identifiers, even in\n// AMD (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n// and CommonJS for browser emulators (#13566)\nif ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/index.html",
    "content": "<!doctype html>\n<html lang=\"us\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<title>jQuery UI Example Page</title>\n\t<link href=\"jquery-ui.css\" rel=\"stylesheet\">\n\t<style>\n\tbody{\n\t\tfont-family: \"Trebuchet MS\", sans-serif;\n\t\tmargin: 50px;\n\t}\n\t.demoHeaders {\n\t\tmargin-top: 2em;\n\t}\n\t#dialog-link {\n\t\tpadding: .4em 1em .4em 20px;\n\t\ttext-decoration: none;\n\t\tposition: relative;\n\t}\n\t#dialog-link span.ui-icon {\n\t\tmargin: 0 5px 0 0;\n\t\tposition: absolute;\n\t\tleft: .2em;\n\t\ttop: 50%;\n\t\tmargin-top: -8px;\n\t}\n\t#icons {\n\t\tmargin: 0;\n\t\tpadding: 0;\n\t}\n\t#icons li {\n\t\tmargin: 2px;\n\t\tposition: relative;\n\t\tpadding: 4px 0;\n\t\tcursor: pointer;\n\t\tfloat: left;\n\t\tlist-style: none;\n\t}\n\t#icons span.ui-icon {\n\t\tfloat: left;\n\t\tmargin: 0 4px;\n\t}\n\t.fakewindowcontain .ui-widget-overlay {\n\t\tposition: absolute;\n\t}\n\tselect {\n\t\twidth: 200px;\n\t}\n\t</style>\n</head>\n<body>\n\n<h1>Welcome to jQuery UI!</h1>\n\n<div class=\"ui-widget\">\n\t<p>This page demonstrates the widgets and theme you selected in Download Builder. Please make sure you are using them with a compatible jQuery version.</p>\n</div>\n\n<h1>YOUR COMPONENTS:</h1>\n\n\n<!-- Accordion -->\n<h2 class=\"demoHeaders\">Accordion</h2>\n<div id=\"accordion\">\n\t<h3>First</h3>\n\t<div>Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet.</div>\n\t<h3>Second</h3>\n\t<div>Phasellus mattis tincidunt nibh.</div>\n\t<h3>Third</h3>\n\t<div>Nam dui erat, auctor a, dignissim quis.</div>\n</div>\n\n\n\n<!-- Autocomplete -->\n<h2 class=\"demoHeaders\">Autocomplete</h2>\n<div>\n\t<input id=\"autocomplete\" title=\"type &quot;a&quot;\">\n</div>\n\n\n\n<!-- Button -->\n<h2 class=\"demoHeaders\">Button</h2>\n<button id=\"button\">A button element</button>\n<button id=\"button-icon\">An icon-only button</button>\n\n\n\n<!-- Checkboxradio -->\n<h2 class=\"demoHeaders\">Checkboxradio</h2>\n<form style=\"margin-top: 1em;\">\n\t<div id=\"radioset\">\n\t\t<input type=\"radio\" id=\"radio1\" name=\"radio\"><label for=\"radio1\">Choice 1</label>\n\t\t<input type=\"radio\" id=\"radio2\" name=\"radio\" checked=\"checked\"><label for=\"radio2\">Choice 2</label>\n\t\t<input type=\"radio\" id=\"radio3\" name=\"radio\"><label for=\"radio3\">Choice 3</label>\n\t</div>\n</form>\n\n\n\n<!-- Controlgroup -->\n<h2 class=\"demoHeaders\">Controlgroup</h2>\n<fieldset>\n\t<legend>Rental Car</legend>\n\t<div id=\"controlgroup\">\n\t\t<select id=\"car-type\">\n\t\t\t<option>Compact car</option>\n\t\t\t<option>Midsize car</option>\n\t\t\t<option>Full size car</option>\n\t\t\t<option>SUV</option>\n\t\t\t<option>Luxury</option>\n\t\t\t<option>Truck</option>\n\t\t\t<option>Van</option>\n\t\t</select>\n\t\t<label for=\"transmission-standard\">Standard</label>\n\t\t<input type=\"radio\" name=\"transmission\" id=\"transmission-standard\">\n\t\t<label for=\"transmission-automatic\">Automatic</label>\n\t\t<input type=\"radio\" name=\"transmission\" id=\"transmission-automatic\">\n\t\t<label for=\"insurance\">Insurance</label>\n\t\t<input type=\"checkbox\" name=\"insurance\" id=\"insurance\">\n\t\t<label for=\"horizontal-spinner\" class=\"ui-controlgroup-label\"># of cars</label>\n\t\t<input id=\"horizontal-spinner\" class=\"ui-spinner-input\">\n\t\t<button>Book Now!</button>\n\t</div>\n</fieldset>\n\n\n\n<!-- Tabs -->\n<h2 class=\"demoHeaders\">Tabs</h2>\n<div id=\"tabs\">\n\t<ul>\n\t\t<li><a href=\"#tabs-1\">First</a></li>\n\t\t<li><a href=\"#tabs-2\">Second</a></li>\n\t\t<li><a href=\"#tabs-3\">Third</a></li>\n\t</ul>\n\t<div id=\"tabs-1\">Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</div>\n\t<div id=\"tabs-2\">Phasellus mattis tincidunt nibh. Cras orci urna, blandit id, pretium vel, aliquet ornare, felis. Maecenas scelerisque sem non nisl. Fusce sed lorem in enim dictum bibendum.</div>\n\t<div id=\"tabs-3\">Nam dui erat, auctor a, dignissim quis, sollicitudin eu, felis. Pellentesque nisi urna, interdum eget, sagittis et, consequat vestibulum, lacus. Mauris porttitor ullamcorper augue.</div>\n</div>\n\n\n\n<h2 class=\"demoHeaders\">Dialog</h2>\n<p>\n\t<button id=\"dialog-link\" class=\"ui-button ui-corner-all ui-widget\">\n\t\t<span class=\"ui-icon ui-icon-newwin\"></span>Open Dialog\n\t</button>\n</p>\n\n<h2 class=\"demoHeaders\">Overlay and Shadow Classes</h2>\n<div style=\"position: relative; width: 96%; height: 200px; padding:1% 2%; overflow:hidden;\" class=\"fakewindowcontain\">\n\t<p>Lorem ipsum dolor sit amet,  Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. </p><p>Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. </p><p>Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. </p><p>Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. Aliquam ante. </p><p>Suspendisse scelerisque dui nec velit. Duis augue augue, gravida euismod, vulputate ac, facilisis id, sem. Morbi in orci. Nulla purus lacus, pulvinar vel, malesuada ac, mattis nec, quam. Nam molestie scelerisque quam. Nullam feugiat cursus lacus.orem ipsum dolor sit amet, consectetur adipiscing elit. Donec libero risus, commodo vitae, pharetra mollis, posuere eu, pede. Nulla nec tortor. Donec id elit quis purus consectetur consequat. Nam congue semper tellus. Sed erat dolor, dapibus sit amet, venenatis ornare, ultrices ut, nisi. </p>\n\n\t<!-- ui-dialog -->\n\t<div class=\"ui-widget-overlay ui-front\"></div>\n\t<div style=\"position: absolute; width: 320px; left: 50px; top: 30px; padding: 1.2em\" class=\"ui-widget ui-front ui-widget-content ui-corner-all ui-widget-shadow\">\n\t\tLorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.\n\t</div>\n\n</div>\n\n<!-- ui-dialog -->\n<div id=\"dialog\" title=\"Dialog Title\">\n\t<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.</p>\n</div>\n\n\n\n<h2 class=\"demoHeaders\">Framework Icons (content color preview)</h2>\n<ul id=\"icons\" class=\"ui-widget ui-helper-clearfix\">\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-n\"><span class=\"ui-icon ui-icon-caret-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-ne\"><span class=\"ui-icon ui-icon-caret-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-e\"><span class=\"ui-icon ui-icon-caret-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-se\"><span class=\"ui-icon ui-icon-caret-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-s\"><span class=\"ui-icon ui-icon-caret-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-sw\"><span class=\"ui-icon ui-icon-caret-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-w\"><span class=\"ui-icon ui-icon-caret-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-1-nw\"><span class=\"ui-icon ui-icon-caret-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-2-n-s\"><span class=\"ui-icon ui-icon-caret-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-caret-2-e-w\"><span class=\"ui-icon ui-icon-caret-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-n\"><span class=\"ui-icon ui-icon-triangle-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-ne\"><span class=\"ui-icon ui-icon-triangle-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-e\"><span class=\"ui-icon ui-icon-triangle-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-se\"><span class=\"ui-icon ui-icon-triangle-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-s\"><span class=\"ui-icon ui-icon-triangle-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-sw\"><span class=\"ui-icon ui-icon-triangle-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-w\"><span class=\"ui-icon ui-icon-triangle-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-1-nw\"><span class=\"ui-icon ui-icon-triangle-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-2-n-s\"><span class=\"ui-icon ui-icon-triangle-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-triangle-2-e-w\"><span class=\"ui-icon ui-icon-triangle-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-n\"><span class=\"ui-icon ui-icon-arrow-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-ne\"><span class=\"ui-icon ui-icon-arrow-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-e\"><span class=\"ui-icon ui-icon-arrow-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-se\"><span class=\"ui-icon ui-icon-arrow-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-s\"><span class=\"ui-icon ui-icon-arrow-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-sw\"><span class=\"ui-icon ui-icon-arrow-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-w\"><span class=\"ui-icon ui-icon-arrow-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-1-nw\"><span class=\"ui-icon ui-icon-arrow-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-n-s\"><span class=\"ui-icon ui-icon-arrow-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-ne-sw\"><span class=\"ui-icon ui-icon-arrow-2-ne-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-e-w\"><span class=\"ui-icon ui-icon-arrow-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-2-se-nw\"><span class=\"ui-icon ui-icon-arrow-2-se-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-n\"><span class=\"ui-icon ui-icon-arrowstop-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-e\"><span class=\"ui-icon ui-icon-arrowstop-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-s\"><span class=\"ui-icon ui-icon-arrowstop-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowstop-1-w\"><span class=\"ui-icon ui-icon-arrowstop-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-n\"><span class=\"ui-icon ui-icon-arrowthick-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-ne\"><span class=\"ui-icon ui-icon-arrowthick-1-ne\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-e\"><span class=\"ui-icon ui-icon-arrowthick-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-se\"><span class=\"ui-icon ui-icon-arrowthick-1-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-s\"><span class=\"ui-icon ui-icon-arrowthick-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-sw\"><span class=\"ui-icon ui-icon-arrowthick-1-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-w\"><span class=\"ui-icon ui-icon-arrowthick-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-1-nw\"><span class=\"ui-icon ui-icon-arrowthick-1-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-n-s\"><span class=\"ui-icon ui-icon-arrowthick-2-n-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-ne-sw\"><span class=\"ui-icon ui-icon-arrowthick-2-ne-sw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-e-w\"><span class=\"ui-icon ui-icon-arrowthick-2-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthick-2-se-nw\"><span class=\"ui-icon ui-icon-arrowthick-2-se-nw\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-n\"><span class=\"ui-icon ui-icon-arrowthickstop-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-e\"><span class=\"ui-icon ui-icon-arrowthickstop-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-s\"><span class=\"ui-icon ui-icon-arrowthickstop-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowthickstop-1-w\"><span class=\"ui-icon ui-icon-arrowthickstop-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-w\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-n\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-e\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturnthick-1-s\"><span class=\"ui-icon ui-icon-arrowreturnthick-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-w\"><span class=\"ui-icon ui-icon-arrowreturn-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-n\"><span class=\"ui-icon ui-icon-arrowreturn-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-e\"><span class=\"ui-icon ui-icon-arrowreturn-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowreturn-1-s\"><span class=\"ui-icon ui-icon-arrowreturn-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-w\"><span class=\"ui-icon ui-icon-arrowrefresh-1-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-n\"><span class=\"ui-icon ui-icon-arrowrefresh-1-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-e\"><span class=\"ui-icon ui-icon-arrowrefresh-1-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrowrefresh-1-s\"><span class=\"ui-icon ui-icon-arrowrefresh-1-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-4\"><span class=\"ui-icon ui-icon-arrow-4\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-arrow-4-diag\"><span class=\"ui-icon ui-icon-arrow-4-diag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-extlink\"><span class=\"ui-icon ui-icon-extlink\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-newwin\"><span class=\"ui-icon ui-icon-newwin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-refresh\"><span class=\"ui-icon ui-icon-refresh\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-shuffle\"><span class=\"ui-icon ui-icon-shuffle\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-transfer-e-w\"><span class=\"ui-icon ui-icon-transfer-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-transferthick-e-w\"><span class=\"ui-icon ui-icon-transferthick-e-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-folder-collapsed\"><span class=\"ui-icon ui-icon-folder-collapsed\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-folder-open\"><span class=\"ui-icon ui-icon-folder-open\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-document\"><span class=\"ui-icon ui-icon-document\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-document-b\"><span class=\"ui-icon ui-icon-document-b\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-note\"><span class=\"ui-icon ui-icon-note\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-mail-closed\"><span class=\"ui-icon ui-icon-mail-closed\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-mail-open\"><span class=\"ui-icon ui-icon-mail-open\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-suitcase\"><span class=\"ui-icon ui-icon-suitcase\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-comment\"><span class=\"ui-icon ui-icon-comment\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-person\"><span class=\"ui-icon ui-icon-person\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-print\"><span class=\"ui-icon ui-icon-print\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-trash\"><span class=\"ui-icon ui-icon-trash\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-locked\"><span class=\"ui-icon ui-icon-locked\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-unlocked\"><span class=\"ui-icon ui-icon-unlocked\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-bookmark\"><span class=\"ui-icon ui-icon-bookmark\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-tag\"><span class=\"ui-icon ui-icon-tag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-home\"><span class=\"ui-icon ui-icon-home\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-flag\"><span class=\"ui-icon ui-icon-flag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-calculator\"><span class=\"ui-icon ui-icon-calculator\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-cart\"><span class=\"ui-icon ui-icon-cart\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pencil\"><span class=\"ui-icon ui-icon-pencil\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-clock\"><span class=\"ui-icon ui-icon-clock\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-disk\"><span class=\"ui-icon ui-icon-disk\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-calendar\"><span class=\"ui-icon ui-icon-calendar\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-zoomin\"><span class=\"ui-icon ui-icon-zoomin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-zoomout\"><span class=\"ui-icon ui-icon-zoomout\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-search\"><span class=\"ui-icon ui-icon-search\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-wrench\"><span class=\"ui-icon ui-icon-wrench\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-gear\"><span class=\"ui-icon ui-icon-gear\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-heart\"><span class=\"ui-icon ui-icon-heart\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-star\"><span class=\"ui-icon ui-icon-star\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-link\"><span class=\"ui-icon ui-icon-link\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-cancel\"><span class=\"ui-icon ui-icon-cancel\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-plus\"><span class=\"ui-icon ui-icon-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-plusthick\"><span class=\"ui-icon ui-icon-plusthick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-minus\"><span class=\"ui-icon ui-icon-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-minusthick\"><span class=\"ui-icon ui-icon-minusthick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-close\"><span class=\"ui-icon ui-icon-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-closethick\"><span class=\"ui-icon ui-icon-closethick\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-key\"><span class=\"ui-icon ui-icon-key\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-lightbulb\"><span class=\"ui-icon ui-icon-lightbulb\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-scissors\"><span class=\"ui-icon ui-icon-scissors\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-clipboard\"><span class=\"ui-icon ui-icon-clipboard\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-copy\"><span class=\"ui-icon ui-icon-copy\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-contact\"><span class=\"ui-icon ui-icon-contact\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-image\"><span class=\"ui-icon ui-icon-image\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-video\"><span class=\"ui-icon ui-icon-video\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-script\"><span class=\"ui-icon ui-icon-script\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-alert\"><span class=\"ui-icon ui-icon-alert\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-info\"><span class=\"ui-icon ui-icon-info\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-notice\"><span class=\"ui-icon ui-icon-notice\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-help\"><span class=\"ui-icon ui-icon-help\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-check\"><span class=\"ui-icon ui-icon-check\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-bullet\"><span class=\"ui-icon ui-icon-bullet\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-radio-off\"><span class=\"ui-icon ui-icon-radio-off\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-radio-on\"><span class=\"ui-icon ui-icon-radio-on\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pin-w\"><span class=\"ui-icon ui-icon-pin-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pin-s\"><span class=\"ui-icon ui-icon-pin-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-play\"><span class=\"ui-icon ui-icon-play\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-pause\"><span class=\"ui-icon ui-icon-pause\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-next\"><span class=\"ui-icon ui-icon-seek-next\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-prev\"><span class=\"ui-icon ui-icon-seek-prev\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-end\"><span class=\"ui-icon ui-icon-seek-end\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-seek-first\"><span class=\"ui-icon ui-icon-seek-first\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-stop\"><span class=\"ui-icon ui-icon-stop\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-eject\"><span class=\"ui-icon ui-icon-eject\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-volume-off\"><span class=\"ui-icon ui-icon-volume-off\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-volume-on\"><span class=\"ui-icon ui-icon-volume-on\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-power\"><span class=\"ui-icon ui-icon-power\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-signal-diag\"><span class=\"ui-icon ui-icon-signal-diag\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-signal\"><span class=\"ui-icon ui-icon-signal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-0\"><span class=\"ui-icon ui-icon-battery-0\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-1\"><span class=\"ui-icon ui-icon-battery-1\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-2\"><span class=\"ui-icon ui-icon-battery-2\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-battery-3\"><span class=\"ui-icon ui-icon-battery-3\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-plus\"><span class=\"ui-icon ui-icon-circle-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-minus\"><span class=\"ui-icon ui-icon-circle-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-close\"><span class=\"ui-icon ui-icon-circle-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-e\"><span class=\"ui-icon ui-icon-circle-triangle-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-s\"><span class=\"ui-icon ui-icon-circle-triangle-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-w\"><span class=\"ui-icon ui-icon-circle-triangle-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-triangle-n\"><span class=\"ui-icon ui-icon-circle-triangle-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-e\"><span class=\"ui-icon ui-icon-circle-arrow-e\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-s\"><span class=\"ui-icon ui-icon-circle-arrow-s\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-w\"><span class=\"ui-icon ui-icon-circle-arrow-w\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-arrow-n\"><span class=\"ui-icon ui-icon-circle-arrow-n\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-zoomin\"><span class=\"ui-icon ui-icon-circle-zoomin\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-zoomout\"><span class=\"ui-icon ui-icon-circle-zoomout\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circle-check\"><span class=\"ui-icon ui-icon-circle-check\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-plus\"><span class=\"ui-icon ui-icon-circlesmall-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-minus\"><span class=\"ui-icon ui-icon-circlesmall-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-circlesmall-close\"><span class=\"ui-icon ui-icon-circlesmall-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-plus\"><span class=\"ui-icon ui-icon-squaresmall-plus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-minus\"><span class=\"ui-icon ui-icon-squaresmall-minus\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-squaresmall-close\"><span class=\"ui-icon ui-icon-squaresmall-close\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-dotted-vertical\"><span class=\"ui-icon ui-icon-grip-dotted-vertical\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-dotted-horizontal\"><span class=\"ui-icon ui-icon-grip-dotted-horizontal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-solid-vertical\"><span class=\"ui-icon ui-icon-grip-solid-vertical\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-solid-horizontal\"><span class=\"ui-icon ui-icon-grip-solid-horizontal\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-gripsmall-diagonal-se\"><span class=\"ui-icon ui-icon-gripsmall-diagonal-se\"></span></li>\n\t<li class=\"ui-state-default ui-corner-all\" title=\".ui-icon-grip-diagonal-se\"><span class=\"ui-icon ui-icon-grip-diagonal-se\"></span></li>\n</ul>\n\n\n<!-- Slider -->\n<h2 class=\"demoHeaders\">Slider</h2>\n<div id=\"slider\"></div>\n\n\n\n<!-- Datepicker -->\n<h2 class=\"demoHeaders\">Datepicker</h2>\n<div id=\"datepicker\"></div>\n\n\n\n<!-- Progressbar -->\n<h2 class=\"demoHeaders\">Progressbar</h2>\n<div id=\"progressbar\"></div>\n\n\n\n<!-- Progressbar -->\n<h2 class=\"demoHeaders\">Selectmenu</h2>\n<select id=\"selectmenu\">\n\t<option>Slower</option>\n\t<option>Slow</option>\n\t<option selected=\"selected\">Medium</option>\n\t<option>Fast</option>\n\t<option>Faster</option>\n</select>\n\n\n\n<!-- Spinner -->\n<h2 class=\"demoHeaders\">Spinner</h2>\n<input id=\"spinner\">\n\n\n\n<!-- Menu -->\n<h2 class=\"demoHeaders\">Menu</h2>\n<ul style=\"width:100px;\" id=\"menu\">\n\t<li><div>Item 1</div></li>\n\t<li><div>Item 2</div></li>\n\t<li><div>Item 3</div>\n\t\t<ul>\n\t\t\t<li><div>Item 3-1</div></li>\n\t\t\t<li><div>Item 3-2</div></li>\n\t\t\t<li><div>Item 3-3</div></li>\n\t\t\t<li><div>Item 3-4</div></li>\n\t\t\t<li><div>Item 3-5</div></li>\n\t\t</ul>\n\t</li>\n\t<li><div>Item 4</div></li>\n\t<li><div>Item 5</div></li>\n</ul>\n\n\n\n<!-- Tooltip -->\n<h2 class=\"demoHeaders\">Tooltip</h2>\n<p id=\"tooltip\">\n\t<a href=\"#\" title=\"That&apos;s what this widget is\">Tooltips</a> can be attached to any element. When you hover\nthe element with your mouse, the title attribute is displayed in a little box next to the element, just like a native tooltip.\n</p>\n\n\n<!-- Highlight / Error -->\n<h2 class=\"demoHeaders\">Highlight / Error</h2>\n<div class=\"ui-widget\">\n\t<div class=\"ui-state-highlight ui-corner-all\" style=\"margin-top: 20px; padding: 0 .7em;\">\n\t\t<p><span class=\"ui-icon ui-icon-info\" style=\"float: left; margin-right: .3em;\"></span>\n\t\t<strong>Hey!</strong> Sample ui-state-highlight style.</p>\n\t</div>\n</div>\n<br>\n<div class=\"ui-widget\">\n\t<div class=\"ui-state-error ui-corner-all\" style=\"padding: 0 .7em;\">\n\t\t<p><span class=\"ui-icon ui-icon-alert\" style=\"float: left; margin-right: .3em;\"></span>\n\t\t<strong>Alert:</strong> Sample ui-state-error style.</p>\n\t</div>\n</div>\n\n<script src=\"external/jquery/jquery.js\"></script>\n<script src=\"jquery-ui.js\"></script>\n<script>\n\n$( \"#accordion\" ).accordion();\n\n\n\nvar availableTags = [\n\t\"ActionScript\",\n\t\"AppleScript\",\n\t\"Asp\",\n\t\"BASIC\",\n\t\"C\",\n\t\"C++\",\n\t\"Clojure\",\n\t\"COBOL\",\n\t\"ColdFusion\",\n\t\"Erlang\",\n\t\"Fortran\",\n\t\"Groovy\",\n\t\"Haskell\",\n\t\"Java\",\n\t\"JavaScript\",\n\t\"Lisp\",\n\t\"Perl\",\n\t\"PHP\",\n\t\"Python\",\n\t\"Ruby\",\n\t\"Scala\",\n\t\"Scheme\"\n];\n$( \"#autocomplete\" ).autocomplete({\n\tsource: availableTags\n});\n\n\n\n$( \"#button\" ).button();\n$( \"#button-icon\" ).button({\n\ticon: \"ui-icon-gear\",\n\tshowLabel: false\n});\n\n\n\n$( \"#radioset\" ).buttonset();\n\n\n\n$( \"#controlgroup\" ).controlgroup();\n\n\n\n$( \"#tabs\" ).tabs();\n\n\n\n$( \"#dialog\" ).dialog({\n\tautoOpen: false,\n\twidth: 400,\n\tbuttons: [\n\t\t{\n\t\t\ttext: \"Ok\",\n\t\t\tclick: function() {\n\t\t\t\t$( this ).dialog( \"close\" );\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\ttext: \"Cancel\",\n\t\t\tclick: function() {\n\t\t\t\t$( this ).dialog( \"close\" );\n\t\t\t}\n\t\t}\n\t]\n});\n\n// Link to open the dialog\n$( \"#dialog-link\" ).click(function( event ) {\n\t$( \"#dialog\" ).dialog( \"open\" );\n\tevent.preventDefault();\n});\n\n\n\n$( \"#datepicker\" ).datepicker({\n\tinline: true\n});\n\n\n\n$( \"#slider\" ).slider({\n\trange: true,\n\tvalues: [ 17, 67 ]\n});\n\n\n\n$( \"#progressbar\" ).progressbar({\n\tvalue: 20\n});\n\n\n\n$( \"#spinner\" ).spinner();\n\n\n\n$( \"#menu\" ).menu();\n\n\n\n$( \"#tooltip\" ).tooltip();\n\n\n\n$( \"#selectmenu\" ).selectmenu();\n\n\n// Hover states on the static widgets\n$( \"#dialog-link, #icons li\" ).hover(\n\tfunction() {\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t},\n\tfunction() {\n\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t}\n);\n</script>\n</body>\n</html>\n"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/jquery-ui.css",
    "content": "/*! jQuery UI - v1.12.1 - 2016-09-14\n* http://jqueryui.com\n* Includes: core.css, accordion.css, autocomplete.css, menu.css, button.css, controlgroup.css, checkboxradio.css, datepicker.css, dialog.css, draggable.css, resizable.css, progressbar.css, selectable.css, selectmenu.css, slider.css, sortable.css, spinner.css, tabs.css, tooltip.css, theme.css\n* To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: 0;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tcursor: pointer;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-item-wrapper {\n\tposition: relative;\n\tpadding: 3px 1em 3px .4em;\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item-wrapper {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-button {\n\tpadding: .4em 1em;\n\tdisplay: inline-block;\n\tposition: relative;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n\t/* Support: IE <= 11 */\n\toverflow: visible;\n}\n\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2em;\n\tbox-sizing: border-box;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n}\n\n/* no icon support for input elements */\ninput.ui-button.ui-button-icon-only {\n\ttext-indent: 0;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -8px;\n\tmargin-left: -8px;\n}\n\n.ui-button.ui-icon-notext .ui-icon {\n\tpadding: 0;\n\twidth: 2.1em;\n\theight: 2.1em;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n\n}\n\ninput.ui-button.ui-icon-notext .ui-icon {\n\twidth: auto;\n\theight: auto;\n\ttext-indent: 0;\n\twhite-space: normal;\n\tpadding: .4em 1em;\n}\n\n/* workarounds */\n/* Support: Firefox 5 - 40 */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-controlgroup {\n\tvertical-align: middle;\n\tdisplay: inline-block;\n}\n.ui-controlgroup > .ui-controlgroup-item {\n\tfloat: left;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n.ui-controlgroup > .ui-controlgroup-item:focus,\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\n\tz-index: 9999;\n}\n.ui-controlgroup-vertical > .ui-controlgroup-item {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\ttext-align: left;\n}\n.ui-controlgroup-vertical .ui-controlgroup-item {\n\tbox-sizing: border-box;\n}\n.ui-controlgroup .ui-controlgroup-label {\n\tpadding: .4em 1em;\n}\n.ui-controlgroup .ui-controlgroup-label span {\n\tfont-size: 80%;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-left: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-top: none;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\n\tborder-right: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\n\tborder-bottom: none;\n}\n\n/* Spinner specific style fixes */\n.ui-controlgroup-vertical .ui-spinner-input {\n\n\t/* Support: IE8 only, Android < 4.4 only */\n\twidth: 75%;\n\twidth: calc( 100% - 2.4em );\n}\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\n\tborder-top-style: solid;\n}\n\n.ui-checkboxradio-label .ui-icon-background {\n\tbox-shadow: inset 1px 1px 1px #ccc;\n\tborder-radius: .12em;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label .ui-icon-background {\n\twidth: 16px;\n\theight: 16px;\n\tborder-radius: 1em;\n\toverflow: visible;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\n\tbackground-image: none;\n\twidth: 8px;\n\theight: 8px;\n\tborder-width: 4px;\n\tborder-style: solid;\n}\n.ui-checkboxradio-disabled {\n\tpointer-events: none;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}\n.ui-dialog {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-n {\n\theight: 2px;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-e {\n\twidth: 2px;\n\tright: 0;\n}\n.ui-dialog .ui-resizable-s {\n\theight: 2px;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-w {\n\twidth: 2px;\n\tleft: 0;\n}\n.ui-dialog .ui-resizable-se,\n.ui-dialog .ui-resizable-sw,\n.ui-dialog .ui-resizable-ne,\n.ui-dialog .ui-resizable-nw {\n\twidth: 7px;\n\theight: 7px;\n}\n.ui-dialog .ui-resizable-se {\n\tright: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-sw {\n\tleft: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-ne {\n\tright: 0;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-nw {\n\tleft: 0;\n\ttop: 0;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-text {\n\tdisplay: block;\n\tmargin-right: 20px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-selectmenu-button.ui-button {\n\ttext-align: left;\n\twhite-space: nowrap;\n\twidth: 14em;\n}\n.ui-selectmenu-icon.ui-icon {\n\tfloat: right;\n\tmargin-top: 0;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: .222em 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 2em;\n}\n.ui-spinner-button {\n\twidth: 1.6em;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top-style: none;\n\tborder-bottom-style: none;\n\tborder-right-style: none;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #ffffff;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd;\n\tbackground: #e9e9e9;\n\tcolor: #333333;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5;\n\tbackground: #f6f6f6;\n\tfont-weight: normal;\n\tcolor: #454545;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc;\n\tbackground: #ededed;\n\tfont-weight: normal;\n\tcolor: #2b2b2b;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff;\n\tbackground: #007fff;\n\tfont-weight: normal;\n\tcolor: #ffffff;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff;\n\tbackground-color: #ffffff;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n\tcolor: #777620;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899;\n\tbackground: #fddfdf;\n\tcolor: #5f3f3f;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url(\"images/ui-icons_555555_256x240.png\");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffffff_256x240.png\");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url(\"images/ui-icons_777620_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"images/ui-icons_cc0000_256x240.png\");\n}\n.ui-button .ui-icon {\n\tbackground-image: url(\"images/ui-icons_777777_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa;\n\topacity: .003;\n\tfilter: Alpha(Opacity=.3); /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0px 0px 5px #666666;\n\tbox-shadow: 0px 0px 5px #666666;\n}\n"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/jquery-ui.js",
    "content": "/*! jQuery UI - v1.12.1 - 2016-09-14\n* http://jqueryui.com\n* Includes: widget.js, position.js, data.js, disable-selection.js, effect.js, effects/effect-blind.js, effects/effect-bounce.js, effects/effect-clip.js, effects/effect-drop.js, effects/effect-explode.js, effects/effect-fade.js, effects/effect-fold.js, effects/effect-highlight.js, effects/effect-puff.js, effects/effect-pulsate.js, effects/effect-scale.js, effects/effect-shake.js, effects/effect-size.js, effects/effect-slide.js, effects/effect-transfer.js, focusable.js, form-reset-mixin.js, jquery-1-7.js, keycode.js, labels.js, scroll-parent.js, tabbable.js, unique-id.js, widgets/accordion.js, widgets/autocomplete.js, widgets/button.js, widgets/checkboxradio.js, widgets/controlgroup.js, widgets/datepicker.js, widgets/dialog.js, widgets/draggable.js, widgets/droppable.js, widgets/menu.js, widgets/mouse.js, widgets/progressbar.js, widgets/resizable.js, widgets/selectable.js, widgets/selectmenu.js, widgets/slider.js, widgets/sortable.js, widgets/spinner.js, widgets/tabs.js, widgets/tooltip.js\n* Copyright jQuery Foundation and other contributors; Licensed MIT */\n\n(function( factory ) {\n\tif ( typeof define === \"function\" && define.amd ) {\n\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([ \"jquery\" ], factory );\n\t} else {\n\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.ui = $.ui || {};\n\nvar version = $.ui.version = \"1.12.1\";\n\n\n/*!\n * jQuery UI Widget 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Widget\n//>>group: Core\n//>>description: Provides a factory for creating stateful widgets with a common API.\n//>>docs: http://api.jqueryui.com/jQuery.widget/\n//>>demos: http://jqueryui.com/widget/\n\n\n\nvar widgetUuid = 0;\nvar widgetSlice = Array.prototype.slice;\n\n$.cleanData = ( function( orig ) {\n\treturn function( elems ) {\n\t\tvar events, elem, i;\n\t\tfor ( i = 0; ( elem = elems[ i ] ) != null; i++ ) {\n\t\t\ttry {\n\n\t\t\t\t// Only trigger remove when necessary to save time\n\t\t\t\tevents = $._data( elem, \"events\" );\n\t\t\t\tif ( events && events.remove ) {\n\t\t\t\t\t$( elem ).triggerHandler( \"remove\" );\n\t\t\t\t}\n\n\t\t\t// Http://bugs.jquery.com/ticket/8235\n\t\t\t} catch ( e ) {}\n\t\t}\n\t\torig( elems );\n\t};\n} )( $.cleanData );\n\n$.widget = function( name, base, prototype ) {\n\tvar existingConstructor, constructor, basePrototype;\n\n\t// ProxiedPrototype allows the provided prototype to remain unmodified\n\t// so that it can be used as a mixin for multiple widgets (#8876)\n\tvar proxiedPrototype = {};\n\n\tvar namespace = name.split( \".\" )[ 0 ];\n\tname = name.split( \".\" )[ 1 ];\n\tvar fullName = namespace + \"-\" + name;\n\n\tif ( !prototype ) {\n\t\tprototype = base;\n\t\tbase = $.Widget;\n\t}\n\n\tif ( $.isArray( prototype ) ) {\n\t\tprototype = $.extend.apply( null, [ {} ].concat( prototype ) );\n\t}\n\n\t// Create selector for plugin\n\t$.expr[ \":\" ][ fullName.toLowerCase() ] = function( elem ) {\n\t\treturn !!$.data( elem, fullName );\n\t};\n\n\t$[ namespace ] = $[ namespace ] || {};\n\texistingConstructor = $[ namespace ][ name ];\n\tconstructor = $[ namespace ][ name ] = function( options, element ) {\n\n\t\t// Allow instantiation without \"new\" keyword\n\t\tif ( !this._createWidget ) {\n\t\t\treturn new constructor( options, element );\n\t\t}\n\n\t\t// Allow instantiation without initializing for simple inheritance\n\t\t// must use \"new\" keyword (the code above always passes args)\n\t\tif ( arguments.length ) {\n\t\t\tthis._createWidget( options, element );\n\t\t}\n\t};\n\n\t// Extend with the existing constructor to carry over any static properties\n\t$.extend( constructor, existingConstructor, {\n\t\tversion: prototype.version,\n\n\t\t// Copy the object used to create the prototype in case we need to\n\t\t// redefine the widget later\n\t\t_proto: $.extend( {}, prototype ),\n\n\t\t// Track widgets that inherit from this widget in case this widget is\n\t\t// redefined after a widget inherits from it\n\t\t_childConstructors: []\n\t} );\n\n\tbasePrototype = new base();\n\n\t// We need to make the options hash a property directly on the new instance\n\t// otherwise we'll modify the options hash on the prototype that we're\n\t// inheriting from\n\tbasePrototype.options = $.widget.extend( {}, basePrototype.options );\n\t$.each( prototype, function( prop, value ) {\n\t\tif ( !$.isFunction( value ) ) {\n\t\t\tproxiedPrototype[ prop ] = value;\n\t\t\treturn;\n\t\t}\n\t\tproxiedPrototype[ prop ] = ( function() {\n\t\t\tfunction _super() {\n\t\t\t\treturn base.prototype[ prop ].apply( this, arguments );\n\t\t\t}\n\n\t\t\tfunction _superApply( args ) {\n\t\t\t\treturn base.prototype[ prop ].apply( this, args );\n\t\t\t}\n\n\t\t\treturn function() {\n\t\t\t\tvar __super = this._super;\n\t\t\t\tvar __superApply = this._superApply;\n\t\t\t\tvar returnValue;\n\n\t\t\t\tthis._super = _super;\n\t\t\t\tthis._superApply = _superApply;\n\n\t\t\t\treturnValue = value.apply( this, arguments );\n\n\t\t\t\tthis._super = __super;\n\t\t\t\tthis._superApply = __superApply;\n\n\t\t\t\treturn returnValue;\n\t\t\t};\n\t\t} )();\n\t} );\n\tconstructor.prototype = $.widget.extend( basePrototype, {\n\n\t\t// TODO: remove support for widgetEventPrefix\n\t\t// always use the name + a colon as the prefix, e.g., draggable:start\n\t\t// don't prefix for widgets that aren't DOM-based\n\t\twidgetEventPrefix: existingConstructor ? ( basePrototype.widgetEventPrefix || name ) : name\n\t}, proxiedPrototype, {\n\t\tconstructor: constructor,\n\t\tnamespace: namespace,\n\t\twidgetName: name,\n\t\twidgetFullName: fullName\n\t} );\n\n\t// If this widget is being redefined then we need to find all widgets that\n\t// are inheriting from it and redefine all of them so that they inherit from\n\t// the new version of this widget. We're essentially trying to replace one\n\t// level in the prototype chain.\n\tif ( existingConstructor ) {\n\t\t$.each( existingConstructor._childConstructors, function( i, child ) {\n\t\t\tvar childPrototype = child.prototype;\n\n\t\t\t// Redefine the child widget using the same prototype that was\n\t\t\t// originally used, but inherit from the new version of the base\n\t\t\t$.widget( childPrototype.namespace + \".\" + childPrototype.widgetName, constructor,\n\t\t\t\tchild._proto );\n\t\t} );\n\n\t\t// Remove the list of existing child constructors from the old constructor\n\t\t// so the old child constructors can be garbage collected\n\t\tdelete existingConstructor._childConstructors;\n\t} else {\n\t\tbase._childConstructors.push( constructor );\n\t}\n\n\t$.widget.bridge( name, constructor );\n\n\treturn constructor;\n};\n\n$.widget.extend = function( target ) {\n\tvar input = widgetSlice.call( arguments, 1 );\n\tvar inputIndex = 0;\n\tvar inputLength = input.length;\n\tvar key;\n\tvar value;\n\n\tfor ( ; inputIndex < inputLength; inputIndex++ ) {\n\t\tfor ( key in input[ inputIndex ] ) {\n\t\t\tvalue = input[ inputIndex ][ key ];\n\t\t\tif ( input[ inputIndex ].hasOwnProperty( key ) && value !== undefined ) {\n\n\t\t\t\t// Clone objects\n\t\t\t\tif ( $.isPlainObject( value ) ) {\n\t\t\t\t\ttarget[ key ] = $.isPlainObject( target[ key ] ) ?\n\t\t\t\t\t\t$.widget.extend( {}, target[ key ], value ) :\n\n\t\t\t\t\t\t// Don't extend strings, arrays, etc. with objects\n\t\t\t\t\t\t$.widget.extend( {}, value );\n\n\t\t\t\t// Copy everything else by reference\n\t\t\t\t} else {\n\t\t\t\t\ttarget[ key ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn target;\n};\n\n$.widget.bridge = function( name, object ) {\n\tvar fullName = object.prototype.widgetFullName || name;\n\t$.fn[ name ] = function( options ) {\n\t\tvar isMethodCall = typeof options === \"string\";\n\t\tvar args = widgetSlice.call( arguments, 1 );\n\t\tvar returnValue = this;\n\n\t\tif ( isMethodCall ) {\n\n\t\t\t// If this is an empty collection, we need to have the instance method\n\t\t\t// return undefined instead of the jQuery instance\n\t\t\tif ( !this.length && options === \"instance\" ) {\n\t\t\t\treturnValue = undefined;\n\t\t\t} else {\n\t\t\t\tthis.each( function() {\n\t\t\t\t\tvar methodValue;\n\t\t\t\t\tvar instance = $.data( this, fullName );\n\n\t\t\t\t\tif ( options === \"instance\" ) {\n\t\t\t\t\t\treturnValue = instance;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\treturn $.error( \"cannot call methods on \" + name +\n\t\t\t\t\t\t\t\" prior to initialization; \" +\n\t\t\t\t\t\t\t\"attempted to call method '\" + options + \"'\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !$.isFunction( instance[ options ] ) || options.charAt( 0 ) === \"_\" ) {\n\t\t\t\t\t\treturn $.error( \"no such method '\" + options + \"' for \" + name +\n\t\t\t\t\t\t\t\" widget instance\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tmethodValue = instance[ options ].apply( instance, args );\n\n\t\t\t\t\tif ( methodValue !== instance && methodValue !== undefined ) {\n\t\t\t\t\t\treturnValue = methodValue && methodValue.jquery ?\n\t\t\t\t\t\t\treturnValue.pushStack( methodValue.get() ) :\n\t\t\t\t\t\t\tmethodValue;\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} else {\n\n\t\t\t// Allow multiple hashes to be passed on init\n\t\t\tif ( args.length ) {\n\t\t\t\toptions = $.widget.extend.apply( null, [ options ].concat( args ) );\n\t\t\t}\n\n\t\t\tthis.each( function() {\n\t\t\t\tvar instance = $.data( this, fullName );\n\t\t\t\tif ( instance ) {\n\t\t\t\t\tinstance.option( options || {} );\n\t\t\t\t\tif ( instance._init ) {\n\t\t\t\t\t\tinstance._init();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t$.data( this, fullName, new object( options, this ) );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\treturn returnValue;\n\t};\n};\n\n$.Widget = function( /* options, element */ ) {};\n$.Widget._childConstructors = [];\n\n$.Widget.prototype = {\n\twidgetName: \"widget\",\n\twidgetEventPrefix: \"\",\n\tdefaultElement: \"<div>\",\n\n\toptions: {\n\t\tclasses: {},\n\t\tdisabled: false,\n\n\t\t// Callbacks\n\t\tcreate: null\n\t},\n\n\t_createWidget: function( options, element ) {\n\t\telement = $( element || this.defaultElement || this )[ 0 ];\n\t\tthis.element = $( element );\n\t\tthis.uuid = widgetUuid++;\n\t\tthis.eventNamespace = \".\" + this.widgetName + this.uuid;\n\n\t\tthis.bindings = $();\n\t\tthis.hoverable = $();\n\t\tthis.focusable = $();\n\t\tthis.classesElementLookup = {};\n\n\t\tif ( element !== this ) {\n\t\t\t$.data( element, this.widgetFullName, this );\n\t\t\tthis._on( true, this.element, {\n\t\t\t\tremove: function( event ) {\n\t\t\t\t\tif ( event.target === element ) {\n\t\t\t\t\t\tthis.destroy();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t\tthis.document = $( element.style ?\n\n\t\t\t\t// Element within the document\n\t\t\t\telement.ownerDocument :\n\n\t\t\t\t// Element is window or document\n\t\t\t\telement.document || element );\n\t\t\tthis.window = $( this.document[ 0 ].defaultView || this.document[ 0 ].parentWindow );\n\t\t}\n\n\t\tthis.options = $.widget.extend( {},\n\t\t\tthis.options,\n\t\t\tthis._getCreateOptions(),\n\t\t\toptions );\n\n\t\tthis._create();\n\n\t\tif ( this.options.disabled ) {\n\t\t\tthis._setOptionDisabled( this.options.disabled );\n\t\t}\n\n\t\tthis._trigger( \"create\", null, this._getCreateEventData() );\n\t\tthis._init();\n\t},\n\n\t_getCreateOptions: function() {\n\t\treturn {};\n\t},\n\n\t_getCreateEventData: $.noop,\n\n\t_create: $.noop,\n\n\t_init: $.noop,\n\n\tdestroy: function() {\n\t\tvar that = this;\n\n\t\tthis._destroy();\n\t\t$.each( this.classesElementLookup, function( key, value ) {\n\t\t\tthat._removeClass( value, key );\n\t\t} );\n\n\t\t// We can probably remove the unbind calls in 2.0\n\t\t// all event bindings should go through this._on()\n\t\tthis.element\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeData( this.widgetFullName );\n\t\tthis.widget()\n\t\t\t.off( this.eventNamespace )\n\t\t\t.removeAttr( \"aria-disabled\" );\n\n\t\t// Clean up events and states\n\t\tthis.bindings.off( this.eventNamespace );\n\t},\n\n\t_destroy: $.noop,\n\n\twidget: function() {\n\t\treturn this.element;\n\t},\n\n\toption: function( key, value ) {\n\t\tvar options = key;\n\t\tvar parts;\n\t\tvar curOption;\n\t\tvar i;\n\n\t\tif ( arguments.length === 0 ) {\n\n\t\t\t// Don't return a reference to the internal hash\n\t\t\treturn $.widget.extend( {}, this.options );\n\t\t}\n\n\t\tif ( typeof key === \"string\" ) {\n\n\t\t\t// Handle nested keys, e.g., \"foo.bar\" => { foo: { bar: ___ } }\n\t\t\toptions = {};\n\t\t\tparts = key.split( \".\" );\n\t\t\tkey = parts.shift();\n\t\t\tif ( parts.length ) {\n\t\t\t\tcurOption = options[ key ] = $.widget.extend( {}, this.options[ key ] );\n\t\t\t\tfor ( i = 0; i < parts.length - 1; i++ ) {\n\t\t\t\t\tcurOption[ parts[ i ] ] = curOption[ parts[ i ] ] || {};\n\t\t\t\t\tcurOption = curOption[ parts[ i ] ];\n\t\t\t\t}\n\t\t\t\tkey = parts.pop();\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn curOption[ key ] === undefined ? null : curOption[ key ];\n\t\t\t\t}\n\t\t\t\tcurOption[ key ] = value;\n\t\t\t} else {\n\t\t\t\tif ( arguments.length === 1 ) {\n\t\t\t\t\treturn this.options[ key ] === undefined ? null : this.options[ key ];\n\t\t\t\t}\n\t\t\t\toptions[ key ] = value;\n\t\t\t}\n\t\t}\n\n\t\tthis._setOptions( options );\n\n\t\treturn this;\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar key;\n\n\t\tfor ( key in options ) {\n\t\t\tthis._setOption( key, options[ key ] );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"classes\" ) {\n\t\t\tthis._setOptionClasses( value );\n\t\t}\n\n\t\tthis.options[ key ] = value;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._setOptionDisabled( value );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_setOptionClasses: function( value ) {\n\t\tvar classKey, elements, currentElements;\n\n\t\tfor ( classKey in value ) {\n\t\t\tcurrentElements = this.classesElementLookup[ classKey ];\n\t\t\tif ( value[ classKey ] === this.options.classes[ classKey ] ||\n\t\t\t\t\t!currentElements ||\n\t\t\t\t\t!currentElements.length ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// We are doing this to create a new jQuery object because the _removeClass() call\n\t\t\t// on the next line is going to destroy the reference to the current elements being\n\t\t\t// tracked. We need to save a copy of this collection so that we can add the new classes\n\t\t\t// below.\n\t\t\telements = $( currentElements.get() );\n\t\t\tthis._removeClass( currentElements, classKey );\n\n\t\t\t// We don't use _addClass() here, because that uses this.options.classes\n\t\t\t// for generating the string of classes. We want to use the value passed in from\n\t\t\t// _setOption(), this is the new value of the classes option which was passed to\n\t\t\t// _setOption(). We pass this value directly to _classes().\n\t\t\telements.addClass( this._classes( {\n\t\t\t\telement: elements,\n\t\t\t\tkeys: classKey,\n\t\t\t\tclasses: value,\n\t\t\t\tadd: true\n\t\t\t} ) );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null, !!value );\n\n\t\t// If the widget is becoming disabled, then nothing is interactive\n\t\tif ( value ) {\n\t\t\tthis._removeClass( this.hoverable, null, \"ui-state-hover\" );\n\t\t\tthis._removeClass( this.focusable, null, \"ui-state-focus\" );\n\t\t}\n\t},\n\n\tenable: function() {\n\t\treturn this._setOptions( { disabled: false } );\n\t},\n\n\tdisable: function() {\n\t\treturn this._setOptions( { disabled: true } );\n\t},\n\n\t_classes: function( options ) {\n\t\tvar full = [];\n\t\tvar that = this;\n\n\t\toptions = $.extend( {\n\t\t\telement: this.element,\n\t\t\tclasses: this.options.classes || {}\n\t\t}, options );\n\n\t\tfunction processClassString( classes, checkOption ) {\n\t\t\tvar current, i;\n\t\t\tfor ( i = 0; i < classes.length; i++ ) {\n\t\t\t\tcurrent = that.classesElementLookup[ classes[ i ] ] || $();\n\t\t\t\tif ( options.add ) {\n\t\t\t\t\tcurrent = $( $.unique( current.get().concat( options.element.get() ) ) );\n\t\t\t\t} else {\n\t\t\t\t\tcurrent = $( current.not( options.element ).get() );\n\t\t\t\t}\n\t\t\t\tthat.classesElementLookup[ classes[ i ] ] = current;\n\t\t\t\tfull.push( classes[ i ] );\n\t\t\t\tif ( checkOption && options.classes[ classes[ i ] ] ) {\n\t\t\t\t\tfull.push( options.classes[ classes[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._on( options.element, {\n\t\t\t\"remove\": \"_untrackClassesElement\"\n\t\t} );\n\n\t\tif ( options.keys ) {\n\t\t\tprocessClassString( options.keys.match( /\\S+/g ) || [], true );\n\t\t}\n\t\tif ( options.extra ) {\n\t\t\tprocessClassString( options.extra.match( /\\S+/g ) || [] );\n\t\t}\n\n\t\treturn full.join( \" \" );\n\t},\n\n\t_untrackClassesElement: function( event ) {\n\t\tvar that = this;\n\t\t$.each( that.classesElementLookup, function( key, value ) {\n\t\t\tif ( $.inArray( event.target, value ) !== -1 ) {\n\t\t\t\tthat.classesElementLookup[ key ] = $( value.not( event.target ).get() );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_removeClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, false );\n\t},\n\n\t_addClass: function( element, keys, extra ) {\n\t\treturn this._toggleClass( element, keys, extra, true );\n\t},\n\n\t_toggleClass: function( element, keys, extra, add ) {\n\t\tadd = ( typeof add === \"boolean\" ) ? add : extra;\n\t\tvar shift = ( typeof element === \"string\" || element === null ),\n\t\t\toptions = {\n\t\t\t\textra: shift ? keys : extra,\n\t\t\t\tkeys: shift ? element : keys,\n\t\t\t\telement: shift ? this.element : element,\n\t\t\t\tadd: add\n\t\t\t};\n\t\toptions.element.toggleClass( this._classes( options ), add );\n\t\treturn this;\n\t},\n\n\t_on: function( suppressDisabledCheck, element, handlers ) {\n\t\tvar delegateElement;\n\t\tvar instance = this;\n\n\t\t// No suppressDisabledCheck flag, shuffle arguments\n\t\tif ( typeof suppressDisabledCheck !== \"boolean\" ) {\n\t\t\thandlers = element;\n\t\t\telement = suppressDisabledCheck;\n\t\t\tsuppressDisabledCheck = false;\n\t\t}\n\n\t\t// No element argument, shuffle and use this.element\n\t\tif ( !handlers ) {\n\t\t\thandlers = element;\n\t\t\telement = this.element;\n\t\t\tdelegateElement = this.widget();\n\t\t} else {\n\t\t\telement = delegateElement = $( element );\n\t\t\tthis.bindings = this.bindings.add( element );\n\t\t}\n\n\t\t$.each( handlers, function( event, handler ) {\n\t\t\tfunction handlerProxy() {\n\n\t\t\t\t// Allow widgets to customize the disabled handling\n\t\t\t\t// - disabled as an array instead of boolean\n\t\t\t\t// - disabled class as method for disabling individual parts\n\t\t\t\tif ( !suppressDisabledCheck &&\n\t\t\t\t\t\t( instance.options.disabled === true ||\n\t\t\t\t\t\t$( this ).hasClass( \"ui-state-disabled\" ) ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t\t.apply( instance, arguments );\n\t\t\t}\n\n\t\t\t// Copy the guid so direct unbinding works\n\t\t\tif ( typeof handler !== \"string\" ) {\n\t\t\t\thandlerProxy.guid = handler.guid =\n\t\t\t\t\thandler.guid || handlerProxy.guid || $.guid++;\n\t\t\t}\n\n\t\t\tvar match = event.match( /^([\\w:-]*)\\s*(.*)$/ );\n\t\t\tvar eventName = match[ 1 ] + instance.eventNamespace;\n\t\t\tvar selector = match[ 2 ];\n\n\t\t\tif ( selector ) {\n\t\t\t\tdelegateElement.on( eventName, selector, handlerProxy );\n\t\t\t} else {\n\t\t\t\telement.on( eventName, handlerProxy );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_off: function( element, eventName ) {\n\t\teventName = ( eventName || \"\" ).split( \" \" ).join( this.eventNamespace + \" \" ) +\n\t\t\tthis.eventNamespace;\n\t\telement.off( eventName ).off( eventName );\n\n\t\t// Clear the stack to avoid memory leaks (#10056)\n\t\tthis.bindings = $( this.bindings.not( element ).get() );\n\t\tthis.focusable = $( this.focusable.not( element ).get() );\n\t\tthis.hoverable = $( this.hoverable.not( element ).get() );\n\t},\n\n\t_delay: function( handler, delay ) {\n\t\tfunction handlerProxy() {\n\t\t\treturn ( typeof handler === \"string\" ? instance[ handler ] : handler )\n\t\t\t\t.apply( instance, arguments );\n\t\t}\n\t\tvar instance = this;\n\t\treturn setTimeout( handlerProxy, delay || 0 );\n\t},\n\n\t_hoverable: function( element ) {\n\t\tthis.hoverable = this.hoverable.add( element );\n\t\tthis._on( element, {\n\t\t\tmouseenter: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t},\n\t\t\tmouseleave: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-hover\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_focusable: function( element ) {\n\t\tthis.focusable = this.focusable.add( element );\n\t\tthis._on( element, {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._addClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t},\n\t\t\tfocusout: function( event ) {\n\t\t\t\tthis._removeClass( $( event.currentTarget ), null, \"ui-state-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_trigger: function( type, event, data ) {\n\t\tvar prop, orig;\n\t\tvar callback = this.options[ type ];\n\n\t\tdata = data || {};\n\t\tevent = $.Event( event );\n\t\tevent.type = ( type === this.widgetEventPrefix ?\n\t\t\ttype :\n\t\t\tthis.widgetEventPrefix + type ).toLowerCase();\n\n\t\t// The original event may come from any element\n\t\t// so we need to reset the target on the new event\n\t\tevent.target = this.element[ 0 ];\n\n\t\t// Copy original event properties over to the new event\n\t\torig = event.originalEvent;\n\t\tif ( orig ) {\n\t\t\tfor ( prop in orig ) {\n\t\t\t\tif ( !( prop in event ) ) {\n\t\t\t\t\tevent[ prop ] = orig[ prop ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.element.trigger( event, data );\n\t\treturn !( $.isFunction( callback ) &&\n\t\t\tcallback.apply( this.element[ 0 ], [ event ].concat( data ) ) === false ||\n\t\t\tevent.isDefaultPrevented() );\n\t}\n};\n\n$.each( { show: \"fadeIn\", hide: \"fadeOut\" }, function( method, defaultEffect ) {\n\t$.Widget.prototype[ \"_\" + method ] = function( element, options, callback ) {\n\t\tif ( typeof options === \"string\" ) {\n\t\t\toptions = { effect: options };\n\t\t}\n\n\t\tvar hasOptions;\n\t\tvar effectName = !options ?\n\t\t\tmethod :\n\t\t\toptions === true || typeof options === \"number\" ?\n\t\t\t\tdefaultEffect :\n\t\t\t\toptions.effect || defaultEffect;\n\n\t\toptions = options || {};\n\t\tif ( typeof options === \"number\" ) {\n\t\t\toptions = { duration: options };\n\t\t}\n\n\t\thasOptions = !$.isEmptyObject( options );\n\t\toptions.complete = callback;\n\n\t\tif ( options.delay ) {\n\t\t\telement.delay( options.delay );\n\t\t}\n\n\t\tif ( hasOptions && $.effects && $.effects.effect[ effectName ] ) {\n\t\t\telement[ method ]( options );\n\t\t} else if ( effectName !== method && element[ effectName ] ) {\n\t\t\telement[ effectName ]( options.duration, options.easing, callback );\n\t\t} else {\n\t\t\telement.queue( function( next ) {\n\t\t\t\t$( this )[ method ]();\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback.call( element[ 0 ] );\n\t\t\t\t}\n\t\t\t\tnext();\n\t\t\t} );\n\t\t}\n\t};\n} );\n\nvar widget = $.widget;\n\n\n/*!\n * jQuery UI Position 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/position/\n */\n\n//>>label: Position\n//>>group: Core\n//>>description: Positions elements relative to other elements.\n//>>docs: http://api.jqueryui.com/position/\n//>>demos: http://jqueryui.com/position/\n\n\n( function() {\nvar cachedScrollbarWidth,\n\tmax = Math.max,\n\tabs = Math.abs,\n\trhorizontal = /left|center|right/,\n\trvertical = /top|center|bottom/,\n\troffset = /[\\+\\-]\\d+(\\.[\\d]+)?%?/,\n\trposition = /^\\w+/,\n\trpercent = /%$/,\n\t_position = $.fn.position;\n\nfunction getOffsets( offsets, width, height ) {\n\treturn [\n\t\tparseFloat( offsets[ 0 ] ) * ( rpercent.test( offsets[ 0 ] ) ? width / 100 : 1 ),\n\t\tparseFloat( offsets[ 1 ] ) * ( rpercent.test( offsets[ 1 ] ) ? height / 100 : 1 )\n\t];\n}\n\nfunction parseCss( element, property ) {\n\treturn parseInt( $.css( element, property ), 10 ) || 0;\n}\n\nfunction getDimensions( elem ) {\n\tvar raw = elem[ 0 ];\n\tif ( raw.nodeType === 9 ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: 0, left: 0 }\n\t\t};\n\t}\n\tif ( $.isWindow( raw ) ) {\n\t\treturn {\n\t\t\twidth: elem.width(),\n\t\t\theight: elem.height(),\n\t\t\toffset: { top: elem.scrollTop(), left: elem.scrollLeft() }\n\t\t};\n\t}\n\tif ( raw.preventDefault ) {\n\t\treturn {\n\t\t\twidth: 0,\n\t\t\theight: 0,\n\t\t\toffset: { top: raw.pageY, left: raw.pageX }\n\t\t};\n\t}\n\treturn {\n\t\twidth: elem.outerWidth(),\n\t\theight: elem.outerHeight(),\n\t\toffset: elem.offset()\n\t};\n}\n\n$.position = {\n\tscrollbarWidth: function() {\n\t\tif ( cachedScrollbarWidth !== undefined ) {\n\t\t\treturn cachedScrollbarWidth;\n\t\t}\n\t\tvar w1, w2,\n\t\t\tdiv = $( \"<div \" +\n\t\t\t\t\"style='display:block;position:absolute;width:50px;height:50px;overflow:hidden;'>\" +\n\t\t\t\t\"<div style='height:100px;width:auto;'></div></div>\" ),\n\t\t\tinnerDiv = div.children()[ 0 ];\n\n\t\t$( \"body\" ).append( div );\n\t\tw1 = innerDiv.offsetWidth;\n\t\tdiv.css( \"overflow\", \"scroll\" );\n\n\t\tw2 = innerDiv.offsetWidth;\n\n\t\tif ( w1 === w2 ) {\n\t\t\tw2 = div[ 0 ].clientWidth;\n\t\t}\n\n\t\tdiv.remove();\n\n\t\treturn ( cachedScrollbarWidth = w1 - w2 );\n\t},\n\tgetScrollInfo: function( within ) {\n\t\tvar overflowX = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-x\" ),\n\t\t\toverflowY = within.isWindow || within.isDocument ? \"\" :\n\t\t\t\twithin.element.css( \"overflow-y\" ),\n\t\t\thasOverflowX = overflowX === \"scroll\" ||\n\t\t\t\t( overflowX === \"auto\" && within.width < within.element[ 0 ].scrollWidth ),\n\t\t\thasOverflowY = overflowY === \"scroll\" ||\n\t\t\t\t( overflowY === \"auto\" && within.height < within.element[ 0 ].scrollHeight );\n\t\treturn {\n\t\t\twidth: hasOverflowY ? $.position.scrollbarWidth() : 0,\n\t\t\theight: hasOverflowX ? $.position.scrollbarWidth() : 0\n\t\t};\n\t},\n\tgetWithinInfo: function( element ) {\n\t\tvar withinElement = $( element || window ),\n\t\t\tisWindow = $.isWindow( withinElement[ 0 ] ),\n\t\t\tisDocument = !!withinElement[ 0 ] && withinElement[ 0 ].nodeType === 9,\n\t\t\thasOffset = !isWindow && !isDocument;\n\t\treturn {\n\t\t\telement: withinElement,\n\t\t\tisWindow: isWindow,\n\t\t\tisDocument: isDocument,\n\t\t\toffset: hasOffset ? $( element ).offset() : { left: 0, top: 0 },\n\t\t\tscrollLeft: withinElement.scrollLeft(),\n\t\t\tscrollTop: withinElement.scrollTop(),\n\t\t\twidth: withinElement.outerWidth(),\n\t\t\theight: withinElement.outerHeight()\n\t\t};\n\t}\n};\n\n$.fn.position = function( options ) {\n\tif ( !options || !options.of ) {\n\t\treturn _position.apply( this, arguments );\n\t}\n\n\t// Make a copy, we don't want to modify arguments\n\toptions = $.extend( {}, options );\n\n\tvar atOffset, targetWidth, targetHeight, targetOffset, basePosition, dimensions,\n\t\ttarget = $( options.of ),\n\t\twithin = $.position.getWithinInfo( options.within ),\n\t\tscrollInfo = $.position.getScrollInfo( within ),\n\t\tcollision = ( options.collision || \"flip\" ).split( \" \" ),\n\t\toffsets = {};\n\n\tdimensions = getDimensions( target );\n\tif ( target[ 0 ].preventDefault ) {\n\n\t\t// Force left top to allow flipping\n\t\toptions.at = \"left top\";\n\t}\n\ttargetWidth = dimensions.width;\n\ttargetHeight = dimensions.height;\n\ttargetOffset = dimensions.offset;\n\n\t// Clone to reuse original targetOffset later\n\tbasePosition = $.extend( {}, targetOffset );\n\n\t// Force my and at to have valid horizontal and vertical positions\n\t// if a value is missing or invalid, it will be converted to center\n\t$.each( [ \"my\", \"at\" ], function() {\n\t\tvar pos = ( options[ this ] || \"\" ).split( \" \" ),\n\t\t\thorizontalOffset,\n\t\t\tverticalOffset;\n\n\t\tif ( pos.length === 1 ) {\n\t\t\tpos = rhorizontal.test( pos[ 0 ] ) ?\n\t\t\t\tpos.concat( [ \"center\" ] ) :\n\t\t\t\trvertical.test( pos[ 0 ] ) ?\n\t\t\t\t\t[ \"center\" ].concat( pos ) :\n\t\t\t\t\t[ \"center\", \"center\" ];\n\t\t}\n\t\tpos[ 0 ] = rhorizontal.test( pos[ 0 ] ) ? pos[ 0 ] : \"center\";\n\t\tpos[ 1 ] = rvertical.test( pos[ 1 ] ) ? pos[ 1 ] : \"center\";\n\n\t\t// Calculate offsets\n\t\thorizontalOffset = roffset.exec( pos[ 0 ] );\n\t\tverticalOffset = roffset.exec( pos[ 1 ] );\n\t\toffsets[ this ] = [\n\t\t\thorizontalOffset ? horizontalOffset[ 0 ] : 0,\n\t\t\tverticalOffset ? verticalOffset[ 0 ] : 0\n\t\t];\n\n\t\t// Reduce to just the positions without the offsets\n\t\toptions[ this ] = [\n\t\t\trposition.exec( pos[ 0 ] )[ 0 ],\n\t\t\trposition.exec( pos[ 1 ] )[ 0 ]\n\t\t];\n\t} );\n\n\t// Normalize collision option\n\tif ( collision.length === 1 ) {\n\t\tcollision[ 1 ] = collision[ 0 ];\n\t}\n\n\tif ( options.at[ 0 ] === \"right\" ) {\n\t\tbasePosition.left += targetWidth;\n\t} else if ( options.at[ 0 ] === \"center\" ) {\n\t\tbasePosition.left += targetWidth / 2;\n\t}\n\n\tif ( options.at[ 1 ] === \"bottom\" ) {\n\t\tbasePosition.top += targetHeight;\n\t} else if ( options.at[ 1 ] === \"center\" ) {\n\t\tbasePosition.top += targetHeight / 2;\n\t}\n\n\tatOffset = getOffsets( offsets.at, targetWidth, targetHeight );\n\tbasePosition.left += atOffset[ 0 ];\n\tbasePosition.top += atOffset[ 1 ];\n\n\treturn this.each( function() {\n\t\tvar collisionPosition, using,\n\t\t\telem = $( this ),\n\t\t\telemWidth = elem.outerWidth(),\n\t\t\telemHeight = elem.outerHeight(),\n\t\t\tmarginLeft = parseCss( this, \"marginLeft\" ),\n\t\t\tmarginTop = parseCss( this, \"marginTop\" ),\n\t\t\tcollisionWidth = elemWidth + marginLeft + parseCss( this, \"marginRight\" ) +\n\t\t\t\tscrollInfo.width,\n\t\t\tcollisionHeight = elemHeight + marginTop + parseCss( this, \"marginBottom\" ) +\n\t\t\t\tscrollInfo.height,\n\t\t\tposition = $.extend( {}, basePosition ),\n\t\t\tmyOffset = getOffsets( offsets.my, elem.outerWidth(), elem.outerHeight() );\n\n\t\tif ( options.my[ 0 ] === \"right\" ) {\n\t\t\tposition.left -= elemWidth;\n\t\t} else if ( options.my[ 0 ] === \"center\" ) {\n\t\t\tposition.left -= elemWidth / 2;\n\t\t}\n\n\t\tif ( options.my[ 1 ] === \"bottom\" ) {\n\t\t\tposition.top -= elemHeight;\n\t\t} else if ( options.my[ 1 ] === \"center\" ) {\n\t\t\tposition.top -= elemHeight / 2;\n\t\t}\n\n\t\tposition.left += myOffset[ 0 ];\n\t\tposition.top += myOffset[ 1 ];\n\n\t\tcollisionPosition = {\n\t\t\tmarginLeft: marginLeft,\n\t\t\tmarginTop: marginTop\n\t\t};\n\n\t\t$.each( [ \"left\", \"top\" ], function( i, dir ) {\n\t\t\tif ( $.ui.position[ collision[ i ] ] ) {\n\t\t\t\t$.ui.position[ collision[ i ] ][ dir ]( position, {\n\t\t\t\t\ttargetWidth: targetWidth,\n\t\t\t\t\ttargetHeight: targetHeight,\n\t\t\t\t\telemWidth: elemWidth,\n\t\t\t\t\telemHeight: elemHeight,\n\t\t\t\t\tcollisionPosition: collisionPosition,\n\t\t\t\t\tcollisionWidth: collisionWidth,\n\t\t\t\t\tcollisionHeight: collisionHeight,\n\t\t\t\t\toffset: [ atOffset[ 0 ] + myOffset[ 0 ], atOffset [ 1 ] + myOffset[ 1 ] ],\n\t\t\t\t\tmy: options.my,\n\t\t\t\t\tat: options.at,\n\t\t\t\t\twithin: within,\n\t\t\t\t\telem: elem\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\tif ( options.using ) {\n\n\t\t\t// Adds feedback as second argument to using callback, if present\n\t\t\tusing = function( props ) {\n\t\t\t\tvar left = targetOffset.left - position.left,\n\t\t\t\t\tright = left + targetWidth - elemWidth,\n\t\t\t\t\ttop = targetOffset.top - position.top,\n\t\t\t\t\tbottom = top + targetHeight - elemHeight,\n\t\t\t\t\tfeedback = {\n\t\t\t\t\t\ttarget: {\n\t\t\t\t\t\t\telement: target,\n\t\t\t\t\t\t\tleft: targetOffset.left,\n\t\t\t\t\t\t\ttop: targetOffset.top,\n\t\t\t\t\t\t\twidth: targetWidth,\n\t\t\t\t\t\t\theight: targetHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\telement: {\n\t\t\t\t\t\t\telement: elem,\n\t\t\t\t\t\t\tleft: position.left,\n\t\t\t\t\t\t\ttop: position.top,\n\t\t\t\t\t\t\twidth: elemWidth,\n\t\t\t\t\t\t\theight: elemHeight\n\t\t\t\t\t\t},\n\t\t\t\t\t\thorizontal: right < 0 ? \"left\" : left > 0 ? \"right\" : \"center\",\n\t\t\t\t\t\tvertical: bottom < 0 ? \"top\" : top > 0 ? \"bottom\" : \"middle\"\n\t\t\t\t\t};\n\t\t\t\tif ( targetWidth < elemWidth && abs( left + right ) < targetWidth ) {\n\t\t\t\t\tfeedback.horizontal = \"center\";\n\t\t\t\t}\n\t\t\t\tif ( targetHeight < elemHeight && abs( top + bottom ) < targetHeight ) {\n\t\t\t\t\tfeedback.vertical = \"middle\";\n\t\t\t\t}\n\t\t\t\tif ( max( abs( left ), abs( right ) ) > max( abs( top ), abs( bottom ) ) ) {\n\t\t\t\t\tfeedback.important = \"horizontal\";\n\t\t\t\t} else {\n\t\t\t\t\tfeedback.important = \"vertical\";\n\t\t\t\t}\n\t\t\t\toptions.using.call( this, props, feedback );\n\t\t\t};\n\t\t}\n\n\t\telem.offset( $.extend( position, { using: using } ) );\n\t} );\n};\n\n$.ui.position = {\n\tfit: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\touterWidth = within.width,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = withinOffset - collisionPosLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - withinOffset,\n\t\t\t\tnewOverRight;\n\n\t\t\t// Element is wider than within\n\t\t\tif ( data.collisionWidth > outerWidth ) {\n\n\t\t\t\t// Element is initially over the left side of within\n\t\t\t\tif ( overLeft > 0 && overRight <= 0 ) {\n\t\t\t\t\tnewOverRight = position.left + overLeft + data.collisionWidth - outerWidth -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.left += overLeft - newOverRight;\n\n\t\t\t\t// Element is initially over right side of within\n\t\t\t\t} else if ( overRight > 0 && overLeft <= 0 ) {\n\t\t\t\t\tposition.left = withinOffset;\n\n\t\t\t\t// Element is initially over both left and right sides of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overLeft > overRight ) {\n\t\t\t\t\t\tposition.left = withinOffset + outerWidth - data.collisionWidth;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.left = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far left -> align with left edge\n\t\t\t} else if ( overLeft > 0 ) {\n\t\t\t\tposition.left += overLeft;\n\n\t\t\t// Too far right -> align with right edge\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tposition.left -= overRight;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.left = max( position.left - collisionPosLeft, position.left );\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\touterHeight = data.within.height,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = withinOffset - collisionPosTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - withinOffset,\n\t\t\t\tnewOverBottom;\n\n\t\t\t// Element is taller than within\n\t\t\tif ( data.collisionHeight > outerHeight ) {\n\n\t\t\t\t// Element is initially over the top of within\n\t\t\t\tif ( overTop > 0 && overBottom <= 0 ) {\n\t\t\t\t\tnewOverBottom = position.top + overTop + data.collisionHeight - outerHeight -\n\t\t\t\t\t\twithinOffset;\n\t\t\t\t\tposition.top += overTop - newOverBottom;\n\n\t\t\t\t// Element is initially over bottom of within\n\t\t\t\t} else if ( overBottom > 0 && overTop <= 0 ) {\n\t\t\t\t\tposition.top = withinOffset;\n\n\t\t\t\t// Element is initially over both top and bottom of within\n\t\t\t\t} else {\n\t\t\t\t\tif ( overTop > overBottom ) {\n\t\t\t\t\t\tposition.top = withinOffset + outerHeight - data.collisionHeight;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tposition.top = withinOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t// Too far up -> align with top\n\t\t\t} else if ( overTop > 0 ) {\n\t\t\t\tposition.top += overTop;\n\n\t\t\t// Too far down -> align with bottom edge\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tposition.top -= overBottom;\n\n\t\t\t// Adjust based on position and margin\n\t\t\t} else {\n\t\t\t\tposition.top = max( position.top - collisionPosTop, position.top );\n\t\t\t}\n\t\t}\n\t},\n\tflip: {\n\t\tleft: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.left + within.scrollLeft,\n\t\t\t\touterWidth = within.width,\n\t\t\t\toffsetLeft = within.isWindow ? within.scrollLeft : within.offset.left,\n\t\t\t\tcollisionPosLeft = position.left - data.collisionPosition.marginLeft,\n\t\t\t\toverLeft = collisionPosLeft - offsetLeft,\n\t\t\t\toverRight = collisionPosLeft + data.collisionWidth - outerWidth - offsetLeft,\n\t\t\t\tmyOffset = data.my[ 0 ] === \"left\" ?\n\t\t\t\t\t-data.elemWidth :\n\t\t\t\t\tdata.my[ 0 ] === \"right\" ?\n\t\t\t\t\t\tdata.elemWidth :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 0 ] === \"left\" ?\n\t\t\t\t\tdata.targetWidth :\n\t\t\t\t\tdata.at[ 0 ] === \"right\" ?\n\t\t\t\t\t\t-data.targetWidth :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 0 ],\n\t\t\t\tnewOverRight,\n\t\t\t\tnewOverLeft;\n\n\t\t\tif ( overLeft < 0 ) {\n\t\t\t\tnewOverRight = position.left + myOffset + atOffset + offset + data.collisionWidth -\n\t\t\t\t\touterWidth - withinOffset;\n\t\t\t\tif ( newOverRight < 0 || newOverRight < abs( overLeft ) ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overRight > 0 ) {\n\t\t\t\tnewOverLeft = position.left - data.collisionPosition.marginLeft + myOffset +\n\t\t\t\t\tatOffset + offset - offsetLeft;\n\t\t\t\tif ( newOverLeft > 0 || abs( newOverLeft ) < overRight ) {\n\t\t\t\t\tposition.left += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\ttop: function( position, data ) {\n\t\t\tvar within = data.within,\n\t\t\t\twithinOffset = within.offset.top + within.scrollTop,\n\t\t\t\touterHeight = within.height,\n\t\t\t\toffsetTop = within.isWindow ? within.scrollTop : within.offset.top,\n\t\t\t\tcollisionPosTop = position.top - data.collisionPosition.marginTop,\n\t\t\t\toverTop = collisionPosTop - offsetTop,\n\t\t\t\toverBottom = collisionPosTop + data.collisionHeight - outerHeight - offsetTop,\n\t\t\t\ttop = data.my[ 1 ] === \"top\",\n\t\t\t\tmyOffset = top ?\n\t\t\t\t\t-data.elemHeight :\n\t\t\t\t\tdata.my[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\tdata.elemHeight :\n\t\t\t\t\t\t0,\n\t\t\t\tatOffset = data.at[ 1 ] === \"top\" ?\n\t\t\t\t\tdata.targetHeight :\n\t\t\t\t\tdata.at[ 1 ] === \"bottom\" ?\n\t\t\t\t\t\t-data.targetHeight :\n\t\t\t\t\t\t0,\n\t\t\t\toffset = -2 * data.offset[ 1 ],\n\t\t\t\tnewOverTop,\n\t\t\t\tnewOverBottom;\n\t\t\tif ( overTop < 0 ) {\n\t\t\t\tnewOverBottom = position.top + myOffset + atOffset + offset + data.collisionHeight -\n\t\t\t\t\touterHeight - withinOffset;\n\t\t\t\tif ( newOverBottom < 0 || newOverBottom < abs( overTop ) ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t} else if ( overBottom > 0 ) {\n\t\t\t\tnewOverTop = position.top - data.collisionPosition.marginTop + myOffset + atOffset +\n\t\t\t\t\toffset - offsetTop;\n\t\t\t\tif ( newOverTop > 0 || abs( newOverTop ) < overBottom ) {\n\t\t\t\t\tposition.top += myOffset + atOffset + offset;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tflipfit: {\n\t\tleft: function() {\n\t\t\t$.ui.position.flip.left.apply( this, arguments );\n\t\t\t$.ui.position.fit.left.apply( this, arguments );\n\t\t},\n\t\ttop: function() {\n\t\t\t$.ui.position.flip.top.apply( this, arguments );\n\t\t\t$.ui.position.fit.top.apply( this, arguments );\n\t\t}\n\t}\n};\n\n} )();\n\nvar position = $.ui.position;\n\n\n/*!\n * jQuery UI :data 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :data Selector\n//>>group: Core\n//>>description: Selects elements which have data stored under the specified key.\n//>>docs: http://api.jqueryui.com/data-selector/\n\n\nvar data = $.extend( $.expr[ \":\" ], {\n\tdata: $.expr.createPseudo ?\n\t\t$.expr.createPseudo( function( dataName ) {\n\t\t\treturn function( elem ) {\n\t\t\t\treturn !!$.data( elem, dataName );\n\t\t\t};\n\t\t} ) :\n\n\t\t// Support: jQuery <1.8\n\t\tfunction( elem, i, match ) {\n\t\t\treturn !!$.data( elem, match[ 3 ] );\n\t\t}\n} );\n\n/*!\n * jQuery UI Disable Selection 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: disableSelection\n//>>group: Core\n//>>description: Disable selection of text content within the set of matched elements.\n//>>docs: http://api.jqueryui.com/disableSelection/\n\n// This file is deprecated\n\n\nvar disableSelection = $.fn.extend( {\n\tdisableSelection: ( function() {\n\t\tvar eventType = \"onselectstart\" in document.createElement( \"div\" ) ?\n\t\t\t\"selectstart\" :\n\t\t\t\"mousedown\";\n\n\t\treturn function() {\n\t\t\treturn this.on( eventType + \".ui-disableSelection\", function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tenableSelection: function() {\n\t\treturn this.off( \".ui-disableSelection\" );\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Effects Core\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Extends the internal jQuery effects. Includes morphing and easing. Required by all other effects.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/category/effects-core/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar dataSpace = \"ui-effects-\",\n\tdataSpaceStyle = \"ui-effects-style\",\n\tdataSpaceAnimated = \"ui-effects-animated\",\n\n\t// Create a local jQuery because jQuery Color relies on it and the\n\t// global may not exist with AMD and a custom build (#10199)\n\tjQuery = $;\n\n$.effects = {\n\teffect: {}\n};\n\n/*!\n * jQuery Color Animations v2.1.2\n * https://github.com/jquery/jquery-color\n *\n * Copyright 2014 jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * Date: Wed Jan 16 08:47:09 2013 -0600\n */\n( function( jQuery, undefined ) {\n\n\tvar stepHooks = \"backgroundColor borderBottomColor borderLeftColor borderRightColor \" +\n\t\t\"borderTopColor color columnRuleColor outlineColor textDecorationColor textEmphasisColor\",\n\n\t// Plusequals test for += 100 -= 100\n\trplusequals = /^([\\-+])=\\s*(\\d+\\.?\\d*)/,\n\n\t// A set of RE's that can match strings and generate color tuples.\n\tstringParsers = [ {\n\t\t\tre: /rgba?\\(\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*,\\s*(\\d{1,3})\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ],\n\t\t\t\t\texecResult[ 3 ],\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /rgba?\\(\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ] * 2.55,\n\t\t\t\t\texecResult[ 2 ] * 2.55,\n\t\t\t\t\texecResult[ 3 ] * 2.55,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9]{2})([a-f0-9]{2})([a-f0-9]{2})/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\n\t\t\t// This regex ignores A-F because it's compared against an already lowercased string\n\t\t\tre: /#([a-f0-9])([a-f0-9])([a-f0-9])/,\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\tparseInt( execResult[ 1 ] + execResult[ 1 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 2 ] + execResult[ 2 ], 16 ),\n\t\t\t\t\tparseInt( execResult[ 3 ] + execResult[ 3 ], 16 )\n\t\t\t\t];\n\t\t\t}\n\t\t}, {\n\t\t\tre: /hsla?\\(\\s*(\\d+(?:\\.\\d+)?)\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*,\\s*(\\d+(?:\\.\\d+)?)\\%\\s*(?:,\\s*(\\d?(?:\\.\\d+)?)\\s*)?\\)/,\n\t\t\tspace: \"hsla\",\n\t\t\tparse: function( execResult ) {\n\t\t\t\treturn [\n\t\t\t\t\texecResult[ 1 ],\n\t\t\t\t\texecResult[ 2 ] / 100,\n\t\t\t\t\texecResult[ 3 ] / 100,\n\t\t\t\t\texecResult[ 4 ]\n\t\t\t\t];\n\t\t\t}\n\t\t} ],\n\n\t// JQuery.Color( )\n\tcolor = jQuery.Color = function( color, green, blue, alpha ) {\n\t\treturn new jQuery.Color.fn.parse( color, green, blue, alpha );\n\t},\n\tspaces = {\n\t\trgba: {\n\t\t\tprops: {\n\t\t\t\tred: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tgreen: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t},\n\t\t\t\tblue: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"byte\"\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\thsla: {\n\t\t\tprops: {\n\t\t\t\thue: {\n\t\t\t\t\tidx: 0,\n\t\t\t\t\ttype: \"degrees\"\n\t\t\t\t},\n\t\t\t\tsaturation: {\n\t\t\t\t\tidx: 1,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t},\n\t\t\t\tlightness: {\n\t\t\t\t\tidx: 2,\n\t\t\t\t\ttype: \"percent\"\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\tpropTypes = {\n\t\t\"byte\": {\n\t\t\tfloor: true,\n\t\t\tmax: 255\n\t\t},\n\t\t\"percent\": {\n\t\t\tmax: 1\n\t\t},\n\t\t\"degrees\": {\n\t\t\tmod: 360,\n\t\t\tfloor: true\n\t\t}\n\t},\n\tsupport = color.support = {},\n\n\t// Element for support tests\n\tsupportElem = jQuery( \"<p>\" )[ 0 ],\n\n\t// Colors = jQuery.Color.names\n\tcolors,\n\n\t// Local aliases of functions called often\n\teach = jQuery.each;\n\n// Determine rgba support immediately\nsupportElem.style.cssText = \"background-color:rgba(1,1,1,.5)\";\nsupport.rgba = supportElem.style.backgroundColor.indexOf( \"rgba\" ) > -1;\n\n// Define cache name and alpha properties\n// for rgba and hsla spaces\neach( spaces, function( spaceName, space ) {\n\tspace.cache = \"_\" + spaceName;\n\tspace.props.alpha = {\n\t\tidx: 3,\n\t\ttype: \"percent\",\n\t\tdef: 1\n\t};\n} );\n\nfunction clamp( value, prop, allowEmpty ) {\n\tvar type = propTypes[ prop.type ] || {};\n\n\tif ( value == null ) {\n\t\treturn ( allowEmpty || !prop.def ) ? null : prop.def;\n\t}\n\n\t// ~~ is an short way of doing floor for positive numbers\n\tvalue = type.floor ? ~~value : parseFloat( value );\n\n\t// IE will pass in empty strings as value for alpha,\n\t// which will hit this case\n\tif ( isNaN( value ) ) {\n\t\treturn prop.def;\n\t}\n\n\tif ( type.mod ) {\n\n\t\t// We add mod before modding to make sure that negatives values\n\t\t// get converted properly: -10 -> 350\n\t\treturn ( value + type.mod ) % type.mod;\n\t}\n\n\t// For now all property types without mod have min and max\n\treturn 0 > value ? 0 : type.max < value ? type.max : value;\n}\n\nfunction stringParse( string ) {\n\tvar inst = color(),\n\t\trgba = inst._rgba = [];\n\n\tstring = string.toLowerCase();\n\n\teach( stringParsers, function( i, parser ) {\n\t\tvar parsed,\n\t\t\tmatch = parser.re.exec( string ),\n\t\t\tvalues = match && parser.parse( match ),\n\t\t\tspaceName = parser.space || \"rgba\";\n\n\t\tif ( values ) {\n\t\t\tparsed = inst[ spaceName ]( values );\n\n\t\t\t// If this was an rgba parse the assignment might happen twice\n\t\t\t// oh well....\n\t\t\tinst[ spaces[ spaceName ].cache ] = parsed[ spaces[ spaceName ].cache ];\n\t\t\trgba = inst._rgba = parsed._rgba;\n\n\t\t\t// Exit each( stringParsers ) here because we matched\n\t\t\treturn false;\n\t\t}\n\t} );\n\n\t// Found a stringParser that handled it\n\tif ( rgba.length ) {\n\n\t\t// If this came from a parsed string, force \"transparent\" when alpha is 0\n\t\t// chrome, (and maybe others) return \"transparent\" as rgba(0,0,0,0)\n\t\tif ( rgba.join() === \"0,0,0,0\" ) {\n\t\t\tjQuery.extend( rgba, colors.transparent );\n\t\t}\n\t\treturn inst;\n\t}\n\n\t// Named colors\n\treturn colors[ string ];\n}\n\ncolor.fn = jQuery.extend( color.prototype, {\n\tparse: function( red, green, blue, alpha ) {\n\t\tif ( red === undefined ) {\n\t\t\tthis._rgba = [ null, null, null, null ];\n\t\t\treturn this;\n\t\t}\n\t\tif ( red.jquery || red.nodeType ) {\n\t\t\tred = jQuery( red ).css( green );\n\t\t\tgreen = undefined;\n\t\t}\n\n\t\tvar inst = this,\n\t\t\ttype = jQuery.type( red ),\n\t\t\trgba = this._rgba = [];\n\n\t\t// More than 1 argument specified - assume ( red, green, blue, alpha )\n\t\tif ( green !== undefined ) {\n\t\t\tred = [ red, green, blue, alpha ];\n\t\t\ttype = \"array\";\n\t\t}\n\n\t\tif ( type === \"string\" ) {\n\t\t\treturn this.parse( stringParse( red ) || colors._default );\n\t\t}\n\n\t\tif ( type === \"array\" ) {\n\t\t\teach( spaces.rgba.props, function( key, prop ) {\n\t\t\t\trgba[ prop.idx ] = clamp( red[ prop.idx ], prop );\n\t\t\t} );\n\t\t\treturn this;\n\t\t}\n\n\t\tif ( type === \"object\" ) {\n\t\t\tif ( red instanceof color ) {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tif ( red[ space.cache ] ) {\n\t\t\t\t\t\tinst[ space.cache ] = red[ space.cache ].slice();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\teach( spaces, function( spaceName, space ) {\n\t\t\t\t\tvar cache = space.cache;\n\t\t\t\t\teach( space.props, function( key, prop ) {\n\n\t\t\t\t\t\t// If the cache doesn't exist, and we know how to convert\n\t\t\t\t\t\tif ( !inst[ cache ] && space.to ) {\n\n\t\t\t\t\t\t\t// If the value was null, we don't need to copy it\n\t\t\t\t\t\t\t// if the key was alpha, we don't need to copy it either\n\t\t\t\t\t\t\tif ( key === \"alpha\" || red[ key ] == null ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tinst[ cache ] = space.to( inst._rgba );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// This is the only case where we allow nulls for ALL properties.\n\t\t\t\t\t\t// call clamp with alwaysAllowEmpty\n\t\t\t\t\t\tinst[ cache ][ prop.idx ] = clamp( red[ key ], prop, true );\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Everything defined but alpha?\n\t\t\t\t\tif ( inst[ cache ] &&\n\t\t\t\t\t\t\tjQuery.inArray( null, inst[ cache ].slice( 0, 3 ) ) < 0 ) {\n\n\t\t\t\t\t\t// Use the default of 1\n\t\t\t\t\t\tinst[ cache ][ 3 ] = 1;\n\t\t\t\t\t\tif ( space.from ) {\n\t\t\t\t\t\t\tinst._rgba = space.from( inst[ cache ] );\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\treturn this;\n\t\t}\n\t},\n\tis: function( compare ) {\n\t\tvar is = color( compare ),\n\t\t\tsame = true,\n\t\t\tinst = this;\n\n\t\teach( spaces, function( _, space ) {\n\t\t\tvar localCache,\n\t\t\t\tisCache = is[ space.cache ];\n\t\t\tif ( isCache ) {\n\t\t\t\tlocalCache = inst[ space.cache ] || space.to && space.to( inst._rgba ) || [];\n\t\t\t\teach( space.props, function( _, prop ) {\n\t\t\t\t\tif ( isCache[ prop.idx ] != null ) {\n\t\t\t\t\t\tsame = ( isCache[ prop.idx ] === localCache[ prop.idx ] );\n\t\t\t\t\t\treturn same;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn same;\n\t\t} );\n\t\treturn same;\n\t},\n\t_space: function() {\n\t\tvar used = [],\n\t\t\tinst = this;\n\t\teach( spaces, function( spaceName, space ) {\n\t\t\tif ( inst[ space.cache ] ) {\n\t\t\t\tused.push( spaceName );\n\t\t\t}\n\t\t} );\n\t\treturn used.pop();\n\t},\n\ttransition: function( other, distance ) {\n\t\tvar end = color( other ),\n\t\t\tspaceName = end._space(),\n\t\t\tspace = spaces[ spaceName ],\n\t\t\tstartColor = this.alpha() === 0 ? color( \"transparent\" ) : this,\n\t\t\tstart = startColor[ space.cache ] || space.to( startColor._rgba ),\n\t\t\tresult = start.slice();\n\n\t\tend = end[ space.cache ];\n\t\teach( space.props, function( key, prop ) {\n\t\t\tvar index = prop.idx,\n\t\t\t\tstartValue = start[ index ],\n\t\t\t\tendValue = end[ index ],\n\t\t\t\ttype = propTypes[ prop.type ] || {};\n\n\t\t\t// If null, don't override start value\n\t\t\tif ( endValue === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If null - use end\n\t\t\tif ( startValue === null ) {\n\t\t\t\tresult[ index ] = endValue;\n\t\t\t} else {\n\t\t\t\tif ( type.mod ) {\n\t\t\t\t\tif ( endValue - startValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue += type.mod;\n\t\t\t\t\t} else if ( startValue - endValue > type.mod / 2 ) {\n\t\t\t\t\t\tstartValue -= type.mod;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tresult[ index ] = clamp( ( endValue - startValue ) * distance + startValue, prop );\n\t\t\t}\n\t\t} );\n\t\treturn this[ spaceName ]( result );\n\t},\n\tblend: function( opaque ) {\n\n\t\t// If we are already opaque - return ourself\n\t\tif ( this._rgba[ 3 ] === 1 ) {\n\t\t\treturn this;\n\t\t}\n\n\t\tvar rgb = this._rgba.slice(),\n\t\t\ta = rgb.pop(),\n\t\t\tblend = color( opaque )._rgba;\n\n\t\treturn color( jQuery.map( rgb, function( v, i ) {\n\t\t\treturn ( 1 - a ) * blend[ i ] + a * v;\n\t\t} ) );\n\t},\n\ttoRgbaString: function() {\n\t\tvar prefix = \"rgba(\",\n\t\t\trgba = jQuery.map( this._rgba, function( v, i ) {\n\t\t\t\treturn v == null ? ( i > 2 ? 1 : 0 ) : v;\n\t\t\t} );\n\n\t\tif ( rgba[ 3 ] === 1 ) {\n\t\t\trgba.pop();\n\t\t\tprefix = \"rgb(\";\n\t\t}\n\n\t\treturn prefix + rgba.join() + \")\";\n\t},\n\ttoHslaString: function() {\n\t\tvar prefix = \"hsla(\",\n\t\t\thsla = jQuery.map( this.hsla(), function( v, i ) {\n\t\t\t\tif ( v == null ) {\n\t\t\t\t\tv = i > 2 ? 1 : 0;\n\t\t\t\t}\n\n\t\t\t\t// Catch 1 and 2\n\t\t\t\tif ( i && i < 3 ) {\n\t\t\t\t\tv = Math.round( v * 100 ) + \"%\";\n\t\t\t\t}\n\t\t\t\treturn v;\n\t\t\t} );\n\n\t\tif ( hsla[ 3 ] === 1 ) {\n\t\t\thsla.pop();\n\t\t\tprefix = \"hsl(\";\n\t\t}\n\t\treturn prefix + hsla.join() + \")\";\n\t},\n\ttoHexString: function( includeAlpha ) {\n\t\tvar rgba = this._rgba.slice(),\n\t\t\talpha = rgba.pop();\n\n\t\tif ( includeAlpha ) {\n\t\t\trgba.push( ~~( alpha * 255 ) );\n\t\t}\n\n\t\treturn \"#\" + jQuery.map( rgba, function( v ) {\n\n\t\t\t// Default to 0 when nulls exist\n\t\t\tv = ( v || 0 ).toString( 16 );\n\t\t\treturn v.length === 1 ? \"0\" + v : v;\n\t\t} ).join( \"\" );\n\t},\n\ttoString: function() {\n\t\treturn this._rgba[ 3 ] === 0 ? \"transparent\" : this.toRgbaString();\n\t}\n} );\ncolor.fn.parse.prototype = color.fn;\n\n// Hsla conversions adapted from:\n// https://code.google.com/p/maashaack/source/browse/packages/graphics/trunk/src/graphics/colors/HUE2RGB.as?r=5021\n\nfunction hue2rgb( p, q, h ) {\n\th = ( h + 1 ) % 1;\n\tif ( h * 6 < 1 ) {\n\t\treturn p + ( q - p ) * h * 6;\n\t}\n\tif ( h * 2 < 1 ) {\n\t\treturn q;\n\t}\n\tif ( h * 3 < 2 ) {\n\t\treturn p + ( q - p ) * ( ( 2 / 3 ) - h ) * 6;\n\t}\n\treturn p;\n}\n\nspaces.hsla.to = function( rgba ) {\n\tif ( rgba[ 0 ] == null || rgba[ 1 ] == null || rgba[ 2 ] == null ) {\n\t\treturn [ null, null, null, rgba[ 3 ] ];\n\t}\n\tvar r = rgba[ 0 ] / 255,\n\t\tg = rgba[ 1 ] / 255,\n\t\tb = rgba[ 2 ] / 255,\n\t\ta = rgba[ 3 ],\n\t\tmax = Math.max( r, g, b ),\n\t\tmin = Math.min( r, g, b ),\n\t\tdiff = max - min,\n\t\tadd = max + min,\n\t\tl = add * 0.5,\n\t\th, s;\n\n\tif ( min === max ) {\n\t\th = 0;\n\t} else if ( r === max ) {\n\t\th = ( 60 * ( g - b ) / diff ) + 360;\n\t} else if ( g === max ) {\n\t\th = ( 60 * ( b - r ) / diff ) + 120;\n\t} else {\n\t\th = ( 60 * ( r - g ) / diff ) + 240;\n\t}\n\n\t// Chroma (diff) == 0 means greyscale which, by definition, saturation = 0%\n\t// otherwise, saturation is based on the ratio of chroma (diff) to lightness (add)\n\tif ( diff === 0 ) {\n\t\ts = 0;\n\t} else if ( l <= 0.5 ) {\n\t\ts = diff / add;\n\t} else {\n\t\ts = diff / ( 2 - add );\n\t}\n\treturn [ Math.round( h ) % 360, s, l, a == null ? 1 : a ];\n};\n\nspaces.hsla.from = function( hsla ) {\n\tif ( hsla[ 0 ] == null || hsla[ 1 ] == null || hsla[ 2 ] == null ) {\n\t\treturn [ null, null, null, hsla[ 3 ] ];\n\t}\n\tvar h = hsla[ 0 ] / 360,\n\t\ts = hsla[ 1 ],\n\t\tl = hsla[ 2 ],\n\t\ta = hsla[ 3 ],\n\t\tq = l <= 0.5 ? l * ( 1 + s ) : l + s - l * s,\n\t\tp = 2 * l - q;\n\n\treturn [\n\t\tMath.round( hue2rgb( p, q, h + ( 1 / 3 ) ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h ) * 255 ),\n\t\tMath.round( hue2rgb( p, q, h - ( 1 / 3 ) ) * 255 ),\n\t\ta\n\t];\n};\n\neach( spaces, function( spaceName, space ) {\n\tvar props = space.props,\n\t\tcache = space.cache,\n\t\tto = space.to,\n\t\tfrom = space.from;\n\n\t// Makes rgba() and hsla()\n\tcolor.fn[ spaceName ] = function( value ) {\n\n\t\t// Generate a cache for this space if it doesn't exist\n\t\tif ( to && !this[ cache ] ) {\n\t\t\tthis[ cache ] = to( this._rgba );\n\t\t}\n\t\tif ( value === undefined ) {\n\t\t\treturn this[ cache ].slice();\n\t\t}\n\n\t\tvar ret,\n\t\t\ttype = jQuery.type( value ),\n\t\t\tarr = ( type === \"array\" || type === \"object\" ) ? value : arguments,\n\t\t\tlocal = this[ cache ].slice();\n\n\t\teach( props, function( key, prop ) {\n\t\t\tvar val = arr[ type === \"object\" ? key : prop.idx ];\n\t\t\tif ( val == null ) {\n\t\t\t\tval = local[ prop.idx ];\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = clamp( val, prop );\n\t\t} );\n\n\t\tif ( from ) {\n\t\t\tret = color( from( local ) );\n\t\t\tret[ cache ] = local;\n\t\t\treturn ret;\n\t\t} else {\n\t\t\treturn color( local );\n\t\t}\n\t};\n\n\t// Makes red() green() blue() alpha() hue() saturation() lightness()\n\teach( props, function( key, prop ) {\n\n\t\t// Alpha is included in more than one space\n\t\tif ( color.fn[ key ] ) {\n\t\t\treturn;\n\t\t}\n\t\tcolor.fn[ key ] = function( value ) {\n\t\t\tvar vtype = jQuery.type( value ),\n\t\t\t\tfn = ( key === \"alpha\" ? ( this._hsla ? \"hsla\" : \"rgba\" ) : spaceName ),\n\t\t\t\tlocal = this[ fn ](),\n\t\t\t\tcur = local[ prop.idx ],\n\t\t\t\tmatch;\n\n\t\t\tif ( vtype === \"undefined\" ) {\n\t\t\t\treturn cur;\n\t\t\t}\n\n\t\t\tif ( vtype === \"function\" ) {\n\t\t\t\tvalue = value.call( this, cur );\n\t\t\t\tvtype = jQuery.type( value );\n\t\t\t}\n\t\t\tif ( value == null && prop.empty ) {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\tif ( vtype === \"string\" ) {\n\t\t\t\tmatch = rplusequals.exec( value );\n\t\t\t\tif ( match ) {\n\t\t\t\t\tvalue = cur + parseFloat( match[ 2 ] ) * ( match[ 1 ] === \"+\" ? 1 : -1 );\n\t\t\t\t}\n\t\t\t}\n\t\t\tlocal[ prop.idx ] = value;\n\t\t\treturn this[ fn ]( local );\n\t\t};\n\t} );\n} );\n\n// Add cssHook and .fx.step function for each named hook.\n// accept a space separated string of properties\ncolor.hook = function( hook ) {\n\tvar hooks = hook.split( \" \" );\n\teach( hooks, function( i, hook ) {\n\t\tjQuery.cssHooks[ hook ] = {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tvar parsed, curElem,\n\t\t\t\t\tbackgroundColor = \"\";\n\n\t\t\t\tif ( value !== \"transparent\" && ( jQuery.type( value ) !== \"string\" ||\n\t\t\t\t\t\t( parsed = stringParse( value ) ) ) ) {\n\t\t\t\t\tvalue = color( parsed || value );\n\t\t\t\t\tif ( !support.rgba && value._rgba[ 3 ] !== 1 ) {\n\t\t\t\t\t\tcurElem = hook === \"backgroundColor\" ? elem.parentNode : elem;\n\t\t\t\t\t\twhile (\n\t\t\t\t\t\t\t( backgroundColor === \"\" || backgroundColor === \"transparent\" ) &&\n\t\t\t\t\t\t\tcurElem && curElem.style\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tbackgroundColor = jQuery.css( curElem, \"backgroundColor\" );\n\t\t\t\t\t\t\t\tcurElem = curElem.parentNode;\n\t\t\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvalue = value.blend( backgroundColor && backgroundColor !== \"transparent\" ?\n\t\t\t\t\t\t\tbackgroundColor :\n\t\t\t\t\t\t\t\"_default\" );\n\t\t\t\t\t}\n\n\t\t\t\t\tvalue = value.toRgbaString();\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\telem.style[ hook ] = value;\n\t\t\t\t} catch ( e ) {\n\n\t\t\t\t\t// Wrapped to prevent IE from throwing errors on \"invalid\" values like\n\t\t\t\t\t// 'auto' or 'inherit'\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tjQuery.fx.step[ hook ] = function( fx ) {\n\t\t\tif ( !fx.colorInit ) {\n\t\t\t\tfx.start = color( fx.elem, hook );\n\t\t\t\tfx.end = color( fx.end );\n\t\t\t\tfx.colorInit = true;\n\t\t\t}\n\t\t\tjQuery.cssHooks[ hook ].set( fx.elem, fx.start.transition( fx.end, fx.pos ) );\n\t\t};\n\t} );\n\n};\n\ncolor.hook( stepHooks );\n\njQuery.cssHooks.borderColor = {\n\texpand: function( value ) {\n\t\tvar expanded = {};\n\n\t\teach( [ \"Top\", \"Right\", \"Bottom\", \"Left\" ], function( i, part ) {\n\t\t\texpanded[ \"border\" + part + \"Color\" ] = value;\n\t\t} );\n\t\treturn expanded;\n\t}\n};\n\n// Basic color names only.\n// Usage of any of the other color names requires adding yourself or including\n// jquery.color.svg-names.js.\ncolors = jQuery.Color.names = {\n\n\t// 4.1. Basic color keywords\n\taqua: \"#00ffff\",\n\tblack: \"#000000\",\n\tblue: \"#0000ff\",\n\tfuchsia: \"#ff00ff\",\n\tgray: \"#808080\",\n\tgreen: \"#008000\",\n\tlime: \"#00ff00\",\n\tmaroon: \"#800000\",\n\tnavy: \"#000080\",\n\tolive: \"#808000\",\n\tpurple: \"#800080\",\n\tred: \"#ff0000\",\n\tsilver: \"#c0c0c0\",\n\tteal: \"#008080\",\n\twhite: \"#ffffff\",\n\tyellow: \"#ffff00\",\n\n\t// 4.2.3. \"transparent\" color keyword\n\ttransparent: [ null, null, null, 0 ],\n\n\t_default: \"#ffffff\"\n};\n\n} )( jQuery );\n\n/******************************************************************************/\n/****************************** CLASS ANIMATIONS ******************************/\n/******************************************************************************/\n( function() {\n\nvar classAnimationActions = [ \"add\", \"remove\", \"toggle\" ],\n\tshorthandStyles = {\n\t\tborder: 1,\n\t\tborderBottom: 1,\n\t\tborderColor: 1,\n\t\tborderLeft: 1,\n\t\tborderRight: 1,\n\t\tborderTop: 1,\n\t\tborderWidth: 1,\n\t\tmargin: 1,\n\t\tpadding: 1\n\t};\n\n$.each(\n\t[ \"borderLeftStyle\", \"borderRightStyle\", \"borderBottomStyle\", \"borderTopStyle\" ],\n\tfunction( _, prop ) {\n\t\t$.fx.step[ prop ] = function( fx ) {\n\t\t\tif ( fx.end !== \"none\" && !fx.setAttr || fx.pos === 1 && !fx.setAttr ) {\n\t\t\t\tjQuery.style( fx.elem, prop, fx.end );\n\t\t\t\tfx.setAttr = true;\n\t\t\t}\n\t\t};\n\t}\n);\n\nfunction getElementStyles( elem ) {\n\tvar key, len,\n\t\tstyle = elem.ownerDocument.defaultView ?\n\t\t\telem.ownerDocument.defaultView.getComputedStyle( elem, null ) :\n\t\t\telem.currentStyle,\n\t\tstyles = {};\n\n\tif ( style && style.length && style[ 0 ] && style[ style[ 0 ] ] ) {\n\t\tlen = style.length;\n\t\twhile ( len-- ) {\n\t\t\tkey = style[ len ];\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ $.camelCase( key ) ] = style[ key ];\n\t\t\t}\n\t\t}\n\n\t// Support: Opera, IE <9\n\t} else {\n\t\tfor ( key in style ) {\n\t\t\tif ( typeof style[ key ] === \"string\" ) {\n\t\t\t\tstyles[ key ] = style[ key ];\n\t\t\t}\n\t\t}\n\t}\n\n\treturn styles;\n}\n\nfunction styleDifference( oldStyle, newStyle ) {\n\tvar diff = {},\n\t\tname, value;\n\n\tfor ( name in newStyle ) {\n\t\tvalue = newStyle[ name ];\n\t\tif ( oldStyle[ name ] !== value ) {\n\t\t\tif ( !shorthandStyles[ name ] ) {\n\t\t\t\tif ( $.fx.step[ name ] || !isNaN( parseFloat( value ) ) ) {\n\t\t\t\t\tdiff[ name ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn diff;\n}\n\n// Support: jQuery <1.8\nif ( !$.fn.addBack ) {\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n$.effects.animateClass = function( value, duration, easing, callback ) {\n\tvar o = $.speed( duration, easing, callback );\n\n\treturn this.queue( function() {\n\t\tvar animated = $( this ),\n\t\t\tbaseClass = animated.attr( \"class\" ) || \"\",\n\t\t\tapplyClassChange,\n\t\t\tallAnimations = o.children ? animated.find( \"*\" ).addBack() : animated;\n\n\t\t// Map the animated objects to store the original styles.\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar el = $( this );\n\t\t\treturn {\n\t\t\t\tel: el,\n\t\t\t\tstart: getElementStyles( this )\n\t\t\t};\n\t\t} );\n\n\t\t// Apply class change\n\t\tapplyClassChange = function() {\n\t\t\t$.each( classAnimationActions, function( i, action ) {\n\t\t\t\tif ( value[ action ] ) {\n\t\t\t\t\tanimated[ action + \"Class\" ]( value[ action ] );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t\tapplyClassChange();\n\n\t\t// Map all animated objects again - calculate new styles and diff\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tthis.end = getElementStyles( this.el[ 0 ] );\n\t\t\tthis.diff = styleDifference( this.start, this.end );\n\t\t\treturn this;\n\t\t} );\n\n\t\t// Apply original class\n\t\tanimated.attr( \"class\", baseClass );\n\n\t\t// Map all animated objects again - this time collecting a promise\n\t\tallAnimations = allAnimations.map( function() {\n\t\t\tvar styleInfo = this,\n\t\t\t\tdfd = $.Deferred(),\n\t\t\t\topts = $.extend( {}, o, {\n\t\t\t\t\tqueue: false,\n\t\t\t\t\tcomplete: function() {\n\t\t\t\t\t\tdfd.resolve( styleInfo );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\tthis.el.animate( this.diff, opts );\n\t\t\treturn dfd.promise();\n\t\t} );\n\n\t\t// Once all animations have completed:\n\t\t$.when.apply( $, allAnimations.get() ).done( function() {\n\n\t\t\t// Set the final class\n\t\t\tapplyClassChange();\n\n\t\t\t// For each animated element,\n\t\t\t// clear all css properties that were animated\n\t\t\t$.each( arguments, function() {\n\t\t\t\tvar el = this.el;\n\t\t\t\t$.each( this.diff, function( key ) {\n\t\t\t\t\tel.css( key, \"\" );\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// This is guarnteed to be there if you use jQuery.speed()\n\t\t\t// it also handles dequeuing the next anim...\n\t\t\to.complete.call( animated[ 0 ] );\n\t\t} );\n\t} );\n};\n\n$.fn.extend( {\n\taddClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn speed ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ add: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.addClass ),\n\n\tremoveClass: ( function( orig ) {\n\t\treturn function( classNames, speed, easing, callback ) {\n\t\t\treturn arguments.length > 1 ?\n\t\t\t\t$.effects.animateClass.call( this,\n\t\t\t\t\t{ remove: classNames }, speed, easing, callback ) :\n\t\t\t\torig.apply( this, arguments );\n\t\t};\n\t} )( $.fn.removeClass ),\n\n\ttoggleClass: ( function( orig ) {\n\t\treturn function( classNames, force, speed, easing, callback ) {\n\t\t\tif ( typeof force === \"boolean\" || force === undefined ) {\n\t\t\t\tif ( !speed ) {\n\n\t\t\t\t\t// Without speed parameter\n\t\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t\t} else {\n\t\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t\t( force ? { add: classNames } : { remove: classNames } ),\n\t\t\t\t\t\tspeed, easing, callback );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// Without force parameter\n\t\t\t\treturn $.effects.animateClass.call( this,\n\t\t\t\t\t{ toggle: classNames }, force, speed, easing );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggleClass ),\n\n\tswitchClass: function( remove, add, speed, easing, callback ) {\n\t\treturn $.effects.animateClass.call( this, {\n\t\t\tadd: add,\n\t\t\tremove: remove\n\t\t}, speed, easing, callback );\n\t}\n} );\n\n} )();\n\n/******************************************************************************/\n/*********************************** EFFECTS **********************************/\n/******************************************************************************/\n\n( function() {\n\nif ( $.expr && $.expr.filters && $.expr.filters.animated ) {\n\t$.expr.filters.animated = ( function( orig ) {\n\t\treturn function( elem ) {\n\t\t\treturn !!$( elem ).data( dataSpaceAnimated ) || orig( elem );\n\t\t};\n\t} )( $.expr.filters.animated );\n}\n\nif ( $.uiBackCompat !== false ) {\n\t$.extend( $.effects, {\n\n\t\t// Saves a set of properties in a data storage\n\t\tsave: function( element, set ) {\n\t\t\tvar i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\telement.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Restores a set of previously saved properties from a data storage\n\t\trestore: function( element, set ) {\n\t\t\tvar val, i = 0, length = set.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( set[ i ] !== null ) {\n\t\t\t\t\tval = element.data( dataSpace + set[ i ] );\n\t\t\t\t\telement.css( set[ i ], val );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tsetMode: function( el, mode ) {\n\t\t\tif ( mode === \"toggle\" ) {\n\t\t\t\tmode = el.is( \":hidden\" ) ? \"show\" : \"hide\";\n\t\t\t}\n\t\t\treturn mode;\n\t\t},\n\n\t\t// Wraps the element around a wrapper that copies position properties\n\t\tcreateWrapper: function( element ) {\n\n\t\t\t// If the element is already wrapped, return it\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\treturn element.parent();\n\t\t\t}\n\n\t\t\t// Wrap the element\n\t\t\tvar props = {\n\t\t\t\t\twidth: element.outerWidth( true ),\n\t\t\t\t\theight: element.outerHeight( true ),\n\t\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t\t},\n\t\t\t\twrapper = $( \"<div></div>\" )\n\t\t\t\t\t.addClass( \"ui-effects-wrapper\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tfontSize: \"100%\",\n\t\t\t\t\t\tbackground: \"transparent\",\n\t\t\t\t\t\tborder: \"none\",\n\t\t\t\t\t\tmargin: 0,\n\t\t\t\t\t\tpadding: 0\n\t\t\t\t\t} ),\n\n\t\t\t\t// Store the size in case width/height are defined in % - Fixes #5245\n\t\t\t\tsize = {\n\t\t\t\t\twidth: element.width(),\n\t\t\t\t\theight: element.height()\n\t\t\t\t},\n\t\t\t\tactive = document.activeElement;\n\n\t\t\t// Support: Firefox\n\t\t\t// Firefox incorrectly exposes anonymous content\n\t\t\t// https://bugzilla.mozilla.org/show_bug.cgi?id=561664\n\t\t\ttry {\n\t\t\t\tactive.id;\n\t\t\t} catch ( e ) {\n\t\t\t\tactive = document.body;\n\t\t\t}\n\n\t\t\telement.wrap( wrapper );\n\n\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t// Hotfix for jQuery 1.4 since some change in wrap() seems to actually\n\t\t\t// lose the reference to the wrapped element\n\t\t\twrapper = element.parent();\n\n\t\t\t// Transfer positioning properties to the wrapper\n\t\t\tif ( element.css( \"position\" ) === \"static\" ) {\n\t\t\t\twrapper.css( { position: \"relative\" } );\n\t\t\t\telement.css( { position: \"relative\" } );\n\t\t\t} else {\n\t\t\t\t$.extend( props, {\n\t\t\t\t\tposition: element.css( \"position\" ),\n\t\t\t\t\tzIndex: element.css( \"z-index\" )\n\t\t\t\t} );\n\t\t\t\t$.each( [ \"top\", \"left\", \"bottom\", \"right\" ], function( i, pos ) {\n\t\t\t\t\tprops[ pos ] = element.css( pos );\n\t\t\t\t\tif ( isNaN( parseInt( props[ pos ], 10 ) ) ) {\n\t\t\t\t\t\tprops[ pos ] = \"auto\";\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\telement.css( {\n\t\t\t\t\tposition: \"relative\",\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\tright: \"auto\",\n\t\t\t\t\tbottom: \"auto\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\telement.css( size );\n\n\t\t\treturn wrapper.css( props ).show();\n\t\t},\n\n\t\tremoveWrapper: function( element ) {\n\t\t\tvar active = document.activeElement;\n\n\t\t\tif ( element.parent().is( \".ui-effects-wrapper\" ) ) {\n\t\t\t\telement.parent().replaceWith( element );\n\n\t\t\t\t// Fixes #7595 - Elements lose focus when wrapped.\n\t\t\t\tif ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) {\n\t\t\t\t\t$( active ).trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn element;\n\t\t}\n\t} );\n}\n\n$.extend( $.effects, {\n\tversion: \"1.12.1\",\n\n\tdefine: function( name, mode, effect ) {\n\t\tif ( !effect ) {\n\t\t\teffect = mode;\n\t\t\tmode = \"effect\";\n\t\t}\n\n\t\t$.effects.effect[ name ] = effect;\n\t\t$.effects.effect[ name ].mode = mode;\n\n\t\treturn effect;\n\t},\n\n\tscaledDimensions: function( element, percent, direction ) {\n\t\tif ( percent === 0 ) {\n\t\t\treturn {\n\t\t\t\theight: 0,\n\t\t\t\twidth: 0,\n\t\t\t\touterHeight: 0,\n\t\t\t\touterWidth: 0\n\t\t\t};\n\t\t}\n\n\t\tvar x = direction !== \"horizontal\" ? ( ( percent || 100 ) / 100 ) : 1,\n\t\t\ty = direction !== \"vertical\" ? ( ( percent || 100 ) / 100 ) : 1;\n\n\t\treturn {\n\t\t\theight: element.height() * y,\n\t\t\twidth: element.width() * x,\n\t\t\touterHeight: element.outerHeight() * y,\n\t\t\touterWidth: element.outerWidth() * x\n\t\t};\n\n\t},\n\n\tclipToBox: function( animation ) {\n\t\treturn {\n\t\t\twidth: animation.clip.right - animation.clip.left,\n\t\t\theight: animation.clip.bottom - animation.clip.top,\n\t\t\tleft: animation.clip.left,\n\t\t\ttop: animation.clip.top\n\t\t};\n\t},\n\n\t// Injects recently queued functions to be first in line (after \"inprogress\")\n\tunshift: function( element, queueLength, count ) {\n\t\tvar queue = element.queue();\n\n\t\tif ( queueLength > 1 ) {\n\t\t\tqueue.splice.apply( queue,\n\t\t\t\t[ 1, 0 ].concat( queue.splice( queueLength, count ) ) );\n\t\t}\n\t\telement.dequeue();\n\t},\n\n\tsaveStyle: function( element ) {\n\t\telement.data( dataSpaceStyle, element[ 0 ].style.cssText );\n\t},\n\n\trestoreStyle: function( element ) {\n\t\telement[ 0 ].style.cssText = element.data( dataSpaceStyle ) || \"\";\n\t\telement.removeData( dataSpaceStyle );\n\t},\n\n\tmode: function( element, mode ) {\n\t\tvar hidden = element.is( \":hidden\" );\n\n\t\tif ( mode === \"toggle\" ) {\n\t\t\tmode = hidden ? \"show\" : \"hide\";\n\t\t}\n\t\tif ( hidden ? mode === \"hide\" : mode === \"show\" ) {\n\t\t\tmode = \"none\";\n\t\t}\n\t\treturn mode;\n\t},\n\n\t// Translates a [top,left] array into a baseline value\n\tgetBaseline: function( origin, original ) {\n\t\tvar y, x;\n\n\t\tswitch ( origin[ 0 ] ) {\n\t\tcase \"top\":\n\t\t\ty = 0;\n\t\t\tbreak;\n\t\tcase \"middle\":\n\t\t\ty = 0.5;\n\t\t\tbreak;\n\t\tcase \"bottom\":\n\t\t\ty = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ty = origin[ 0 ] / original.height;\n\t\t}\n\n\t\tswitch ( origin[ 1 ] ) {\n\t\tcase \"left\":\n\t\t\tx = 0;\n\t\t\tbreak;\n\t\tcase \"center\":\n\t\t\tx = 0.5;\n\t\t\tbreak;\n\t\tcase \"right\":\n\t\t\tx = 1;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tx = origin[ 1 ] / original.width;\n\t\t}\n\n\t\treturn {\n\t\t\tx: x,\n\t\t\ty: y\n\t\t};\n\t},\n\n\t// Creates a placeholder element so that the original element can be made absolute\n\tcreatePlaceholder: function( element ) {\n\t\tvar placeholder,\n\t\t\tcssPosition = element.css( \"position\" ),\n\t\t\tposition = element.position();\n\n\t\t// Lock in margins first to account for form elements, which\n\t\t// will change margin if you explicitly set height\n\t\t// see: http://jsfiddle.net/JZSMt/3/ https://bugs.webkit.org/show_bug.cgi?id=107380\n\t\t// Support: Safari\n\t\telement.css( {\n\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\tmarginRight: element.css( \"marginRight\" )\n\t\t} )\n\t\t.outerWidth( element.outerWidth() )\n\t\t.outerHeight( element.outerHeight() );\n\n\t\tif ( /^(static|relative)/.test( cssPosition ) ) {\n\t\t\tcssPosition = \"absolute\";\n\n\t\t\tplaceholder = $( \"<\" + element[ 0 ].nodeName + \">\" ).insertAfter( element ).css( {\n\n\t\t\t\t// Convert inline to inline block to account for inline elements\n\t\t\t\t// that turn to inline block based on content (like img)\n\t\t\t\tdisplay: /^(inline|ruby)/.test( element.css( \"display\" ) ) ?\n\t\t\t\t\t\"inline-block\" :\n\t\t\t\t\t\"block\",\n\t\t\t\tvisibility: \"hidden\",\n\n\t\t\t\t// Margins need to be set to account for margin collapse\n\t\t\t\tmarginTop: element.css( \"marginTop\" ),\n\t\t\t\tmarginBottom: element.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: element.css( \"marginLeft\" ),\n\t\t\t\tmarginRight: element.css( \"marginRight\" ),\n\t\t\t\t\"float\": element.css( \"float\" )\n\t\t\t} )\n\t\t\t.outerWidth( element.outerWidth() )\n\t\t\t.outerHeight( element.outerHeight() )\n\t\t\t.addClass( \"ui-effects-placeholder\" );\n\n\t\t\telement.data( dataSpace + \"placeholder\", placeholder );\n\t\t}\n\n\t\telement.css( {\n\t\t\tposition: cssPosition,\n\t\t\tleft: position.left,\n\t\t\ttop: position.top\n\t\t} );\n\n\t\treturn placeholder;\n\t},\n\n\tremovePlaceholder: function( element ) {\n\t\tvar dataKey = dataSpace + \"placeholder\",\n\t\t\t\tplaceholder = element.data( dataKey );\n\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.remove();\n\t\t\telement.removeData( dataKey );\n\t\t}\n\t},\n\n\t// Removes a placeholder if it exists and restores\n\t// properties that were modified during placeholder creation\n\tcleanUp: function( element ) {\n\t\t$.effects.restoreStyle( element );\n\t\t$.effects.removePlaceholder( element );\n\t},\n\n\tsetTransition: function( element, list, factor, value ) {\n\t\tvalue = value || {};\n\t\t$.each( list, function( i, x ) {\n\t\t\tvar unit = element.cssUnit( x );\n\t\t\tif ( unit[ 0 ] > 0 ) {\n\t\t\t\tvalue[ x ] = unit[ 0 ] * factor + unit[ 1 ];\n\t\t\t}\n\t\t} );\n\t\treturn value;\n\t}\n} );\n\n// Return an effect options object for the given parameters:\nfunction _normalizeArguments( effect, options, speed, callback ) {\n\n\t// Allow passing all options as the first parameter\n\tif ( $.isPlainObject( effect ) ) {\n\t\toptions = effect;\n\t\teffect = effect.effect;\n\t}\n\n\t// Convert to an object\n\teffect = { effect: effect };\n\n\t// Catch (effect, null, ...)\n\tif ( options == null ) {\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, callback)\n\tif ( $.isFunction( options ) ) {\n\t\tcallback = options;\n\t\tspeed = null;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, speed, ?)\n\tif ( typeof options === \"number\" || $.fx.speeds[ options ] ) {\n\t\tcallback = speed;\n\t\tspeed = options;\n\t\toptions = {};\n\t}\n\n\t// Catch (effect, options, callback)\n\tif ( $.isFunction( speed ) ) {\n\t\tcallback = speed;\n\t\tspeed = null;\n\t}\n\n\t// Add options to effect\n\tif ( options ) {\n\t\t$.extend( effect, options );\n\t}\n\n\tspeed = speed || options.duration;\n\teffect.duration = $.fx.off ? 0 :\n\t\ttypeof speed === \"number\" ? speed :\n\t\tspeed in $.fx.speeds ? $.fx.speeds[ speed ] :\n\t\t$.fx.speeds._default;\n\n\teffect.complete = callback || options.complete;\n\n\treturn effect;\n}\n\nfunction standardAnimationOption( option ) {\n\n\t// Valid standard speeds (nothing, number, named speed)\n\tif ( !option || typeof option === \"number\" || $.fx.speeds[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Invalid strings - treat as \"normal\" speed\n\tif ( typeof option === \"string\" && !$.effects.effect[ option ] ) {\n\t\treturn true;\n\t}\n\n\t// Complete callback\n\tif ( $.isFunction( option ) ) {\n\t\treturn true;\n\t}\n\n\t// Options hash (but not naming an effect)\n\tif ( typeof option === \"object\" && !option.effect ) {\n\t\treturn true;\n\t}\n\n\t// Didn't match any standard API\n\treturn false;\n}\n\n$.fn.extend( {\n\teffect: function( /* effect, options, speed, callback */ ) {\n\t\tvar args = _normalizeArguments.apply( this, arguments ),\n\t\t\teffectMethod = $.effects.effect[ args.effect ],\n\t\t\tdefaultMode = effectMethod.mode,\n\t\t\tqueue = args.queue,\n\t\t\tqueueName = queue || \"fx\",\n\t\t\tcomplete = args.complete,\n\t\t\tmode = args.mode,\n\t\t\tmodes = [],\n\t\t\tprefilter = function( next ) {\n\t\t\t\tvar el = $( this ),\n\t\t\t\t\tnormalizedMode = $.effects.mode( el, mode ) || defaultMode;\n\n\t\t\t\t// Sentinel for duck-punching the :animated psuedo-selector\n\t\t\t\tel.data( dataSpaceAnimated, true );\n\n\t\t\t\t// Save effect mode for later use,\n\t\t\t\t// we can't just call $.effects.mode again later,\n\t\t\t\t// as the .show() below destroys the initial state\n\t\t\t\tmodes.push( normalizedMode );\n\n\t\t\t\t// See $.uiBackCompat inside of run() for removal of defaultMode in 1.13\n\t\t\t\tif ( defaultMode && ( normalizedMode === \"show\" ||\n\t\t\t\t\t\t( normalizedMode === defaultMode && normalizedMode === \"hide\" ) ) ) {\n\t\t\t\t\tel.show();\n\t\t\t\t}\n\n\t\t\t\tif ( !defaultMode || normalizedMode !== \"none\" ) {\n\t\t\t\t\t$.effects.saveStyle( el );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t};\n\n\t\tif ( $.fx.off || !effectMethod ) {\n\n\t\t\t// Delegate to the original method (e.g., .show()) if possible\n\t\t\tif ( mode ) {\n\t\t\t\treturn this[ mode ]( args.duration, complete );\n\t\t\t} else {\n\t\t\t\treturn this.each( function() {\n\t\t\t\t\tif ( complete ) {\n\t\t\t\t\t\tcomplete.call( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\tfunction run( next ) {\n\t\t\tvar elem = $( this );\n\n\t\t\tfunction cleanup() {\n\t\t\t\telem.removeData( dataSpaceAnimated );\n\n\t\t\t\t$.effects.cleanUp( elem );\n\n\t\t\t\tif ( args.mode === \"hide\" ) {\n\t\t\t\t\telem.hide();\n\t\t\t\t}\n\n\t\t\t\tdone();\n\t\t\t}\n\n\t\t\tfunction done() {\n\t\t\t\tif ( $.isFunction( complete ) ) {\n\t\t\t\t\tcomplete.call( elem[ 0 ] );\n\t\t\t\t}\n\n\t\t\t\tif ( $.isFunction( next ) ) {\n\t\t\t\t\tnext();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Override mode option on a per element basis,\n\t\t\t// as toggle can be either show or hide depending on element state\n\t\t\targs.mode = modes.shift();\n\n\t\t\tif ( $.uiBackCompat !== false && !defaultMode ) {\n\t\t\t\tif ( elem.is( \":hidden\" ) ? mode === \"hide\" : mode === \"show\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, done );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif ( args.mode === \"none\" ) {\n\n\t\t\t\t\t// Call the core method to track \"olddisplay\" properly\n\t\t\t\t\telem[ mode ]();\n\t\t\t\t\tdone();\n\t\t\t\t} else {\n\t\t\t\t\teffectMethod.call( elem[ 0 ], args, cleanup );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Run prefilter on all elements first to ensure that\n\t\t// any showing or hiding happens before placeholder creation,\n\t\t// which ensures that any layout changes are correctly captured.\n\t\treturn queue === false ?\n\t\t\tthis.each( prefilter ).each( run ) :\n\t\t\tthis.queue( queueName, prefilter ).queue( queueName, run );\n\t},\n\n\tshow: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"show\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.show ),\n\n\thide: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"hide\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.hide ),\n\n\ttoggle: ( function( orig ) {\n\t\treturn function( option ) {\n\t\t\tif ( standardAnimationOption( option ) || typeof option === \"boolean\" ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t} else {\n\t\t\t\tvar args = _normalizeArguments.apply( this, arguments );\n\t\t\t\targs.mode = \"toggle\";\n\t\t\t\treturn this.effect.call( this, args );\n\t\t\t}\n\t\t};\n\t} )( $.fn.toggle ),\n\n\tcssUnit: function( key ) {\n\t\tvar style = this.css( key ),\n\t\t\tval = [];\n\n\t\t$.each( [ \"em\", \"px\", \"%\", \"pt\" ], function( i, unit ) {\n\t\t\tif ( style.indexOf( unit ) > 0 ) {\n\t\t\t\tval = [ parseFloat( style ), unit ];\n\t\t\t}\n\t\t} );\n\t\treturn val;\n\t},\n\n\tcssClip: function( clipObj ) {\n\t\tif ( clipObj ) {\n\t\t\treturn this.css( \"clip\", \"rect(\" + clipObj.top + \"px \" + clipObj.right + \"px \" +\n\t\t\t\tclipObj.bottom + \"px \" + clipObj.left + \"px)\" );\n\t\t}\n\t\treturn parseClip( this.css( \"clip\" ), this );\n\t},\n\n\ttransfer: function( options, done ) {\n\t\tvar element = $( this ),\n\t\t\ttarget = $( options.to ),\n\t\t\ttargetFixed = target.css( \"position\" ) === \"fixed\",\n\t\t\tbody = $( \"body\" ),\n\t\t\tfixTop = targetFixed ? body.scrollTop() : 0,\n\t\t\tfixLeft = targetFixed ? body.scrollLeft() : 0,\n\t\t\tendPosition = target.offset(),\n\t\t\tanimation = {\n\t\t\t\ttop: endPosition.top - fixTop,\n\t\t\t\tleft: endPosition.left - fixLeft,\n\t\t\t\theight: target.innerHeight(),\n\t\t\t\twidth: target.innerWidth()\n\t\t\t},\n\t\t\tstartPosition = element.offset(),\n\t\t\ttransfer = $( \"<div class='ui-effects-transfer'></div>\" )\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.addClass( options.className )\n\t\t\t\t.css( {\n\t\t\t\t\ttop: startPosition.top - fixTop,\n\t\t\t\t\tleft: startPosition.left - fixLeft,\n\t\t\t\t\theight: element.innerHeight(),\n\t\t\t\t\twidth: element.innerWidth(),\n\t\t\t\t\tposition: targetFixed ? \"fixed\" : \"absolute\"\n\t\t\t\t} )\n\t\t\t\t.animate( animation, options.duration, options.easing, function() {\n\t\t\t\t\ttransfer.remove();\n\t\t\t\t\tif ( $.isFunction( done ) ) {\n\t\t\t\t\t\tdone();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t}\n} );\n\nfunction parseClip( str, element ) {\n\t\tvar outerWidth = element.outerWidth(),\n\t\t\touterHeight = element.outerHeight(),\n\t\t\tclipRegex = /^rect\\((-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto),?\\s*(-?\\d*\\.?\\d*px|-?\\d+%|auto)\\)$/,\n\t\t\tvalues = clipRegex.exec( str ) || [ \"\", 0, outerWidth, outerHeight, 0 ];\n\n\t\treturn {\n\t\t\ttop: parseFloat( values[ 1 ] ) || 0,\n\t\t\tright: values[ 2 ] === \"auto\" ? outerWidth : parseFloat( values[ 2 ] ),\n\t\t\tbottom: values[ 3 ] === \"auto\" ? outerHeight : parseFloat( values[ 3 ] ),\n\t\t\tleft: parseFloat( values[ 4 ] ) || 0\n\t\t};\n}\n\n$.fx.step.clip = function( fx ) {\n\tif ( !fx.clipInit ) {\n\t\tfx.start = $( fx.elem ).cssClip();\n\t\tif ( typeof fx.end === \"string\" ) {\n\t\t\tfx.end = parseClip( fx.end, fx.elem );\n\t\t}\n\t\tfx.clipInit = true;\n\t}\n\n\t$( fx.elem ).cssClip( {\n\t\ttop: fx.pos * ( fx.end.top - fx.start.top ) + fx.start.top,\n\t\tright: fx.pos * ( fx.end.right - fx.start.right ) + fx.start.right,\n\t\tbottom: fx.pos * ( fx.end.bottom - fx.start.bottom ) + fx.start.bottom,\n\t\tleft: fx.pos * ( fx.end.left - fx.start.left ) + fx.start.left\n\t} );\n};\n\n} )();\n\n/******************************************************************************/\n/*********************************** EASING ***********************************/\n/******************************************************************************/\n\n( function() {\n\n// Based on easing equations from Robert Penner (http://www.robertpenner.com/easing)\n\nvar baseEasings = {};\n\n$.each( [ \"Quad\", \"Cubic\", \"Quart\", \"Quint\", \"Expo\" ], function( i, name ) {\n\tbaseEasings[ name ] = function( p ) {\n\t\treturn Math.pow( p, i + 2 );\n\t};\n} );\n\n$.extend( baseEasings, {\n\tSine: function( p ) {\n\t\treturn 1 - Math.cos( p * Math.PI / 2 );\n\t},\n\tCirc: function( p ) {\n\t\treturn 1 - Math.sqrt( 1 - p * p );\n\t},\n\tElastic: function( p ) {\n\t\treturn p === 0 || p === 1 ? p :\n\t\t\t-Math.pow( 2, 8 * ( p - 1 ) ) * Math.sin( ( ( p - 1 ) * 80 - 7.5 ) * Math.PI / 15 );\n\t},\n\tBack: function( p ) {\n\t\treturn p * p * ( 3 * p - 2 );\n\t},\n\tBounce: function( p ) {\n\t\tvar pow2,\n\t\t\tbounce = 4;\n\n\t\twhile ( p < ( ( pow2 = Math.pow( 2, --bounce ) ) - 1 ) / 11 ) {}\n\t\treturn 1 / Math.pow( 4, 3 - bounce ) - 7.5625 * Math.pow( ( pow2 * 3 - 2 ) / 22 - p, 2 );\n\t}\n} );\n\n$.each( baseEasings, function( name, easeIn ) {\n\t$.easing[ \"easeIn\" + name ] = easeIn;\n\t$.easing[ \"easeOut\" + name ] = function( p ) {\n\t\treturn 1 - easeIn( 1 - p );\n\t};\n\t$.easing[ \"easeInOut\" + name ] = function( p ) {\n\t\treturn p < 0.5 ?\n\t\t\teaseIn( p * 2 ) / 2 :\n\t\t\t1 - easeIn( p * -2 + 2 ) / 2;\n\t};\n} );\n\n} )();\n\nvar effect = $.effects;\n\n\n/*!\n * jQuery UI Effects Blind 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Blind Effect\n//>>group: Effects\n//>>description: Blinds the element.\n//>>docs: http://api.jqueryui.com/blind-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectBlind = $.effects.define( \"blind\", \"hide\", function( options, done ) {\n\tvar map = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tvertical: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\thorizontal: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"up\",\n\t\tstart = element.cssClip(),\n\t\tanimate = { clip: $.extend( {}, start ) },\n\t\tplaceholder = $.effects.createPlaceholder( element );\n\n\tanimate.clip[ map[ direction ][ 0 ] ] = animate.clip[ map[ direction ][ 1 ] ];\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animate ) );\n\t\t}\n\n\t\tanimate.clip = start;\n\t}\n\n\tif ( placeholder ) {\n\t\tplaceholder.animate( $.effects.clipToBox( animate ), options.duration, options.easing );\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Bounce 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Bounce Effect\n//>>group: Effects\n//>>description: Bounces an element horizontally or vertically n times.\n//>>docs: http://api.jqueryui.com/bounce-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectBounce = $.effects.define( \"bounce\", function( options, done ) {\n\tvar upAnim, downAnim, refValue,\n\t\telement = $( this ),\n\n\t\t// Defaults:\n\t\tmode = options.mode,\n\t\thide = mode === \"hide\",\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"up\",\n\t\tdistance = options.distance,\n\t\ttimes = options.times || 5,\n\n\t\t// Number of internal animations\n\t\tanims = times * 2 + ( show || hide ? 1 : 0 ),\n\t\tspeed = options.duration / anims,\n\t\teasing = options.easing,\n\n\t\t// Utility:\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ),\n\t\ti = 0,\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\trefValue = element.css( ref );\n\n\t// Default distance for the BIGGEST bounce is the outer Distance / 3\n\tif ( !distance ) {\n\t\tdistance = element[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]() / 3;\n\t}\n\n\tif ( show ) {\n\t\tdownAnim = { opacity: 1 };\n\t\tdownAnim[ ref ] = refValue;\n\n\t\t// If we are showing, force opacity 0 and set the initial position\n\t\t// then do the \"first\" animation\n\t\telement\n\t\t\t.css( \"opacity\", 0 )\n\t\t\t.css( ref, motion ? -distance * 2 : distance * 2 )\n\t\t\t.animate( downAnim, speed, easing );\n\t}\n\n\t// Start at the smallest distance if we are hiding\n\tif ( hide ) {\n\t\tdistance = distance / Math.pow( 2, times - 1 );\n\t}\n\n\tdownAnim = {};\n\tdownAnim[ ref ] = refValue;\n\n\t// Bounces up/down/left/right then back to 0 -- times * 2 animations happen here\n\tfor ( ; i < times; i++ ) {\n\t\tupAnim = {};\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement\n\t\t\t.animate( upAnim, speed, easing )\n\t\t\t.animate( downAnim, speed, easing );\n\n\t\tdistance = hide ? distance * 2 : distance / 2;\n\t}\n\n\t// Last Bounce when Hiding\n\tif ( hide ) {\n\t\tupAnim = { opacity: 0 };\n\t\tupAnim[ ref ] = ( motion ? \"-=\" : \"+=\" ) + distance;\n\n\t\telement.animate( upAnim, speed, easing );\n\t}\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Clip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Clip Effect\n//>>group: Effects\n//>>description: Clips the element on and off like an old TV.\n//>>docs: http://api.jqueryui.com/clip-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectClip = $.effects.define( \"clip\", \"hide\", function( options, done ) {\n\tvar start,\n\t\tanimate = {},\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"vertical\",\n\t\tboth = direction === \"both\",\n\t\thorizontal = both || direction === \"horizontal\",\n\t\tvertical = both || direction === \"vertical\";\n\n\tstart = element.cssClip();\n\tanimate.clip = {\n\t\ttop: vertical ? ( start.bottom - start.top ) / 2 : start.top,\n\t\tright: horizontal ? ( start.right - start.left ) / 2 : start.right,\n\t\tbottom: vertical ? ( start.bottom - start.top ) / 2 : start.bottom,\n\t\tleft: horizontal ? ( start.right - start.left ) / 2 : start.left\n\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( options.mode === \"show\" ) {\n\t\telement.cssClip( animate.clip );\n\t\tanimate.clip = start;\n\t}\n\n\telement.animate( animate, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Drop 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Drop Effect\n//>>group: Effects\n//>>description: Moves an element in one direction and hides it at the same time.\n//>>docs: http://api.jqueryui.com/drop-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectDrop = $.effects.define( \"drop\", \"hide\", function( options, done ) {\n\n\tvar distance,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tmotion = ( direction === \"up\" || direction === \"left\" ) ? \"-=\" : \"+=\",\n\t\toppositeMotion = ( motion === \"+=\" ) ? \"-=\" : \"+=\",\n\t\tanimation = {\n\t\t\topacity: 0\n\t\t};\n\n\t$.effects.createPlaceholder( element );\n\n\tdistance = options.distance ||\n\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ) / 2;\n\n\tanimation[ ref ] = motion + distance;\n\n\tif ( show ) {\n\t\telement.css( animation );\n\n\t\tanimation[ ref ] = oppositeMotion + distance;\n\t\tanimation.opacity = 1;\n\t}\n\n\t// Animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Explode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Explode Effect\n//>>group: Effects\n// jscs:disable maximumLineLength\n//>>description: Explodes an element in all directions into n pieces. Implodes an element to its original wholeness.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/explode-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectExplode = $.effects.define( \"explode\", \"hide\", function( options, done ) {\n\n\tvar i, j, left, top, mx, my,\n\t\trows = options.pieces ? Math.round( Math.sqrt( options.pieces ) ) : 3,\n\t\tcells = rows,\n\t\telement = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\n\t\t// Show and then visibility:hidden the element before calculating offset\n\t\toffset = element.show().css( \"visibility\", \"hidden\" ).offset(),\n\n\t\t// Width and height of a piece\n\t\twidth = Math.ceil( element.outerWidth() / cells ),\n\t\theight = Math.ceil( element.outerHeight() / rows ),\n\t\tpieces = [];\n\n\t// Children animate complete:\n\tfunction childComplete() {\n\t\tpieces.push( this );\n\t\tif ( pieces.length === rows * cells ) {\n\t\t\tanimComplete();\n\t\t}\n\t}\n\n\t// Clone the element for each row and cell.\n\tfor ( i = 0; i < rows; i++ ) { // ===>\n\t\ttop = offset.top + i * height;\n\t\tmy = i - ( rows - 1 ) / 2;\n\n\t\tfor ( j = 0; j < cells; j++ ) { // |||\n\t\t\tleft = offset.left + j * width;\n\t\t\tmx = j - ( cells - 1 ) / 2;\n\n\t\t\t// Create a clone of the now hidden main element that will be absolute positioned\n\t\t\t// within a wrapper div off the -left and -top equal to size of our pieces\n\t\t\telement\n\t\t\t\t.clone()\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.wrap( \"<div></div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\tvisibility: \"visible\",\n\t\t\t\t\tleft: -j * width,\n\t\t\t\t\ttop: -i * height\n\t\t\t\t} )\n\n\t\t\t\t// Select the wrapper - make it overflow: hidden and absolute positioned based on\n\t\t\t\t// where the original was located +left and +top equal to the size of pieces\n\t\t\t\t.parent()\n\t\t\t\t\t.addClass( \"ui-effects-explode\" )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\t\toverflow: \"hidden\",\n\t\t\t\t\t\twidth: width,\n\t\t\t\t\t\theight: height,\n\t\t\t\t\t\tleft: left + ( show ? mx * width : 0 ),\n\t\t\t\t\t\ttop: top + ( show ? my * height : 0 ),\n\t\t\t\t\t\topacity: show ? 0 : 1\n\t\t\t\t\t} )\n\t\t\t\t\t.animate( {\n\t\t\t\t\t\tleft: left + ( show ? 0 : mx * width ),\n\t\t\t\t\t\ttop: top + ( show ? 0 : my * height ),\n\t\t\t\t\t\topacity: show ? 1 : 0\n\t\t\t\t\t}, options.duration || 500, options.easing, childComplete );\n\t\t}\n\t}\n\n\tfunction animComplete() {\n\t\telement.css( {\n\t\t\tvisibility: \"visible\"\n\t\t} );\n\t\t$( pieces ).remove();\n\t\tdone();\n\t}\n} );\n\n\n/*!\n * jQuery UI Effects Fade 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Fade Effect\n//>>group: Effects\n//>>description: Fades the element.\n//>>docs: http://api.jqueryui.com/fade-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectFade = $.effects.define( \"fade\", \"toggle\", function( options, done ) {\n\tvar show = options.mode === \"show\";\n\n\t$( this )\n\t\t.css( \"opacity\", show ? 0 : 1 )\n\t\t.animate( {\n\t\t\topacity: show ? 1 : 0\n\t\t}, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Fold 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Fold Effect\n//>>group: Effects\n//>>description: Folds an element first horizontally and then vertically.\n//>>docs: http://api.jqueryui.com/fold-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectFold = $.effects.define( \"fold\", \"hide\", function( options, done ) {\n\n\t// Create element\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tsize = options.size || 15,\n\t\tpercent = /([0-9]+)%/.exec( size ),\n\t\thorizFirst = !!options.horizFirst,\n\t\tref = horizFirst ? [ \"right\", \"bottom\" ] : [ \"bottom\", \"right\" ],\n\t\tduration = options.duration / 2,\n\n\t\tplaceholder = $.effects.createPlaceholder( element ),\n\n\t\tstart = element.cssClip(),\n\t\tanimation1 = { clip: $.extend( {}, start ) },\n\t\tanimation2 = { clip: $.extend( {}, start ) },\n\n\t\tdistance = [ start[ ref[ 0 ] ], start[ ref[ 1 ] ] ],\n\n\t\tqueuelen = element.queue().length;\n\n\tif ( percent ) {\n\t\tsize = parseInt( percent[ 1 ], 10 ) / 100 * distance[ hide ? 0 : 1 ];\n\t}\n\tanimation1.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 0 ] ] = size;\n\tanimation2.clip[ ref[ 1 ] ] = 0;\n\n\tif ( show ) {\n\t\telement.cssClip( animation2.clip );\n\t\tif ( placeholder ) {\n\t\t\tplaceholder.css( $.effects.clipToBox( animation2 ) );\n\t\t}\n\n\t\tanimation2.clip = start;\n\t}\n\n\t// Animate\n\telement\n\t\t.queue( function( next ) {\n\t\t\tif ( placeholder ) {\n\t\t\t\tplaceholder\n\t\t\t\t\t.animate( $.effects.clipToBox( animation1 ), duration, options.easing )\n\t\t\t\t\t.animate( $.effects.clipToBox( animation2 ), duration, options.easing );\n\t\t\t}\n\n\t\t\tnext();\n\t\t} )\n\t\t.animate( animation1, duration, options.easing )\n\t\t.animate( animation2, duration, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, 4 );\n} );\n\n\n/*!\n * jQuery UI Effects Highlight 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Highlight Effect\n//>>group: Effects\n//>>description: Highlights the background of an element in a defined color for a custom duration.\n//>>docs: http://api.jqueryui.com/highlight-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectHighlight = $.effects.define( \"highlight\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tanimation = {\n\t\t\tbackgroundColor: element.css( \"backgroundColor\" )\n\t\t};\n\n\tif ( options.mode === \"hide\" ) {\n\t\tanimation.opacity = 0;\n\t}\n\n\t$.effects.saveStyle( element );\n\n\telement\n\t\t.css( {\n\t\t\tbackgroundImage: \"none\",\n\t\t\tbackgroundColor: options.color || \"#ffff99\"\n\t\t} )\n\t\t.animate( animation, {\n\t\t\tqueue: false,\n\t\t\tduration: options.duration,\n\t\t\teasing: options.easing,\n\t\t\tcomplete: done\n\t\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Size 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Size Effect\n//>>group: Effects\n//>>description: Resize an element to a specified width and height.\n//>>docs: http://api.jqueryui.com/size-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectSize = $.effects.define( \"size\", function( options, done ) {\n\n\t// Create element\n\tvar baseline, factor, temp,\n\t\telement = $( this ),\n\n\t\t// Copy for children\n\t\tcProps = [ \"fontSize\" ],\n\t\tvProps = [ \"borderTopWidth\", \"borderBottomWidth\", \"paddingTop\", \"paddingBottom\" ],\n\t\thProps = [ \"borderLeftWidth\", \"borderRightWidth\", \"paddingLeft\", \"paddingRight\" ],\n\n\t\t// Set options\n\t\tmode = options.mode,\n\t\trestore = mode !== \"effect\",\n\t\tscale = options.scale || \"both\",\n\t\torigin = options.origin || [ \"middle\", \"center\" ],\n\t\tposition = element.css( \"position\" ),\n\t\tpos = element.position(),\n\t\toriginal = $.effects.scaledDimensions( element ),\n\t\tfrom = options.from || original,\n\t\tto = options.to || $.effects.scaledDimensions( element, 0 );\n\n\t$.effects.createPlaceholder( element );\n\n\tif ( mode === \"show\" ) {\n\t\ttemp = from;\n\t\tfrom = to;\n\t\tto = temp;\n\t}\n\n\t// Set scaling factor\n\tfactor = {\n\t\tfrom: {\n\t\t\ty: from.height / original.height,\n\t\t\tx: from.width / original.width\n\t\t},\n\t\tto: {\n\t\t\ty: to.height / original.height,\n\t\t\tx: to.width / original.width\n\t\t}\n\t};\n\n\t// Scale the css box\n\tif ( scale === \"box\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, vProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, vProps, factor.to.y, to );\n\t\t}\n\n\t\t// Horizontal props scaling\n\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\tfrom = $.effects.setTransition( element, hProps, factor.from.x, from );\n\t\t\tto = $.effects.setTransition( element, hProps, factor.to.x, to );\n\t\t}\n\t}\n\n\t// Scale the content\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\t// Vertical props scaling\n\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\tfrom = $.effects.setTransition( element, cProps, factor.from.y, from );\n\t\t\tto = $.effects.setTransition( element, cProps, factor.to.y, to );\n\t\t}\n\t}\n\n\t// Adjust the position properties based on the provided origin points\n\tif ( origin ) {\n\t\tbaseline = $.effects.getBaseline( origin, original );\n\t\tfrom.top = ( original.outerHeight - from.outerHeight ) * baseline.y + pos.top;\n\t\tfrom.left = ( original.outerWidth - from.outerWidth ) * baseline.x + pos.left;\n\t\tto.top = ( original.outerHeight - to.outerHeight ) * baseline.y + pos.top;\n\t\tto.left = ( original.outerWidth - to.outerWidth ) * baseline.x + pos.left;\n\t}\n\telement.css( from );\n\n\t// Animate the children if desired\n\tif ( scale === \"content\" || scale === \"both\" ) {\n\n\t\tvProps = vProps.concat( [ \"marginTop\", \"marginBottom\" ] ).concat( cProps );\n\t\thProps = hProps.concat( [ \"marginLeft\", \"marginRight\" ] );\n\n\t\t// Only animate children with width attributes specified\n\t\t// TODO: is this right? should we include anything with css width specified as well\n\t\telement.find( \"*[width]\" ).each( function() {\n\t\t\tvar child = $( this ),\n\t\t\t\tchildOriginal = $.effects.scaledDimensions( child ),\n\t\t\t\tchildFrom = {\n\t\t\t\t\theight: childOriginal.height * factor.from.y,\n\t\t\t\t\twidth: childOriginal.width * factor.from.x,\n\t\t\t\t\touterHeight: childOriginal.outerHeight * factor.from.y,\n\t\t\t\t\touterWidth: childOriginal.outerWidth * factor.from.x\n\t\t\t\t},\n\t\t\t\tchildTo = {\n\t\t\t\t\theight: childOriginal.height * factor.to.y,\n\t\t\t\t\twidth: childOriginal.width * factor.to.x,\n\t\t\t\t\touterHeight: childOriginal.height * factor.to.y,\n\t\t\t\t\touterWidth: childOriginal.width * factor.to.x\n\t\t\t\t};\n\n\t\t\t// Vertical props scaling\n\t\t\tif ( factor.from.y !== factor.to.y ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, vProps, factor.from.y, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, vProps, factor.to.y, childTo );\n\t\t\t}\n\n\t\t\t// Horizontal props scaling\n\t\t\tif ( factor.from.x !== factor.to.x ) {\n\t\t\t\tchildFrom = $.effects.setTransition( child, hProps, factor.from.x, childFrom );\n\t\t\t\tchildTo = $.effects.setTransition( child, hProps, factor.to.x, childTo );\n\t\t\t}\n\n\t\t\tif ( restore ) {\n\t\t\t\t$.effects.saveStyle( child );\n\t\t\t}\n\n\t\t\t// Animate children\n\t\t\tchild.css( childFrom );\n\t\t\tchild.animate( childTo, options.duration, options.easing, function() {\n\n\t\t\t\t// Restore children\n\t\t\t\tif ( restore ) {\n\t\t\t\t\t$.effects.restoreStyle( child );\n\t\t\t\t}\n\t\t\t} );\n\t\t} );\n\t}\n\n\t// Animate\n\telement.animate( to, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: function() {\n\n\t\t\tvar offset = element.offset();\n\n\t\t\tif ( to.opacity === 0 ) {\n\t\t\t\telement.css( \"opacity\", from.opacity );\n\t\t\t}\n\n\t\t\tif ( !restore ) {\n\t\t\t\telement\n\t\t\t\t\t.css( \"position\", position === \"static\" ? \"relative\" : position )\n\t\t\t\t\t.offset( offset );\n\n\t\t\t\t// Need to save style here so that automatic style restoration\n\t\t\t\t// doesn't restore to the original styles from before the animation.\n\t\t\t\t$.effects.saveStyle( element );\n\t\t\t}\n\n\t\t\tdone();\n\t\t}\n\t} );\n\n} );\n\n\n/*!\n * jQuery UI Effects Scale 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Scale Effect\n//>>group: Effects\n//>>description: Grows or shrinks an element and its content.\n//>>docs: http://api.jqueryui.com/scale-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectScale = $.effects.define( \"scale\", function( options, done ) {\n\n\t// Create element\n\tvar el = $( this ),\n\t\tmode = options.mode,\n\t\tpercent = parseInt( options.percent, 10 ) ||\n\t\t\t( parseInt( options.percent, 10 ) === 0 ? 0 : ( mode !== \"effect\" ? 0 : 100 ) ),\n\n\t\tnewOptions = $.extend( true, {\n\t\t\tfrom: $.effects.scaledDimensions( el ),\n\t\t\tto: $.effects.scaledDimensions( el, percent, options.direction || \"both\" ),\n\t\t\torigin: options.origin || [ \"middle\", \"center\" ]\n\t\t}, options );\n\n\t// Fade option to support puff\n\tif ( options.fade ) {\n\t\tnewOptions.from.opacity = 1;\n\t\tnewOptions.to.opacity = 0;\n\t}\n\n\t$.effects.effect.size.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Puff 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Puff Effect\n//>>group: Effects\n//>>description: Creates a puff effect by scaling the element up and hiding it at the same time.\n//>>docs: http://api.jqueryui.com/puff-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectPuff = $.effects.define( \"puff\", \"hide\", function( options, done ) {\n\tvar newOptions = $.extend( true, {}, options, {\n\t\tfade: true,\n\t\tpercent: parseInt( options.percent, 10 ) || 150\n\t} );\n\n\t$.effects.effect.scale.call( this, newOptions, done );\n} );\n\n\n/*!\n * jQuery UI Effects Pulsate 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Pulsate Effect\n//>>group: Effects\n//>>description: Pulsates an element n times by changing the opacity to zero and back.\n//>>docs: http://api.jqueryui.com/pulsate-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectPulsate = $.effects.define( \"pulsate\", \"show\", function( options, done ) {\n\tvar element = $( this ),\n\t\tmode = options.mode,\n\t\tshow = mode === \"show\",\n\t\thide = mode === \"hide\",\n\t\tshowhide = show || hide,\n\n\t\t// Showing or hiding leaves off the \"last\" animation\n\t\tanims = ( ( options.times || 5 ) * 2 ) + ( showhide ? 1 : 0 ),\n\t\tduration = options.duration / anims,\n\t\tanimateTo = 0,\n\t\ti = 1,\n\t\tqueuelen = element.queue().length;\n\n\tif ( show || !element.is( \":visible\" ) ) {\n\t\telement.css( \"opacity\", 0 ).show();\n\t\tanimateTo = 1;\n\t}\n\n\t// Anims - 1 opacity \"toggles\"\n\tfor ( ; i < anims; i++ ) {\n\t\telement.animate( { opacity: animateTo }, duration, options.easing );\n\t\tanimateTo = 1 - animateTo;\n\t}\n\n\telement.animate( { opacity: animateTo }, duration, options.easing );\n\n\telement.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Shake 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Shake Effect\n//>>group: Effects\n//>>description: Shakes an element horizontally or vertically n times.\n//>>docs: http://api.jqueryui.com/shake-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectShake = $.effects.define( \"shake\", function( options, done ) {\n\n\tvar i = 1,\n\t\telement = $( this ),\n\t\tdirection = options.direction || \"left\",\n\t\tdistance = options.distance || 20,\n\t\ttimes = options.times || 3,\n\t\tanims = times * 2 + 1,\n\t\tspeed = Math.round( options.duration / anims ),\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tanimation = {},\n\t\tanimation1 = {},\n\t\tanimation2 = {},\n\n\t\tqueuelen = element.queue().length;\n\n\t$.effects.createPlaceholder( element );\n\n\t// Animation\n\tanimation[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance;\n\tanimation1[ ref ] = ( positiveMotion ? \"+=\" : \"-=\" ) + distance * 2;\n\tanimation2[ ref ] = ( positiveMotion ? \"-=\" : \"+=\" ) + distance * 2;\n\n\t// Animate\n\telement.animate( animation, speed, options.easing );\n\n\t// Shakes\n\tfor ( ; i < times; i++ ) {\n\t\telement\n\t\t\t.animate( animation1, speed, options.easing )\n\t\t\t.animate( animation2, speed, options.easing );\n\t}\n\n\telement\n\t\t.animate( animation1, speed, options.easing )\n\t\t.animate( animation, speed / 2, options.easing )\n\t\t.queue( done );\n\n\t$.effects.unshift( element, queuelen, anims + 1 );\n} );\n\n\n/*!\n * jQuery UI Effects Slide 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slide Effect\n//>>group: Effects\n//>>description: Slides an element in and out of the viewport.\n//>>docs: http://api.jqueryui.com/slide-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effectsEffectSlide = $.effects.define( \"slide\", \"show\", function( options, done ) {\n\tvar startClip, startRef,\n\t\telement = $( this ),\n\t\tmap = {\n\t\t\tup: [ \"bottom\", \"top\" ],\n\t\t\tdown: [ \"top\", \"bottom\" ],\n\t\t\tleft: [ \"right\", \"left\" ],\n\t\t\tright: [ \"left\", \"right\" ]\n\t\t},\n\t\tmode = options.mode,\n\t\tdirection = options.direction || \"left\",\n\t\tref = ( direction === \"up\" || direction === \"down\" ) ? \"top\" : \"left\",\n\t\tpositiveMotion = ( direction === \"up\" || direction === \"left\" ),\n\t\tdistance = options.distance ||\n\t\t\telement[ ref === \"top\" ? \"outerHeight\" : \"outerWidth\" ]( true ),\n\t\tanimation = {};\n\n\t$.effects.createPlaceholder( element );\n\n\tstartClip = element.cssClip();\n\tstartRef = element.position()[ ref ];\n\n\t// Define hide animation\n\tanimation[ ref ] = ( positiveMotion ? -1 : 1 ) * distance + startRef;\n\tanimation.clip = element.cssClip();\n\tanimation.clip[ map[ direction ][ 1 ] ] = animation.clip[ map[ direction ][ 0 ] ];\n\n\t// Reverse the animation if we're showing\n\tif ( mode === \"show\" ) {\n\t\telement.cssClip( animation.clip );\n\t\telement.css( ref, animation[ ref ] );\n\t\tanimation.clip = startClip;\n\t\tanimation[ ref ] = startRef;\n\t}\n\n\t// Actually animate\n\telement.animate( animation, {\n\t\tqueue: false,\n\t\tduration: options.duration,\n\t\teasing: options.easing,\n\t\tcomplete: done\n\t} );\n} );\n\n\n/*!\n * jQuery UI Effects Transfer 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Transfer Effect\n//>>group: Effects\n//>>description: Displays a transfer effect from one element to another.\n//>>docs: http://api.jqueryui.com/transfer-effect/\n//>>demos: http://jqueryui.com/effect/\n\n\n\nvar effect;\nif ( $.uiBackCompat !== false ) {\n\teffect = $.effects.define( \"transfer\", function( options, done ) {\n\t\t$( this ).transfer( options, done );\n\t} );\n}\nvar effectsEffectTransfer = effect;\n\n\n/*!\n * jQuery UI Focusable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :focusable Selector\n//>>group: Core\n//>>description: Selects elements which can be focused.\n//>>docs: http://api.jqueryui.com/focusable-selector/\n\n\n\n// Selectors\n$.ui.focusable = function( element, hasTabindex ) {\n\tvar map, mapName, img, focusableIfVisible, fieldset,\n\t\tnodeName = element.nodeName.toLowerCase();\n\n\tif ( \"area\" === nodeName ) {\n\t\tmap = element.parentNode;\n\t\tmapName = map.name;\n\t\tif ( !element.href || !mapName || map.nodeName.toLowerCase() !== \"map\" ) {\n\t\t\treturn false;\n\t\t}\n\t\timg = $( \"img[usemap='#\" + mapName + \"']\" );\n\t\treturn img.length > 0 && img.is( \":visible\" );\n\t}\n\n\tif ( /^(input|select|textarea|button|object)$/.test( nodeName ) ) {\n\t\tfocusableIfVisible = !element.disabled;\n\n\t\tif ( focusableIfVisible ) {\n\n\t\t\t// Form controls within a disabled fieldset are disabled.\n\t\t\t// However, controls within the fieldset's legend do not get disabled.\n\t\t\t// Since controls generally aren't placed inside legends, we skip\n\t\t\t// this portion of the check.\n\t\t\tfieldset = $( element ).closest( \"fieldset\" )[ 0 ];\n\t\t\tif ( fieldset ) {\n\t\t\t\tfocusableIfVisible = !fieldset.disabled;\n\t\t\t}\n\t\t}\n\t} else if ( \"a\" === nodeName ) {\n\t\tfocusableIfVisible = element.href || hasTabindex;\n\t} else {\n\t\tfocusableIfVisible = hasTabindex;\n\t}\n\n\treturn focusableIfVisible && $( element ).is( \":visible\" ) && visible( $( element ) );\n};\n\n// Support: IE 8 only\n// IE 8 doesn't resolve inherit to visible/hidden for computed values\nfunction visible( element ) {\n\tvar visibility = element.css( \"visibility\" );\n\twhile ( visibility === \"inherit\" ) {\n\t\telement = element.parent();\n\t\tvisibility = element.css( \"visibility\" );\n\t}\n\treturn visibility !== \"hidden\";\n}\n\n$.extend( $.expr[ \":\" ], {\n\tfocusable: function( element ) {\n\t\treturn $.ui.focusable( element, $.attr( element, \"tabindex\" ) != null );\n\t}\n} );\n\nvar focusable = $.ui.focusable;\n\n\n\n\n// Support: IE8 Only\n// IE8 does not support the form attribute and when it is supplied. It overwrites the form prop\n// with a string, so we need to find the proper form.\nvar form = $.fn.form = function() {\n\treturn typeof this[ 0 ].form === \"string\" ? this.closest( \"form\" ) : $( this[ 0 ].form );\n};\n\n\n/*!\n * jQuery UI Form Reset Mixin 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Form Reset Mixin\n//>>group: Core\n//>>description: Refresh input widgets when their form is reset\n//>>docs: http://api.jqueryui.com/form-reset-mixin/\n\n\n\nvar formResetMixin = $.ui.formResetMixin = {\n\t_formResetHandler: function() {\n\t\tvar form = $( this );\n\n\t\t// Wait for the form reset to actually happen before refreshing\n\t\tsetTimeout( function() {\n\t\t\tvar instances = form.data( \"ui-form-reset-instances\" );\n\t\t\t$.each( instances, function() {\n\t\t\t\tthis.refresh();\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_bindFormResetHandler: function() {\n\t\tthis.form = this.element.form();\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" ) || [];\n\t\tif ( !instances.length ) {\n\n\t\t\t// We don't use _on() here because we use a single event handler per form\n\t\t\tthis.form.on( \"reset.ui-form-reset\", this._formResetHandler );\n\t\t}\n\t\tinstances.push( this );\n\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t},\n\n\t_unbindFormResetHandler: function() {\n\t\tif ( !this.form.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar instances = this.form.data( \"ui-form-reset-instances\" );\n\t\tinstances.splice( $.inArray( this, instances ), 1 );\n\t\tif ( instances.length ) {\n\t\t\tthis.form.data( \"ui-form-reset-instances\", instances );\n\t\t} else {\n\t\t\tthis.form\n\t\t\t\t.removeData( \"ui-form-reset-instances\" )\n\t\t\t\t.off( \"reset.ui-form-reset\" );\n\t\t}\n\t}\n};\n\n\n/*!\n * jQuery UI Support for jQuery core 1.7.x 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n */\n\n//>>label: jQuery 1.7 Support\n//>>group: Core\n//>>description: Support version 1.7.x of jQuery core\n\n\n\n// Support: jQuery 1.7 only\n// Not a great way to check versions, but since we only support 1.7+ and only\n// need to detect <1.8, this is a simple check that should suffice. Checking\n// for \"1.7.\" would be a bit safer, but the version string is 1.7, not 1.7.0\n// and we'll never reach 1.70.0 (if we do, we certainly won't be supporting\n// 1.7 anymore). See #11197 for why we're not using feature detection.\nif ( $.fn.jquery.substring( 0, 3 ) === \"1.7\" ) {\n\n\t// Setters for .innerWidth(), .innerHeight(), .outerWidth(), .outerHeight()\n\t// Unlike jQuery Core 1.8+, these only support numeric values to set the\n\t// dimensions in pixels\n\t$.each( [ \"Width\", \"Height\" ], function( i, name ) {\n\t\tvar side = name === \"Width\" ? [ \"Left\", \"Right\" ] : [ \"Top\", \"Bottom\" ],\n\t\t\ttype = name.toLowerCase(),\n\t\t\torig = {\n\t\t\t\tinnerWidth: $.fn.innerWidth,\n\t\t\t\tinnerHeight: $.fn.innerHeight,\n\t\t\t\touterWidth: $.fn.outerWidth,\n\t\t\t\touterHeight: $.fn.outerHeight\n\t\t\t};\n\n\t\tfunction reduce( elem, size, border, margin ) {\n\t\t\t$.each( side, function() {\n\t\t\t\tsize -= parseFloat( $.css( elem, \"padding\" + this ) ) || 0;\n\t\t\t\tif ( border ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"border\" + this + \"Width\" ) ) || 0;\n\t\t\t\t}\n\t\t\t\tif ( margin ) {\n\t\t\t\t\tsize -= parseFloat( $.css( elem, \"margin\" + this ) ) || 0;\n\t\t\t\t}\n\t\t\t} );\n\t\t\treturn size;\n\t\t}\n\n\t\t$.fn[ \"inner\" + name ] = function( size ) {\n\t\t\tif ( size === undefined ) {\n\t\t\t\treturn orig[ \"inner\" + name ].call( this );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\t$( this ).css( type, reduce( this, size ) + \"px\" );\n\t\t\t} );\n\t\t};\n\n\t\t$.fn[ \"outer\" + name ] = function( size, margin ) {\n\t\t\tif ( typeof size !== \"number\" ) {\n\t\t\t\treturn orig[ \"outer\" + name ].call( this, size );\n\t\t\t}\n\n\t\t\treturn this.each( function() {\n\t\t\t\t$( this ).css( type, reduce( this, size, true, margin ) + \"px\" );\n\t\t\t} );\n\t\t};\n\t} );\n\n\t$.fn.addBack = function( selector ) {\n\t\treturn this.add( selector == null ?\n\t\t\tthis.prevObject : this.prevObject.filter( selector )\n\t\t);\n\t};\n}\n\n;\n/*!\n * jQuery UI Keycode 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Keycode\n//>>group: Core\n//>>description: Provide keycodes as keynames\n//>>docs: http://api.jqueryui.com/jQuery.ui.keyCode/\n\n\nvar keycode = $.ui.keyCode = {\n\tBACKSPACE: 8,\n\tCOMMA: 188,\n\tDELETE: 46,\n\tDOWN: 40,\n\tEND: 35,\n\tENTER: 13,\n\tESCAPE: 27,\n\tHOME: 36,\n\tLEFT: 37,\n\tPAGE_DOWN: 34,\n\tPAGE_UP: 33,\n\tPERIOD: 190,\n\tRIGHT: 39,\n\tSPACE: 32,\n\tTAB: 9,\n\tUP: 38\n};\n\n\n\n\n// Internal use only\nvar escapeSelector = $.ui.escapeSelector = ( function() {\n\tvar selectorEscape = /([!\"#$%&'()*+,./:;<=>?@[\\]^`{|}~])/g;\n\treturn function( selector ) {\n\t\treturn selector.replace( selectorEscape, \"\\\\$1\" );\n\t};\n} )();\n\n\n/*!\n * jQuery UI Labels 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: labels\n//>>group: Core\n//>>description: Find all the labels associated with a given input\n//>>docs: http://api.jqueryui.com/labels/\n\n\n\nvar labels = $.fn.labels = function() {\n\tvar ancestor, selector, id, labels, ancestors;\n\n\t// Check control.labels first\n\tif ( this[ 0 ].labels && this[ 0 ].labels.length ) {\n\t\treturn this.pushStack( this[ 0 ].labels );\n\t}\n\n\t// Support: IE <= 11, FF <= 37, Android <= 2.3 only\n\t// Above browsers do not support control.labels. Everything below is to support them\n\t// as well as document fragments. control.labels does not work on document fragments\n\tlabels = this.eq( 0 ).parents( \"label\" );\n\n\t// Look for the label based on the id\n\tid = this.attr( \"id\" );\n\tif ( id ) {\n\n\t\t// We don't search against the document in case the element\n\t\t// is disconnected from the DOM\n\t\tancestor = this.eq( 0 ).parents().last();\n\n\t\t// Get a full set of top level ancestors\n\t\tancestors = ancestor.add( ancestor.length ? ancestor.siblings() : this.siblings() );\n\n\t\t// Create a selector for the label based on the id\n\t\tselector = \"label[for='\" + $.ui.escapeSelector( id ) + \"']\";\n\n\t\tlabels = labels.add( ancestors.find( selector ).addBack( selector ) );\n\n\t}\n\n\t// Return whatever we have found for labels\n\treturn this.pushStack( labels );\n};\n\n\n/*!\n * jQuery UI Scroll Parent 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: scrollParent\n//>>group: Core\n//>>description: Get the closest ancestor element that is scrollable.\n//>>docs: http://api.jqueryui.com/scrollParent/\n\n\n\nvar scrollParent = $.fn.scrollParent = function( includeHidden ) {\n\tvar position = this.css( \"position\" ),\n\t\texcludeStaticParent = position === \"absolute\",\n\t\toverflowRegex = includeHidden ? /(auto|scroll|hidden)/ : /(auto|scroll)/,\n\t\tscrollParent = this.parents().filter( function() {\n\t\t\tvar parent = $( this );\n\t\t\tif ( excludeStaticParent && parent.css( \"position\" ) === \"static\" ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn overflowRegex.test( parent.css( \"overflow\" ) + parent.css( \"overflow-y\" ) +\n\t\t\t\tparent.css( \"overflow-x\" ) );\n\t\t} ).eq( 0 );\n\n\treturn position === \"fixed\" || !scrollParent.length ?\n\t\t$( this[ 0 ].ownerDocument || document ) :\n\t\tscrollParent;\n};\n\n\n/*!\n * jQuery UI Tabbable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: :tabbable Selector\n//>>group: Core\n//>>description: Selects elements which can be tabbed to.\n//>>docs: http://api.jqueryui.com/tabbable-selector/\n\n\n\nvar tabbable = $.extend( $.expr[ \":\" ], {\n\ttabbable: function( element ) {\n\t\tvar tabIndex = $.attr( element, \"tabindex\" ),\n\t\t\thasTabindex = tabIndex != null;\n\t\treturn ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );\n\t}\n} );\n\n\n/*!\n * jQuery UI Unique ID 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: uniqueId\n//>>group: Core\n//>>description: Functions to generate and remove uniqueId's\n//>>docs: http://api.jqueryui.com/uniqueId/\n\n\n\nvar uniqueId = $.fn.extend( {\n\tuniqueId: ( function() {\n\t\tvar uuid = 0;\n\n\t\treturn function() {\n\t\t\treturn this.each( function() {\n\t\t\t\tif ( !this.id ) {\n\t\t\t\t\tthis.id = \"ui-id-\" + ( ++uuid );\n\t\t\t\t}\n\t\t\t} );\n\t\t};\n\t} )(),\n\n\tremoveUniqueId: function() {\n\t\treturn this.each( function() {\n\t\t\tif ( /^ui-id-\\d+$/.test( this.id ) ) {\n\t\t\t\t$( this ).removeAttr( \"id\" );\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Accordion 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Accordion\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Displays collapsible content panels for presenting information in a limited amount of space.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/accordion/\n//>>demos: http://jqueryui.com/accordion/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/accordion.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsAccordion = $.widget( \"ui.accordion\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tactive: 0,\n\t\tanimate: {},\n\t\tclasses: {\n\t\t\t\"ui-accordion-header\": \"ui-corner-top\",\n\t\t\t\"ui-accordion-header-collapsed\": \"ui-corner-all\",\n\t\t\t\"ui-accordion-content\": \"ui-corner-bottom\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theader: \"> li > :first-child, > :not(li):even\",\n\t\theightStyle: \"auto\",\n\t\ticons: {\n\t\t\tactiveHeader: \"ui-icon-triangle-1-s\",\n\t\t\theader: \"ui-icon-triangle-1-e\"\n\t\t},\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null\n\t},\n\n\thideProps: {\n\t\tborderTopWidth: \"hide\",\n\t\tborderBottomWidth: \"hide\",\n\t\tpaddingTop: \"hide\",\n\t\tpaddingBottom: \"hide\",\n\t\theight: \"hide\"\n\t},\n\n\tshowProps: {\n\t\tborderTopWidth: \"show\",\n\t\tborderBottomWidth: \"show\",\n\t\tpaddingTop: \"show\",\n\t\tpaddingBottom: \"show\",\n\t\theight: \"show\"\n\t},\n\n\t_create: function() {\n\t\tvar options = this.options;\n\n\t\tthis.prevShow = this.prevHide = $();\n\t\tthis._addClass( \"ui-accordion\", \"ui-widget ui-helper-reset\" );\n\t\tthis.element.attr( \"role\", \"tablist\" );\n\n\t\t// Don't allow collapsible: false and active: false / null\n\t\tif ( !options.collapsible && ( options.active === false || options.active == null ) ) {\n\t\t\toptions.active = 0;\n\t\t}\n\n\t\tthis._processPanels();\n\n\t\t// handle negative values\n\t\tif ( options.active < 0 ) {\n\t\t\toptions.active += this.headers.length;\n\t\t}\n\t\tthis._refresh();\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\theader: this.active,\n\t\t\tpanel: !this.active.length ? $() : this.active.next()\n\t\t};\n\t},\n\n\t_createIcons: function() {\n\t\tvar icon, children,\n\t\t\ticons = this.options.icons;\n\n\t\tif ( icons ) {\n\t\t\ticon = $( \"<span>\" );\n\t\t\tthis._addClass( icon, \"ui-accordion-header-icon\", \"ui-icon \" + icons.header );\n\t\t\ticon.prependTo( this.headers );\n\t\t\tchildren = this.active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( children, icons.header )\n\t\t\t\t._addClass( children, null, icons.activeHeader )\n\t\t\t\t._addClass( this.headers, \"ui-accordion-icons\" );\n\t\t}\n\t},\n\n\t_destroyIcons: function() {\n\t\tthis._removeClass( this.headers, \"ui-accordion-icons\" );\n\t\tthis.headers.children( \".ui-accordion-header-icon\" ).remove();\n\t},\n\n\t_destroy: function() {\n\t\tvar contents;\n\n\t\t// Clean up main element\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\t// Clean up headers\n\t\tthis.headers\n\t\t\t.removeAttr( \"role aria-expanded aria-selected aria-controls tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis._destroyIcons();\n\n\t\t// Clean up content panels\n\t\tcontents = this.headers.next()\n\t\t\t.css( \"display\", \"\" )\n\t\t\t.removeAttr( \"role aria-hidden aria-labelledby\" )\n\t\t\t.removeUniqueId();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tcontents.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tif ( this.options.event ) {\n\t\t\t\tthis._off( this.headers, this.options.event );\n\t\t\t}\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\t// Setting collapsible: false while collapsed; open first panel\n\t\tif ( key === \"collapsible\" && !value && this.options.active === false ) {\n\t\t\tthis._activate( 0 );\n\t\t}\n\n\t\tif ( key === \"icons\" ) {\n\t\t\tthis._destroyIcons();\n\t\t\tif ( value ) {\n\t\t\t\tthis._createIcons();\n\t\t\t}\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\n\t\t// Support: IE8 Only\n\t\t// #5332 / #6059 - opacity doesn't cascade to positioned elements in IE\n\t\t// so we need to add the disabled class to the headers and panels\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t\tthis._toggleClass( this.headers.add( this.headers.next() ), null, \"ui-state-disabled\",\n\t\t\t!!value );\n\t},\n\n\t_keydown: function( event ) {\n\t\tif ( event.altKey || event.ctrlKey ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar keyCode = $.ui.keyCode,\n\t\t\tlength = this.headers.length,\n\t\t\tcurrentIndex = this.headers.index( event.target ),\n\t\t\ttoFocus = false;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.RIGHT:\n\t\tcase keyCode.DOWN:\n\t\t\ttoFocus = this.headers[ ( currentIndex + 1 ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.LEFT:\n\t\tcase keyCode.UP:\n\t\t\ttoFocus = this.headers[ ( currentIndex - 1 + length ) % length ];\n\t\t\tbreak;\n\t\tcase keyCode.SPACE:\n\t\tcase keyCode.ENTER:\n\t\t\tthis._eventHandler( event );\n\t\t\tbreak;\n\t\tcase keyCode.HOME:\n\t\t\ttoFocus = this.headers[ 0 ];\n\t\t\tbreak;\n\t\tcase keyCode.END:\n\t\t\ttoFocus = this.headers[ length - 1 ];\n\t\t\tbreak;\n\t\t}\n\n\t\tif ( toFocus ) {\n\t\t\t$( event.target ).attr( \"tabIndex\", -1 );\n\t\t\t$( toFocus ).attr( \"tabIndex\", 0 );\n\t\t\t$( toFocus ).trigger( \"focus\" );\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_panelKeyDown: function( event ) {\n\t\tif ( event.keyCode === $.ui.keyCode.UP && event.ctrlKey ) {\n\t\t\t$( event.currentTarget ).prev().trigger( \"focus\" );\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options;\n\t\tthis._processPanels();\n\n\t\t// Was collapsed or no panel\n\t\tif ( ( options.active === false && options.collapsible === true ) ||\n\t\t\t\t!this.headers.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// active false only when collapsible is true\n\t\t} else if ( options.active === false ) {\n\t\t\tthis._activate( 0 );\n\n\t\t// was active, but active panel is gone\n\t\t} else if ( this.active.length && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining panel are disabled\n\t\t\tif ( this.headers.length === this.headers.find( \".ui-state-disabled\" ).length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous panel\n\t\t\t} else {\n\t\t\t\tthis._activate( Math.max( 0, options.active - 1 ) );\n\t\t\t}\n\n\t\t// was active, active panel still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.headers.index( this.active );\n\t\t}\n\n\t\tthis._destroyIcons();\n\n\t\tthis._refresh();\n\t},\n\n\t_processPanels: function() {\n\t\tvar prevHeaders = this.headers,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.headers = this.element.find( this.options.header );\n\t\tthis._addClass( this.headers, \"ui-accordion-header ui-accordion-header-collapsed\",\n\t\t\t\"ui-state-default\" );\n\n\t\tthis.panels = this.headers.next().filter( \":not(.ui-accordion-content-active)\" ).hide();\n\t\tthis._addClass( this.panels, \"ui-accordion-content\", \"ui-helper-reset ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevPanels ) {\n\t\t\tthis._off( prevHeaders.not( this.headers ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t_refresh: function() {\n\t\tvar maxHeight,\n\t\t\toptions = this.options,\n\t\t\theightStyle = options.heightStyle,\n\t\t\tparent = this.element.parent();\n\n\t\tthis.active = this._findActive( options.active );\n\t\tthis._addClass( this.active, \"ui-accordion-header-active\", \"ui-state-active\" )\n\t\t\t._removeClass( this.active, \"ui-accordion-header-collapsed\" );\n\t\tthis._addClass( this.active.next(), \"ui-accordion-content-active\" );\n\t\tthis.active.next().show();\n\n\t\tthis.headers\n\t\t\t.attr( \"role\", \"tab\" )\n\t\t\t.each( function() {\n\t\t\t\tvar header = $( this ),\n\t\t\t\t\theaderId = header.uniqueId().attr( \"id\" ),\n\t\t\t\t\tpanel = header.next(),\n\t\t\t\t\tpanelId = panel.uniqueId().attr( \"id\" );\n\t\t\t\theader.attr( \"aria-controls\", panelId );\n\t\t\t\tpanel.attr( \"aria-labelledby\", headerId );\n\t\t\t} )\n\t\t\t.next()\n\t\t\t\t.attr( \"role\", \"tabpanel\" );\n\n\t\tthis.headers\n\t\t\t.not( this.active )\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"false\",\n\t\t\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\t\ttabIndex: -1\n\t\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t\t\t} )\n\t\t\t\t\t.hide();\n\n\t\t// Make sure at least one header is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.headers.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active.attr( {\n\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\ttabIndex: 0\n\t\t\t} )\n\t\t\t\t.next()\n\t\t\t\t\t.attr( {\n\t\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t\t} );\n\t\t}\n\n\t\tthis._createIcons();\n\n\t\tthis._setupEvents( options.event );\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.headers.next()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar isVisible = $( this ).is( \":visible\" );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).show();\n\t\t\t\t\t}\n\t\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).css( \"height\", \"\" ).height() );\n\t\t\t\t\tif ( !isVisible ) {\n\t\t\t\t\t\t$( this ).hide();\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t\t\t.height( maxHeight );\n\t\t}\n\t},\n\n\t_activate: function( index ) {\n\t\tvar active = this._findActive( index )[ 0 ];\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the currently active header\n\t\tactive = active || this.active[ 0 ];\n\n\t\tthis._eventHandler( {\n\t\t\ttarget: active,\n\t\t\tcurrentTarget: active,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( selector ) {\n\t\treturn typeof selector === \"number\" ? this.headers.eq( selector ) : $();\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {\n\t\t\tkeydown: \"_keydown\"\n\t\t};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.headers.add( this.headers.next() ) );\n\t\tthis._on( this.headers, events );\n\t\tthis._on( this.headers.next(), { keydown: \"_panelKeyDown\" } );\n\t\tthis._hoverable( this.headers );\n\t\tthis._focusable( this.headers );\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar activeChildren, clickedChildren,\n\t\t\toptions = this.options,\n\t\t\tactive = this.active,\n\t\t\tclicked = $( event.currentTarget ),\n\t\t\tclickedIsActive = clicked[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : clicked.next(),\n\t\t\ttoHide = active.next(),\n\t\t\teventData = {\n\t\t\t\toldHeader: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewHeader: collapsing ? $() : clicked,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif (\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.headers.index( clicked );\n\n\t\t// When the call to ._toggle() comes after the class changes\n\t\t// it causes a very odd bug in IE 8 (see #6720)\n\t\tthis.active = clickedIsActive ? $() : clicked;\n\t\tthis._toggle( eventData );\n\n\t\t// Switch classes\n\t\t// corner classes on the previously active header stay after the animation\n\t\tthis._removeClass( active, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\tif ( options.icons ) {\n\t\t\tactiveChildren = active.children( \".ui-accordion-header-icon\" );\n\t\t\tthis._removeClass( activeChildren, null, options.icons.activeHeader )\n\t\t\t\t._addClass( activeChildren, null, options.icons.header );\n\t\t}\n\n\t\tif ( !clickedIsActive ) {\n\t\t\tthis._removeClass( clicked, \"ui-accordion-header-collapsed\" )\n\t\t\t\t._addClass( clicked, \"ui-accordion-header-active\", \"ui-state-active\" );\n\t\t\tif ( options.icons ) {\n\t\t\t\tclickedChildren = clicked.children( \".ui-accordion-header-icon\" );\n\t\t\t\tthis._removeClass( clickedChildren, null, options.icons.header )\n\t\t\t\t\t._addClass( clickedChildren, null, options.icons.activeHeader );\n\t\t\t}\n\n\t\t\tthis._addClass( clicked.next(), \"ui-accordion-content-active\" );\n\t\t}\n\t},\n\n\t_toggle: function( data ) {\n\t\tvar toShow = data.newPanel,\n\t\t\ttoHide = this.prevShow.length ? this.prevShow : data.oldPanel;\n\n\t\t// Handle activating a panel during the animation for another activation\n\t\tthis.prevShow.add( this.prevHide ).stop( true, true );\n\t\tthis.prevShow = toShow;\n\t\tthis.prevHide = toHide;\n\n\t\tif ( this.options.animate ) {\n\t\t\tthis._animate( toShow, toHide, data );\n\t\t} else {\n\t\t\ttoHide.hide();\n\t\t\ttoShow.show();\n\t\t\tthis._toggleComplete( data );\n\t\t}\n\n\t\ttoHide.attr( {\n\t\t\t\"aria-hidden\": \"true\"\n\t\t} );\n\t\ttoHide.prev().attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// if we're switching panels, remove the old header from the tab order\n\t\t// if we're opening from collapsed state, remove the previous header from the tab order\n\t\t// if we're collapsing, then keep the collapsing header in the tab order\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\ttoHide.prev().attr( {\n\t\t\t\t\"tabIndex\": -1,\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.headers.filter( function() {\n\t\t\t\treturn parseInt( $( this ).attr( \"tabIndex\" ), 10 ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow\n\t\t\t.attr( \"aria-hidden\", \"false\" )\n\t\t\t.prev()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t},\n\n\t_animate: function( toShow, toHide, data ) {\n\t\tvar total, easing, duration,\n\t\t\tthat = this,\n\t\t\tadjust = 0,\n\t\t\tboxSizing = toShow.css( \"box-sizing\" ),\n\t\t\tdown = toShow.length &&\n\t\t\t\t( !toHide.length || ( toShow.index() < toHide.index() ) ),\n\t\t\tanimate = this.options.animate || {},\n\t\t\toptions = down && animate.down || animate,\n\t\t\tcomplete = function() {\n\t\t\t\tthat._toggleComplete( data );\n\t\t\t};\n\n\t\tif ( typeof options === \"number\" ) {\n\t\t\tduration = options;\n\t\t}\n\t\tif ( typeof options === \"string\" ) {\n\t\t\teasing = options;\n\t\t}\n\n\t\t// fall back from options to animation in case of partial down settings\n\t\teasing = easing || options.easing || animate.easing;\n\t\tduration = duration || options.duration || animate.duration;\n\n\t\tif ( !toHide.length ) {\n\t\t\treturn toShow.animate( this.showProps, duration, easing, complete );\n\t\t}\n\t\tif ( !toShow.length ) {\n\t\t\treturn toHide.animate( this.hideProps, duration, easing, complete );\n\t\t}\n\n\t\ttotal = toShow.show().outerHeight();\n\t\ttoHide.animate( this.hideProps, {\n\t\t\tduration: duration,\n\t\t\teasing: easing,\n\t\t\tstep: function( now, fx ) {\n\t\t\t\tfx.now = Math.round( now );\n\t\t\t}\n\t\t} );\n\t\ttoShow\n\t\t\t.hide()\n\t\t\t.animate( this.showProps, {\n\t\t\t\tduration: duration,\n\t\t\t\teasing: easing,\n\t\t\t\tcomplete: complete,\n\t\t\t\tstep: function( now, fx ) {\n\t\t\t\t\tfx.now = Math.round( now );\n\t\t\t\t\tif ( fx.prop !== \"height\" ) {\n\t\t\t\t\t\tif ( boxSizing === \"content-box\" ) {\n\t\t\t\t\t\t\tadjust += fx.now;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if ( that.options.heightStyle !== \"content\" ) {\n\t\t\t\t\t\tfx.now = Math.round( total - toHide.outerHeight() - adjust );\n\t\t\t\t\t\tadjust = 0;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t},\n\n\t_toggleComplete: function( data ) {\n\t\tvar toHide = data.oldPanel,\n\t\t\tprev = toHide.prev();\n\n\t\tthis._removeClass( toHide, \"ui-accordion-content-active\" );\n\t\tthis._removeClass( prev, \"ui-accordion-header-active\" )\n\t\t\t._addClass( prev, \"ui-accordion-header-collapsed\" );\n\n\t\t// Work around for rendering bug in IE (#5421)\n\t\tif ( toHide.length ) {\n\t\t\ttoHide.parent()[ 0 ].className = toHide.parent()[ 0 ].className;\n\t\t}\n\t\tthis._trigger( \"activate\", null, data );\n\t}\n} );\n\n\n\nvar safeActiveElement = $.ui.safeActiveElement = function( document ) {\n\tvar activeElement;\n\n\t// Support: IE 9 only\n\t// IE9 throws an \"Unspecified error\" accessing document.activeElement from an <iframe>\n\ttry {\n\t\tactiveElement = document.activeElement;\n\t} catch ( error ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 9 - 11 only\n\t// IE may return null instead of an element\n\t// Interestingly, this only seems to occur when NOT in an iframe\n\tif ( !activeElement ) {\n\t\tactiveElement = document.body;\n\t}\n\n\t// Support: IE 11 only\n\t// IE11 returns a seemingly empty object in some cases when accessing\n\t// document.activeElement from an <iframe>\n\tif ( !activeElement.nodeName ) {\n\t\tactiveElement = document.body;\n\t}\n\n\treturn activeElement;\n};\n\n\n/*!\n * jQuery UI Menu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Menu\n//>>group: Widgets\n//>>description: Creates nestable menus.\n//>>docs: http://api.jqueryui.com/menu/\n//>>demos: http://jqueryui.com/menu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/menu.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsMenu = $.widget( \"ui.menu\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<ul>\",\n\tdelay: 300,\n\toptions: {\n\t\ticons: {\n\t\t\tsubmenu: \"ui-icon-caret-1-e\"\n\t\t},\n\t\titems: \"> *\",\n\t\tmenus: \"ul\",\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"right top\"\n\t\t},\n\t\trole: \"menu\",\n\n\t\t// Callbacks\n\t\tblur: null,\n\t\tfocus: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tthis.activeMenu = this.element;\n\n\t\t// Flag used to prevent firing of the click handler\n\t\t// as the event bubbles up through nested menus\n\t\tthis.mouseHandled = false;\n\t\tthis.element\n\t\t\t.uniqueId()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\ttabIndex: 0\n\t\t\t} );\n\n\t\tthis._addClass( \"ui-menu\", \"ui-widget ui-widget-content\" );\n\t\tthis._on( {\n\n\t\t\t// Prevent focus from sticking to links inside menu after clicking\n\t\t\t// them (focus should always stay on UL during navigation).\n\t\t\t\"mousedown .ui-menu-item\": function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t},\n\t\t\t\"click .ui-menu-item\": function( event ) {\n\t\t\t\tvar target = $( event.target );\n\t\t\t\tvar active = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t\t\tif ( !this.mouseHandled && target.not( \".ui-state-disabled\" ).length ) {\n\t\t\t\t\tthis.select( event );\n\n\t\t\t\t\t// Only set the mouseHandled flag if the event will bubble, see #9469.\n\t\t\t\t\tif ( !event.isPropagationStopped() ) {\n\t\t\t\t\t\tthis.mouseHandled = true;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Open submenu on click\n\t\t\t\t\tif ( target.has( \".ui-menu\" ).length ) {\n\t\t\t\t\t\tthis.expand( event );\n\t\t\t\t\t} else if ( !this.element.is( \":focus\" ) &&\n\t\t\t\t\t\t\tactive.closest( \".ui-menu\" ).length ) {\n\n\t\t\t\t\t\t// Redirect focus to the menu\n\t\t\t\t\t\tthis.element.trigger( \"focus\", [ true ] );\n\n\t\t\t\t\t\t// If the active item is on the top level, let it stay active.\n\t\t\t\t\t\t// Otherwise, blur the active item since it is no longer visible.\n\t\t\t\t\t\tif ( this.active && this.active.parents( \".ui-menu\" ).length === 1 ) {\n\t\t\t\t\t\t\tclearTimeout( this.timer );\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\t\"mouseenter .ui-menu-item\": function( event ) {\n\n\t\t\t\t// Ignore mouse events while typeahead is active, see #10458.\n\t\t\t\t// Prevents focusing the wrong item when typeahead causes a scroll while the mouse\n\t\t\t\t// is over an item in the menu\n\t\t\t\tif ( this.previousFilter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar actualTarget = $( event.target ).closest( \".ui-menu-item\" ),\n\t\t\t\t\ttarget = $( event.currentTarget );\n\n\t\t\t\t// Ignore bubbled events on parent items, see #11641\n\t\t\t\tif ( actualTarget[ 0 ] !== target[ 0 ] ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Remove ui-state-active class from siblings of the newly focused menu item\n\t\t\t\t// to avoid a jump caused by adjacent elements both having a class with a border\n\t\t\t\tthis._removeClass( target.siblings().children( \".ui-state-active\" ),\n\t\t\t\t\tnull, \"ui-state-active\" );\n\t\t\t\tthis.focus( event, target );\n\t\t\t},\n\t\t\tmouseleave: \"collapseAll\",\n\t\t\t\"mouseleave .ui-menu\": \"collapseAll\",\n\t\t\tfocus: function( event, keepActiveItem ) {\n\n\t\t\t\t// If there's already an active item, keep it active\n\t\t\t\t// If not, activate the first item\n\t\t\t\tvar item = this.active || this.element.find( this.options.items ).eq( 0 );\n\n\t\t\t\tif ( !keepActiveItem ) {\n\t\t\t\t\tthis.focus( event, item );\n\t\t\t\t}\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tvar notContained = !$.contains(\n\t\t\t\t\t\tthis.element[ 0 ],\n\t\t\t\t\t\t$.ui.safeActiveElement( this.document[ 0 ] )\n\t\t\t\t\t);\n\t\t\t\t\tif ( notContained ) {\n\t\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tkeydown: \"_keydown\"\n\t\t} );\n\n\t\tthis.refresh();\n\n\t\t// Clicks outside of a menu collapse any open menus\n\t\tthis._on( this.document, {\n\t\t\tclick: function( event ) {\n\t\t\t\tif ( this._closeOnDocumentClick( event ) ) {\n\t\t\t\t\tthis.collapseAll( event );\n\t\t\t\t}\n\n\t\t\t\t// Reset the mouseHandled flag\n\t\t\t\tthis.mouseHandled = false;\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tvar items = this.element.find( \".ui-menu-item\" )\n\t\t\t\t.removeAttr( \"role aria-disabled\" ),\n\t\t\tsubmenus = items.children( \".ui-menu-item-wrapper\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.removeAttr( \"tabIndex role aria-haspopup\" );\n\n\t\t// Destroy (sub)menus\n\t\tthis.element\n\t\t\t.removeAttr( \"aria-activedescendant\" )\n\t\t\t.find( \".ui-menu\" ).addBack()\n\t\t\t\t.removeAttr( \"role aria-labelledby aria-expanded aria-hidden aria-disabled \" +\n\t\t\t\t\t\"tabIndex\" )\n\t\t\t\t.removeUniqueId()\n\t\t\t\t.show();\n\n\t\tsubmenus.children().each( function() {\n\t\t\tvar elem = $( this );\n\t\t\tif ( elem.data( \"ui-menu-submenu-caret\" ) ) {\n\t\t\t\telem.remove();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar match, prev, character, skip,\n\t\t\tpreventDefault = true;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\tthis.previousPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\tthis.nextPage( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tthis._move( \"first\", \"first\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tthis._move( \"last\", \"last\", event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\t\tthis.previous( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tthis.next( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.RIGHT:\n\t\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\t\tthis.expand( event );\n\t\t\t}\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ENTER:\n\t\tcase $.ui.keyCode.SPACE:\n\t\t\tthis._activate( event );\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\tthis.collapse( event );\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tpreventDefault = false;\n\t\t\tprev = this.previousFilter || \"\";\n\t\t\tskip = false;\n\n\t\t\t// Support number pad values\n\t\t\tcharacter = event.keyCode >= 96 && event.keyCode <= 105 ?\n\t\t\t\t( event.keyCode - 96 ).toString() : String.fromCharCode( event.keyCode );\n\n\t\t\tclearTimeout( this.filterTimer );\n\n\t\t\tif ( character === prev ) {\n\t\t\t\tskip = true;\n\t\t\t} else {\n\t\t\t\tcharacter = prev + character;\n\t\t\t}\n\n\t\t\tmatch = this._filterMenuItems( character );\n\t\t\tmatch = skip && match.index( this.active.next() ) !== -1 ?\n\t\t\t\tthis.active.nextAll( \".ui-menu-item\" ) :\n\t\t\t\tmatch;\n\n\t\t\t// If no matches on the current filter, reset to the last character pressed\n\t\t\t// to move down the menu to the first item that starts with that character\n\t\t\tif ( !match.length ) {\n\t\t\t\tcharacter = String.fromCharCode( event.keyCode );\n\t\t\t\tmatch = this._filterMenuItems( character );\n\t\t\t}\n\n\t\t\tif ( match.length ) {\n\t\t\t\tthis.focus( event, match );\n\t\t\t\tthis.previousFilter = character;\n\t\t\t\tthis.filterTimer = this._delay( function() {\n\t\t\t\t\tdelete this.previousFilter;\n\t\t\t\t}, 1000 );\n\t\t\t} else {\n\t\t\t\tdelete this.previousFilter;\n\t\t\t}\n\t\t}\n\n\t\tif ( preventDefault ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t_activate: function( event ) {\n\t\tif ( this.active && !this.active.is( \".ui-state-disabled\" ) ) {\n\t\t\tif ( this.active.children( \"[aria-haspopup='true']\" ).length ) {\n\t\t\t\tthis.expand( event );\n\t\t\t} else {\n\t\t\t\tthis.select( event );\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\t\tvar menus, items, newSubmenus, newItems, newWrappers,\n\t\t\tthat = this,\n\t\t\ticon = this.options.icons.submenu,\n\t\t\tsubmenus = this.element.find( this.options.menus );\n\n\t\tthis._toggleClass( \"ui-menu-icons\", null, !!this.element.find( \".ui-icon\" ).length );\n\n\t\t// Initialize nested menus\n\t\tnewSubmenus = submenus.filter( \":not(.ui-menu)\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\trole: this.options.role,\n\t\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\t\"aria-expanded\": \"false\"\n\t\t\t} )\n\t\t\t.each( function() {\n\t\t\t\tvar menu = $( this ),\n\t\t\t\t\titem = menu.prev(),\n\t\t\t\t\tsubmenuCaret = $( \"<span>\" ).data( \"ui-menu-submenu-caret\", true );\n\n\t\t\t\tthat._addClass( submenuCaret, \"ui-menu-icon\", \"ui-icon \" + icon );\n\t\t\t\titem\n\t\t\t\t\t.attr( \"aria-haspopup\", \"true\" )\n\t\t\t\t\t.prepend( submenuCaret );\n\t\t\t\tmenu.attr( \"aria-labelledby\", item.attr( \"id\" ) );\n\t\t\t} );\n\n\t\tthis._addClass( newSubmenus, \"ui-menu\", \"ui-widget ui-widget-content ui-front\" );\n\n\t\tmenus = submenus.add( this.element );\n\t\titems = menus.find( this.options.items );\n\n\t\t// Initialize menu-items containing spaces and/or dashes only as dividers\n\t\titems.not( \".ui-menu-item\" ).each( function() {\n\t\t\tvar item = $( this );\n\t\t\tif ( that._isDivider( item ) ) {\n\t\t\t\tthat._addClass( item, \"ui-menu-divider\", \"ui-widget-content\" );\n\t\t\t}\n\t\t} );\n\n\t\t// Don't refresh list items that are already adapted\n\t\tnewItems = items.not( \".ui-menu-item, .ui-menu-divider\" );\n\t\tnewWrappers = newItems.children()\n\t\t\t.not( \".ui-menu\" )\n\t\t\t\t.uniqueId()\n\t\t\t\t.attr( {\n\t\t\t\t\ttabIndex: -1,\n\t\t\t\t\trole: this._itemRole()\n\t\t\t\t} );\n\t\tthis._addClass( newItems, \"ui-menu-item\" )\n\t\t\t._addClass( newWrappers, \"ui-menu-item-wrapper\" );\n\n\t\t// Add aria-disabled attribute to any disabled menu item\n\t\titems.filter( \".ui-state-disabled\" ).attr( \"aria-disabled\", \"true\" );\n\n\t\t// If the active item has been removed, blur the menu\n\t\tif ( this.active && !$.contains( this.element[ 0 ], this.active[ 0 ] ) ) {\n\t\t\tthis.blur();\n\t\t}\n\t},\n\n\t_itemRole: function() {\n\t\treturn {\n\t\t\tmenu: \"menuitem\",\n\t\t\tlistbox: \"option\"\n\t\t}[ this.options.role ];\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icons = this.element.find( \".ui-menu-icon\" );\n\t\t\tthis._removeClass( icons, null, this.options.icons.submenu )\n\t\t\t\t._addClass( icons, null, value.submenu );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", String( value ) );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\tfocus: function( event, item ) {\n\t\tvar nested, focused, activeParent;\n\t\tthis.blur( event, event && event.type === \"focus\" );\n\n\t\tthis._scrollIntoView( item );\n\n\t\tthis.active = item.first();\n\n\t\tfocused = this.active.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( focused, null, \"ui-state-active\" );\n\n\t\t// Only update aria-activedescendant if there's a role\n\t\t// otherwise we assume focus is managed elsewhere\n\t\tif ( this.options.role ) {\n\t\t\tthis.element.attr( \"aria-activedescendant\", focused.attr( \"id\" ) );\n\t\t}\n\n\t\t// Highlight active parent menu item, if any\n\t\tactiveParent = this.active\n\t\t\t.parent()\n\t\t\t\t.closest( \".ui-menu-item\" )\n\t\t\t\t\t.children( \".ui-menu-item-wrapper\" );\n\t\tthis._addClass( activeParent, null, \"ui-state-active\" );\n\n\t\tif ( event && event.type === \"keydown\" ) {\n\t\t\tthis._close();\n\t\t} else {\n\t\t\tthis.timer = this._delay( function() {\n\t\t\t\tthis._close();\n\t\t\t}, this.delay );\n\t\t}\n\n\t\tnested = item.children( \".ui-menu\" );\n\t\tif ( nested.length && event && ( /^mouse/.test( event.type ) ) ) {\n\t\t\tthis._startOpening( nested );\n\t\t}\n\t\tthis.activeMenu = item.parent();\n\n\t\tthis._trigger( \"focus\", event, { item: item } );\n\t},\n\n\t_scrollIntoView: function( item ) {\n\t\tvar borderTop, paddingTop, offset, scroll, elementHeight, itemHeight;\n\t\tif ( this._hasScroll() ) {\n\t\t\tborderTop = parseFloat( $.css( this.activeMenu[ 0 ], \"borderTopWidth\" ) ) || 0;\n\t\t\tpaddingTop = parseFloat( $.css( this.activeMenu[ 0 ], \"paddingTop\" ) ) || 0;\n\t\t\toffset = item.offset().top - this.activeMenu.offset().top - borderTop - paddingTop;\n\t\t\tscroll = this.activeMenu.scrollTop();\n\t\t\telementHeight = this.activeMenu.height();\n\t\t\titemHeight = item.outerHeight();\n\n\t\t\tif ( offset < 0 ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset );\n\t\t\t} else if ( offset + itemHeight > elementHeight ) {\n\t\t\t\tthis.activeMenu.scrollTop( scroll + offset - elementHeight + itemHeight );\n\t\t\t}\n\t\t}\n\t},\n\n\tblur: function( event, fromFocus ) {\n\t\tif ( !fromFocus ) {\n\t\t\tclearTimeout( this.timer );\n\t\t}\n\n\t\tif ( !this.active ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._removeClass( this.active.children( \".ui-menu-item-wrapper\" ),\n\t\t\tnull, \"ui-state-active\" );\n\n\t\tthis._trigger( \"blur\", event, { item: this.active } );\n\t\tthis.active = null;\n\t},\n\n\t_startOpening: function( submenu ) {\n\t\tclearTimeout( this.timer );\n\n\t\t// Don't open if already open fixes a Firefox bug that caused a .5 pixel\n\t\t// shift in the submenu position when mousing over the caret icon\n\t\tif ( submenu.attr( \"aria-hidden\" ) !== \"true\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._close();\n\t\t\tthis._open( submenu );\n\t\t}, this.delay );\n\t},\n\n\t_open: function( submenu ) {\n\t\tvar position = $.extend( {\n\t\t\tof: this.active\n\t\t}, this.options.position );\n\n\t\tclearTimeout( this.timer );\n\t\tthis.element.find( \".ui-menu\" ).not( submenu.parents( \".ui-menu\" ) )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" );\n\n\t\tsubmenu\n\t\t\t.show()\n\t\t\t.removeAttr( \"aria-hidden\" )\n\t\t\t.attr( \"aria-expanded\", \"true\" )\n\t\t\t.position( position );\n\t},\n\n\tcollapseAll: function( event, all ) {\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\n\t\t\t// If we were passed an event, look for the submenu that contains the event\n\t\t\tvar currentMenu = all ? this.element :\n\t\t\t\t$( event && event.target ).closest( this.element.find( \".ui-menu\" ) );\n\n\t\t\t// If we found no valid submenu ancestor, use the main menu to close all\n\t\t\t// sub menus anyway\n\t\t\tif ( !currentMenu.length ) {\n\t\t\t\tcurrentMenu = this.element;\n\t\t\t}\n\n\t\t\tthis._close( currentMenu );\n\n\t\t\tthis.blur( event );\n\n\t\t\t// Work around active item staying active after menu is blurred\n\t\t\tthis._removeClass( currentMenu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\n\t\t\tthis.activeMenu = currentMenu;\n\t\t}, this.delay );\n\t},\n\n\t// With no arguments, closes the currently active menu - if nothing is active\n\t// it closes all menus.  If passed an argument, it will search for menus BELOW\n\t_close: function( startMenu ) {\n\t\tif ( !startMenu ) {\n\t\t\tstartMenu = this.active ? this.active.parent() : this.element;\n\t\t}\n\n\t\tstartMenu.find( \".ui-menu\" )\n\t\t\t.hide()\n\t\t\t.attr( \"aria-hidden\", \"true\" )\n\t\t\t.attr( \"aria-expanded\", \"false\" );\n\t},\n\n\t_closeOnDocumentClick: function( event ) {\n\t\treturn !$( event.target ).closest( \".ui-menu\" ).length;\n\t},\n\n\t_isDivider: function( item ) {\n\n\t\t// Match hyphen, em dash, en dash\n\t\treturn !/[^\\-\\u2014\\u2013\\s]/.test( item.text() );\n\t},\n\n\tcollapse: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active.parent().closest( \".ui-menu-item\", this.element );\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._close();\n\t\t\tthis.focus( event, newItem );\n\t\t}\n\t},\n\n\texpand: function( event ) {\n\t\tvar newItem = this.active &&\n\t\t\tthis.active\n\t\t\t\t.children( \".ui-menu \" )\n\t\t\t\t\t.find( this.options.items )\n\t\t\t\t\t\t.first();\n\n\t\tif ( newItem && newItem.length ) {\n\t\t\tthis._open( newItem.parent() );\n\n\t\t\t// Delay so Firefox will not hide activedescendant change in expanding submenu from AT\n\t\t\tthis._delay( function() {\n\t\t\t\tthis.focus( event, newItem );\n\t\t\t} );\n\t\t}\n\t},\n\n\tnext: function( event ) {\n\t\tthis._move( \"next\", \"first\", event );\n\t},\n\n\tprevious: function( event ) {\n\t\tthis._move( \"prev\", \"last\", event );\n\t},\n\n\tisFirstItem: function() {\n\t\treturn this.active && !this.active.prevAll( \".ui-menu-item\" ).length;\n\t},\n\n\tisLastItem: function() {\n\t\treturn this.active && !this.active.nextAll( \".ui-menu-item\" ).length;\n\t},\n\n\t_move: function( direction, filter, event ) {\n\t\tvar next;\n\t\tif ( this.active ) {\n\t\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( -1 );\n\t\t\t} else {\n\t\t\t\tnext = this.active\n\t\t\t\t\t[ direction + \"All\" ]( \".ui-menu-item\" )\n\t\t\t\t\t.eq( 0 );\n\t\t\t}\n\t\t}\n\t\tif ( !next || !next.length || !this.active ) {\n\t\t\tnext = this.activeMenu.find( this.options.items )[ filter ]();\n\t\t}\n\n\t\tthis.focus( event, next );\n\t},\n\n\tnextPage: function( event ) {\n\t\tvar item, base, height;\n\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isLastItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.nextAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base - height < 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items )\n\t\t\t\t[ !this.active ? \"first\" : \"last\" ]() );\n\t\t}\n\t},\n\n\tpreviousPage: function( event ) {\n\t\tvar item, base, height;\n\t\tif ( !this.active ) {\n\t\t\tthis.next( event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.isFirstItem() ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( this._hasScroll() ) {\n\t\t\tbase = this.active.offset().top;\n\t\t\theight = this.element.height();\n\t\t\tthis.active.prevAll( \".ui-menu-item\" ).each( function() {\n\t\t\t\titem = $( this );\n\t\t\t\treturn item.offset().top - base + height > 0;\n\t\t\t} );\n\n\t\t\tthis.focus( event, item );\n\t\t} else {\n\t\t\tthis.focus( event, this.activeMenu.find( this.options.items ).first() );\n\t\t}\n\t},\n\n\t_hasScroll: function() {\n\t\treturn this.element.outerHeight() < this.element.prop( \"scrollHeight\" );\n\t},\n\n\tselect: function( event ) {\n\n\t\t// TODO: It should never be possible to not have an active item at this\n\t\t// point, but the tests don't trigger mouseenter before click.\n\t\tthis.active = this.active || $( event.target ).closest( \".ui-menu-item\" );\n\t\tvar ui = { item: this.active };\n\t\tif ( !this.active.has( \".ui-menu\" ).length ) {\n\t\t\tthis.collapseAll( event, true );\n\t\t}\n\t\tthis._trigger( \"select\", event, ui );\n\t},\n\n\t_filterMenuItems: function( character ) {\n\t\tvar escapedCharacter = character.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" ),\n\t\t\tregex = new RegExp( \"^\" + escapedCharacter, \"i\" );\n\n\t\treturn this.activeMenu\n\t\t\t.find( this.options.items )\n\n\t\t\t\t// Only match on items, not dividers or other content (#10571)\n\t\t\t\t.filter( \".ui-menu-item\" )\n\t\t\t\t\t.filter( function() {\n\t\t\t\t\t\treturn regex.test(\n\t\t\t\t\t\t\t$.trim( $( this ).children( \".ui-menu-item-wrapper\" ).text() ) );\n\t\t\t\t\t} );\n\t}\n} );\n\n\n/*!\n * jQuery UI Autocomplete 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Autocomplete\n//>>group: Widgets\n//>>description: Lists suggested words as the user is typing.\n//>>docs: http://api.jqueryui.com/autocomplete/\n//>>demos: http://jqueryui.com/autocomplete/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/autocomplete.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.autocomplete\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<input>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tautoFocus: false,\n\t\tdelay: 300,\n\t\tminLength: 1,\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\tsource: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresponse: null,\n\t\tsearch: null,\n\t\tselect: null\n\t},\n\n\trequestIndex: 0,\n\tpending: 0,\n\n\t_create: function() {\n\n\t\t// Some browsers only repeat keydown events, not keypress events,\n\t\t// so we use the suppressKeyPress flag to determine if we've already\n\t\t// handled the keydown event. #7269\n\t\t// Unfortunately the code for & in keypress is the same as the up arrow,\n\t\t// so we use the suppressKeyPressRepeat flag to avoid handling keypress\n\t\t// events when we know the keydown event was used to modify the\n\t\t// search term. #7799\n\t\tvar suppressKeyPress, suppressKeyPressRepeat, suppressInput,\n\t\t\tnodeName = this.element[ 0 ].nodeName.toLowerCase(),\n\t\t\tisTextarea = nodeName === \"textarea\",\n\t\t\tisInput = nodeName === \"input\";\n\n\t\t// Textareas are always multi-line\n\t\t// Inputs are always single-line, even if inside a contentEditable element\n\t\t// IE also treats inputs as contentEditable\n\t\t// All other element types are determined by whether or not they're contentEditable\n\t\tthis.isMultiLine = isTextarea || !isInput && this._isContentEditable( this.element );\n\n\t\tthis.valueMethod = this.element[ isTextarea || isInput ? \"val\" : \"text\" ];\n\t\tthis.isNewMenu = true;\n\n\t\tthis._addClass( \"ui-autocomplete-input\" );\n\t\tthis.element.attr( \"autocomplete\", \"off\" );\n\n\t\tthis._on( this.element, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.element.prop( \"readOnly\" ) ) {\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tsuppressInput = true;\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tsuppressKeyPress = false;\n\t\t\t\tsuppressInput = false;\n\t\t\t\tsuppressKeyPressRepeat = false;\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ENTER:\n\n\t\t\t\t\t// when menu is open and has focus\n\t\t\t\t\tif ( this.menu.active ) {\n\n\t\t\t\t\t\t// #6055 - Opera still allows the keypress to occur\n\t\t\t\t\t\t// which causes forms to submit\n\t\t\t\t\t\tsuppressKeyPress = true;\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.TAB:\n\t\t\t\t\tif ( this.menu.active ) {\n\t\t\t\t\t\tthis.menu.select( event );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.ESCAPE:\n\t\t\t\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\t\t\t\tthis._value( this.term );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.close( event );\n\n\t\t\t\t\t\t// Different browsers have different default behavior for escape\n\t\t\t\t\t\t// Single press can mean undo or clear\n\t\t\t\t\t\t// Double press in IE means clear the whole form\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tsuppressKeyPressRepeat = true;\n\n\t\t\t\t\t// search timeout should be triggered before the input value is changed\n\t\t\t\t\tthis._searchTimeout( event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tkeypress: function( event ) {\n\t\t\t\tif ( suppressKeyPress ) {\n\t\t\t\t\tsuppressKeyPress = false;\n\t\t\t\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tif ( suppressKeyPressRepeat ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Replicate some key handlers to allow them to repeat in Firefox and Opera\n\t\t\t\tvar keyCode = $.ui.keyCode;\n\t\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase keyCode.PAGE_UP:\n\t\t\t\t\tthis._move( \"previousPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.PAGE_DOWN:\n\t\t\t\t\tthis._move( \"nextPage\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.UP:\n\t\t\t\t\tthis._keyEvent( \"previous\", event );\n\t\t\t\t\tbreak;\n\t\t\t\tcase keyCode.DOWN:\n\t\t\t\t\tthis._keyEvent( \"next\", event );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t},\n\t\t\tinput: function( event ) {\n\t\t\t\tif ( suppressInput ) {\n\t\t\t\t\tsuppressInput = false;\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tthis._searchTimeout( event );\n\t\t\t},\n\t\t\tfocus: function() {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.previous = this._value();\n\t\t\t},\n\t\t\tblur: function( event ) {\n\t\t\t\tif ( this.cancelBlur ) {\n\t\t\t\t\tdelete this.cancelBlur;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tclearTimeout( this.searching );\n\t\t\t\tthis.close( event );\n\t\t\t\tthis._change( event );\n\t\t\t}\n\t\t} );\n\n\t\tthis._initSource();\n\t\tthis.menu = $( \"<ul>\" )\n\t\t\t.appendTo( this._appendTo() )\n\t\t\t.menu( {\n\n\t\t\t\t// disable ARIA support, the live region takes care of that\n\t\t\t\trole: null\n\t\t\t} )\n\t\t\t.hide()\n\t\t\t.menu( \"instance\" );\n\n\t\tthis._addClass( this.menu.element, \"ui-autocomplete\", \"ui-front\" );\n\t\tthis._on( this.menu.element, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// prevent moving focus out of the text field\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t\tthis.cancelBlur = true;\n\t\t\t\tthis._delay( function() {\n\t\t\t\t\tdelete this.cancelBlur;\n\n\t\t\t\t\t// Support: IE 8 only\n\t\t\t\t\t// Right clicking a menu item or selecting text from the menu items will\n\t\t\t\t\t// result in focus moving out of the input. However, we've already received\n\t\t\t\t\t// and ignored the blur event because of the cancelBlur flag set above. So\n\t\t\t\t\t// we restore focus to ensure that the menu closes properly based on the user's\n\t\t\t\t\t// next actions.\n\t\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t},\n\t\t\tmenufocus: function( event, ui ) {\n\t\t\t\tvar label, item;\n\n\t\t\t\t// support: Firefox\n\t\t\t\t// Prevent accidental activation of menu items in Firefox (#7024 #9118)\n\t\t\t\tif ( this.isNewMenu ) {\n\t\t\t\t\tthis.isNewMenu = false;\n\t\t\t\t\tif ( event.originalEvent && /^mouse/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis.menu.blur();\n\n\t\t\t\t\t\tthis.document.one( \"mousemove\", function() {\n\t\t\t\t\t\t\t$( event.target ).trigger( event.originalEvent );\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\titem = ui.item.data( \"ui-autocomplete-item\" );\n\t\t\t\tif ( false !== this._trigger( \"focus\", event, { item: item } ) ) {\n\n\t\t\t\t\t// use value to match what will end up in the input, if it was a key event\n\t\t\t\t\tif ( event.originalEvent && /^key/.test( event.originalEvent.type ) ) {\n\t\t\t\t\t\tthis._value( item.value );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Announce the value in the liveRegion\n\t\t\t\tlabel = ui.item.attr( \"aria-label\" ) || item.value;\n\t\t\t\tif ( label && $.trim( label ).length ) {\n\t\t\t\t\tthis.liveRegion.children().hide();\n\t\t\t\t\t$( \"<div>\" ).text( label ).appendTo( this.liveRegion );\n\t\t\t\t}\n\t\t\t},\n\t\t\tmenuselect: function( event, ui ) {\n\t\t\t\tvar item = ui.item.data( \"ui-autocomplete-item\" ),\n\t\t\t\t\tprevious = this.previous;\n\n\t\t\t\t// Only trigger when focus was lost (click on menu)\n\t\t\t\tif ( this.element[ 0 ] !== $.ui.safeActiveElement( this.document[ 0 ] ) ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// #6109 - IE triggers two focus events and the second\n\t\t\t\t\t// is asynchronous, so we need to reset the previous\n\t\t\t\t\t// term synchronously and asynchronously :-(\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t\tthis.selectedItem = item;\n\t\t\t\t\t} );\n\t\t\t\t}\n\n\t\t\t\tif ( false !== this._trigger( \"select\", event, { item: item } ) ) {\n\t\t\t\t\tthis._value( item.value );\n\t\t\t\t}\n\n\t\t\t\t// reset the term after the select event\n\t\t\t\t// this allows custom select handling to work properly\n\t\t\t\tthis.term = this._value();\n\n\t\t\t\tthis.close( event );\n\t\t\t\tthis.selectedItem = item;\n\t\t\t}\n\t\t} );\n\n\t\tthis.liveRegion = $( \"<div>\", {\n\t\t\trole: \"status\",\n\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\"aria-relevant\": \"additions\"\n\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tclearTimeout( this.searching );\n\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\tthis.menu.element.remove();\n\t\tthis.liveRegion.remove();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"source\" ) {\n\t\t\tthis._initSource();\n\t\t}\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menu.element.appendTo( this._appendTo() );\n\t\t}\n\t\tif ( key === \"disabled\" && value && this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\t},\n\n\t_isEventTargetInWidget: function( event ) {\n\t\tvar menuElement = this.menu.element[ 0 ];\n\n\t\treturn event.target === this.element[ 0 ] ||\n\t\t\tevent.target === menuElement ||\n\t\t\t$.contains( menuElement, event.target );\n\t},\n\n\t_closeOnClickOutside: function( event ) {\n\t\tif ( !this._isEventTargetInWidget( event ) ) {\n\t\t\tthis.close();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_initSource: function() {\n\t\tvar array, url,\n\t\t\tthat = this;\n\t\tif ( $.isArray( this.options.source ) ) {\n\t\t\tarray = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tresponse( $.ui.autocomplete.filter( array, request.term ) );\n\t\t\t};\n\t\t} else if ( typeof this.options.source === \"string\" ) {\n\t\t\turl = this.options.source;\n\t\t\tthis.source = function( request, response ) {\n\t\t\t\tif ( that.xhr ) {\n\t\t\t\t\tthat.xhr.abort();\n\t\t\t\t}\n\t\t\t\tthat.xhr = $.ajax( {\n\t\t\t\t\turl: url,\n\t\t\t\t\tdata: request,\n\t\t\t\t\tdataType: \"json\",\n\t\t\t\t\tsuccess: function( data ) {\n\t\t\t\t\t\tresponse( data );\n\t\t\t\t\t},\n\t\t\t\t\terror: function() {\n\t\t\t\t\t\tresponse( [] );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t};\n\t\t} else {\n\t\t\tthis.source = this.options.source;\n\t\t}\n\t},\n\n\t_searchTimeout: function( event ) {\n\t\tclearTimeout( this.searching );\n\t\tthis.searching = this._delay( function() {\n\n\t\t\t// Search if the value has changed, or if the user retypes the same value (see #7434)\n\t\t\tvar equalValues = this.term === this._value(),\n\t\t\t\tmenuVisible = this.menu.element.is( \":visible\" ),\n\t\t\t\tmodifierKey = event.altKey || event.ctrlKey || event.metaKey || event.shiftKey;\n\n\t\t\tif ( !equalValues || ( equalValues && !menuVisible && !modifierKey ) ) {\n\t\t\t\tthis.selectedItem = null;\n\t\t\t\tthis.search( null, event );\n\t\t\t}\n\t\t}, this.options.delay );\n\t},\n\n\tsearch: function( value, event ) {\n\t\tvalue = value != null ? value : this._value();\n\n\t\t// Always save the actual value, not the one passed as an argument\n\t\tthis.term = this._value();\n\n\t\tif ( value.length < this.options.minLength ) {\n\t\t\treturn this.close( event );\n\t\t}\n\n\t\tif ( this._trigger( \"search\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._search( value );\n\t},\n\n\t_search: function( value ) {\n\t\tthis.pending++;\n\t\tthis._addClass( \"ui-autocomplete-loading\" );\n\t\tthis.cancelSearch = false;\n\n\t\tthis.source( { term: value }, this._response() );\n\t},\n\n\t_response: function() {\n\t\tvar index = ++this.requestIndex;\n\n\t\treturn $.proxy( function( content ) {\n\t\t\tif ( index === this.requestIndex ) {\n\t\t\t\tthis.__response( content );\n\t\t\t}\n\n\t\t\tthis.pending--;\n\t\t\tif ( !this.pending ) {\n\t\t\t\tthis._removeClass( \"ui-autocomplete-loading\" );\n\t\t\t}\n\t\t}, this );\n\t},\n\n\t__response: function( content ) {\n\t\tif ( content ) {\n\t\t\tcontent = this._normalize( content );\n\t\t}\n\t\tthis._trigger( \"response\", null, { content: content } );\n\t\tif ( !this.options.disabled && content && content.length && !this.cancelSearch ) {\n\t\t\tthis._suggest( content );\n\t\t\tthis._trigger( \"open\" );\n\t\t} else {\n\n\t\t\t// use ._close() instead of .close() so we don't cancel future searches\n\t\t\tthis._close();\n\t\t}\n\t},\n\n\tclose: function( event ) {\n\t\tthis.cancelSearch = true;\n\t\tthis._close( event );\n\t},\n\n\t_close: function( event ) {\n\n\t\t// Remove the handler that closes the menu on outside clicks\n\t\tthis._off( this.document, \"mousedown\" );\n\n\t\tif ( this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.menu.element.hide();\n\t\t\tthis.menu.blur();\n\t\t\tthis.isNewMenu = true;\n\t\t\tthis._trigger( \"close\", event );\n\t\t}\n\t},\n\n\t_change: function( event ) {\n\t\tif ( this.previous !== this._value() ) {\n\t\t\tthis._trigger( \"change\", event, { item: this.selectedItem } );\n\t\t}\n\t},\n\n\t_normalize: function( items ) {\n\n\t\t// assume all items have the right format when the first item is complete\n\t\tif ( items.length && items[ 0 ].label && items[ 0 ].value ) {\n\t\t\treturn items;\n\t\t}\n\t\treturn $.map( items, function( item ) {\n\t\t\tif ( typeof item === \"string\" ) {\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item,\n\t\t\t\t\tvalue: item\n\t\t\t\t};\n\t\t\t}\n\t\t\treturn $.extend( {}, item, {\n\t\t\t\tlabel: item.label || item.value,\n\t\t\t\tvalue: item.value || item.label\n\t\t\t} );\n\t\t} );\n\t},\n\n\t_suggest: function( items ) {\n\t\tvar ul = this.menu.element.empty();\n\t\tthis._renderMenu( ul, items );\n\t\tthis.isNewMenu = true;\n\t\tthis.menu.refresh();\n\n\t\t// Size and position menu\n\t\tul.show();\n\t\tthis._resizeMenu();\n\t\tul.position( $.extend( {\n\t\t\tof: this.element\n\t\t}, this.options.position ) );\n\n\t\tif ( this.options.autoFocus ) {\n\t\t\tthis.menu.next();\n\t\t}\n\n\t\t// Listen for interactions outside of the widget (#6642)\n\t\tthis._on( this.document, {\n\t\t\tmousedown: \"_closeOnClickOutside\"\n\t\t} );\n\t},\n\n\t_resizeMenu: function() {\n\t\tvar ul = this.menu.element;\n\t\tul.outerWidth( Math.max(\n\n\t\t\t// Firefox wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping (#7513)\n\t\t\tul.width( \"\" ).outerWidth() + 1,\n\t\t\tthis.element.outerWidth()\n\t\t) );\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this;\n\t\t$.each( items, function( index, item ) {\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-autocomplete-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\treturn $( \"<li>\" )\n\t\t\t.append( $( \"<div>\" ).text( item.label ) )\n\t\t\t.appendTo( ul );\n\t},\n\n\t_move: function( direction, event ) {\n\t\tif ( !this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis.search( null, event );\n\t\t\treturn;\n\t\t}\n\t\tif ( this.menu.isFirstItem() && /^previous/.test( direction ) ||\n\t\t\t\tthis.menu.isLastItem() && /^next/.test( direction ) ) {\n\n\t\t\tif ( !this.isMultiLine ) {\n\t\t\t\tthis._value( this.term );\n\t\t\t}\n\n\t\t\tthis.menu.blur();\n\t\t\treturn;\n\t\t}\n\t\tthis.menu[ direction ]( event );\n\t},\n\n\twidget: function() {\n\t\treturn this.menu.element;\n\t},\n\n\t_value: function() {\n\t\treturn this.valueMethod.apply( this.element, arguments );\n\t},\n\n\t_keyEvent: function( keyEvent, event ) {\n\t\tif ( !this.isMultiLine || this.menu.element.is( \":visible\" ) ) {\n\t\t\tthis._move( keyEvent, event );\n\n\t\t\t// Prevents moving cursor to beginning/end of the text field in some browsers\n\t\t\tevent.preventDefault();\n\t\t}\n\t},\n\n\t// Support: Chrome <=50\n\t// We should be able to just use this.element.prop( \"isContentEditable\" )\n\t// but hidden elements always report false in Chrome.\n\t// https://code.google.com/p/chromium/issues/detail?id=313082\n\t_isContentEditable: function( element ) {\n\t\tif ( !element.length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar editable = element.prop( \"contentEditable\" );\n\n\t\tif ( editable === \"inherit\" ) {\n\t\t  return this._isContentEditable( element.parent() );\n\t\t}\n\n\t\treturn editable === \"true\";\n\t}\n} );\n\n$.extend( $.ui.autocomplete, {\n\tescapeRegex: function( value ) {\n\t\treturn value.replace( /[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\" );\n\t},\n\tfilter: function( array, term ) {\n\t\tvar matcher = new RegExp( $.ui.autocomplete.escapeRegex( term ), \"i\" );\n\t\treturn $.grep( array, function( value ) {\n\t\t\treturn matcher.test( value.label || value.value || value );\n\t\t} );\n\t}\n} );\n\n// Live region extension, adding a `messages` option\n// NOTE: This is an experimental API. We are still investigating\n// a full solution for string manipulation and internationalization.\n$.widget( \"ui.autocomplete\", $.ui.autocomplete, {\n\toptions: {\n\t\tmessages: {\n\t\t\tnoResults: \"No search results.\",\n\t\t\tresults: function( amount ) {\n\t\t\t\treturn amount + ( amount > 1 ? \" results are\" : \" result is\" ) +\n\t\t\t\t\t\" available, use up and down arrow keys to navigate.\";\n\t\t\t}\n\t\t}\n\t},\n\n\t__response: function( content ) {\n\t\tvar message;\n\t\tthis._superApply( arguments );\n\t\tif ( this.options.disabled || this.cancelSearch ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( content && content.length ) {\n\t\t\tmessage = this.options.messages.results( content.length );\n\t\t} else {\n\t\t\tmessage = this.options.messages.noResults;\n\t\t}\n\t\tthis.liveRegion.children().hide();\n\t\t$( \"<div>\" ).text( message ).appendTo( this.liveRegion );\n\t}\n} );\n\nvar widgetsAutocomplete = $.ui.autocomplete;\n\n\n/*!\n * jQuery UI Controlgroup 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Controlgroup\n//>>group: Widgets\n//>>description: Visually groups form control widgets\n//>>docs: http://api.jqueryui.com/controlgroup/\n//>>demos: http://jqueryui.com/controlgroup/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/controlgroup.css\n//>>css.theme: ../../themes/base/theme.css\n\n\nvar controlgroupCornerRegex = /ui-corner-([a-z]){2,6}/g;\n\nvar widgetsControlgroup = $.widget( \"ui.controlgroup\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<div>\",\n\toptions: {\n\t\tdirection: \"horizontal\",\n\t\tdisabled: null,\n\t\tonlyVisible: true,\n\t\titems: {\n\t\t\t\"button\": \"input[type=button], input[type=submit], input[type=reset], button, a\",\n\t\t\t\"controlgroupLabel\": \".ui-controlgroup-label\",\n\t\t\t\"checkboxradio\": \"input[type='checkbox'], input[type='radio']\",\n\t\t\t\"selectmenu\": \"select\",\n\t\t\t\"spinner\": \".ui-spinner-input\"\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._enhance();\n\t},\n\n\t// To support the enhanced option in jQuery Mobile, we isolate DOM manipulation\n\t_enhance: function() {\n\t\tthis.element.attr( \"role\", \"toolbar\" );\n\t\tthis.refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis._callChildMethod( \"destroy\" );\n\t\tthis.childWidgets.removeData( \"ui-controlgroup-data\" );\n\t\tthis.element.removeAttr( \"role\" );\n\t\tif ( this.options.items.controlgroupLabel ) {\n\t\t\tthis.element\n\t\t\t\t.find( this.options.items.controlgroupLabel )\n\t\t\t\t.find( \".ui-controlgroup-label-contents\" )\n\t\t\t\t.contents().unwrap();\n\t\t}\n\t},\n\n\t_initWidgets: function() {\n\t\tvar that = this,\n\t\t\tchildWidgets = [];\n\n\t\t// First we iterate over each of the items options\n\t\t$.each( this.options.items, function( widget, selector ) {\n\t\t\tvar labels;\n\t\t\tvar options = {};\n\n\t\t\t// Make sure the widget has a selector set\n\t\t\tif ( !selector ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( widget === \"controlgroupLabel\" ) {\n\t\t\t\tlabels = that.element.find( selector );\n\t\t\t\tlabels.each( function() {\n\t\t\t\t\tvar element = $( this );\n\n\t\t\t\t\tif ( element.children( \".ui-controlgroup-label-contents\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telement.contents()\n\t\t\t\t\t\t.wrapAll( \"<span class='ui-controlgroup-label-contents'></span>\" );\n\t\t\t\t} );\n\t\t\t\tthat._addClass( labels, null, \"ui-widget ui-widget-content ui-state-default\" );\n\t\t\t\tchildWidgets = childWidgets.concat( labels.get() );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Make sure the widget actually exists\n\t\t\tif ( !$.fn[ widget ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// We assume everything is in the middle to start because we can't determine\n\t\t\t// first / last elements until all enhancments are done.\n\t\t\tif ( that[ \"_\" + widget + \"Options\" ] ) {\n\t\t\t\toptions = that[ \"_\" + widget + \"Options\" ]( \"middle\" );\n\t\t\t} else {\n\t\t\t\toptions = { classes: {} };\n\t\t\t}\n\n\t\t\t// Find instances of this widget inside controlgroup and init them\n\t\t\tthat.element\n\t\t\t\t.find( selector )\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tvar instance = element[ widget ]( \"instance\" );\n\n\t\t\t\t\t// We need to clone the default options for this type of widget to avoid\n\t\t\t\t\t// polluting the variable options which has a wider scope than a single widget.\n\t\t\t\t\tvar instanceOptions = $.widget.extend( {}, options );\n\n\t\t\t\t\t// If the button is the child of a spinner ignore it\n\t\t\t\t\t// TODO: Find a more generic solution\n\t\t\t\t\tif ( widget === \"button\" && element.parent( \".ui-spinner\" ).length ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Create the widget if it doesn't exist\n\t\t\t\t\tif ( !instance ) {\n\t\t\t\t\t\tinstance = element[ widget ]()[ widget ]( \"instance\" );\n\t\t\t\t\t}\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstanceOptions.classes =\n\t\t\t\t\t\t\tthat._resolveClassesValues( instanceOptions.classes, instance );\n\t\t\t\t\t}\n\t\t\t\t\telement[ widget ]( instanceOptions );\n\n\t\t\t\t\t// Store an instance of the controlgroup to be able to reference\n\t\t\t\t\t// from the outermost element for changing options and refresh\n\t\t\t\t\tvar widgetElement = element[ widget ]( \"widget\" );\n\t\t\t\t\t$.data( widgetElement[ 0 ], \"ui-controlgroup-data\",\n\t\t\t\t\t\tinstance ? instance : element[ widget ]( \"instance\" ) );\n\n\t\t\t\t\tchildWidgets.push( widgetElement[ 0 ] );\n\t\t\t\t} );\n\t\t} );\n\n\t\tthis.childWidgets = $( $.unique( childWidgets ) );\n\t\tthis._addClass( this.childWidgets, \"ui-controlgroup-item\" );\n\t},\n\n\t_callChildMethod: function( method ) {\n\t\tthis.childWidgets.each( function() {\n\t\t\tvar element = $( this ),\n\t\t\t\tdata = element.data( \"ui-controlgroup-data\" );\n\t\t\tif ( data && data[ method ] ) {\n\t\t\t\tdata[ method ]();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_updateCornerClass: function( element, position ) {\n\t\tvar remove = \"ui-corner-top ui-corner-bottom ui-corner-left ui-corner-right ui-corner-all\";\n\t\tvar add = this._buildSimpleOptions( position, \"label\" ).classes.label;\n\n\t\tthis._removeClass( element, null, remove );\n\t\tthis._addClass( element, null, add );\n\t},\n\n\t_buildSimpleOptions: function( position, key ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\tvar result = {\n\t\t\tclasses: {}\n\t\t};\n\t\tresult.classes[ key ] = {\n\t\t\t\"middle\": \"\",\n\t\t\t\"first\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" ),\n\t\t\t\"last\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" ),\n\t\t\t\"only\": \"ui-corner-all\"\n\t\t}[ position ];\n\n\t\treturn result;\n\t},\n\n\t_spinnerOptions: function( position ) {\n\t\tvar options = this._buildSimpleOptions( position, \"ui-spinner\" );\n\n\t\toptions.classes[ \"ui-spinner-up\" ] = \"\";\n\t\toptions.classes[ \"ui-spinner-down\" ] = \"\";\n\n\t\treturn options;\n\t},\n\n\t_buttonOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-button\" );\n\t},\n\n\t_checkboxradioOptions: function( position ) {\n\t\treturn this._buildSimpleOptions( position, \"ui-checkboxradio-label\" );\n\t},\n\n\t_selectmenuOptions: function( position ) {\n\t\tvar direction = this.options.direction === \"vertical\";\n\t\treturn {\n\t\t\twidth: direction ? \"auto\" : false,\n\t\t\tclasses: {\n\t\t\t\tmiddle: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"\"\n\t\t\t\t},\n\t\t\t\tfirst: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-\" + ( direction ? \"top\" : \"tl\" ),\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"top\" : \"left\" )\n\t\t\t\t},\n\t\t\t\tlast: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": direction ? \"\" : \"ui-corner-tr\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-\" + ( direction ? \"bottom\" : \"right\" )\n\t\t\t\t},\n\t\t\t\tonly: {\n\t\t\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t\t\t}\n\n\t\t\t}[ position ]\n\t\t};\n\t},\n\n\t_resolveClassesValues: function( classes, instance ) {\n\t\tvar result = {};\n\t\t$.each( classes, function( key ) {\n\t\t\tvar current = instance.options.classes[ key ] || \"\";\n\t\t\tcurrent = $.trim( current.replace( controlgroupCornerRegex, \"\" ) );\n\t\t\tresult[ key ] = ( current + \" \" + classes[ key ] ).replace( /\\s+/g, \" \" );\n\t\t} );\n\t\treturn result;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"direction\" ) {\n\t\t\tthis._removeClass( \"ui-controlgroup-\" + this.options.direction );\n\t\t}\n\n\t\tthis._super( key, value );\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._callChildMethod( value ? \"disable\" : \"enable\" );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.refresh();\n\t},\n\n\trefresh: function() {\n\t\tvar children,\n\t\t\tthat = this;\n\n\t\tthis._addClass( \"ui-controlgroup ui-controlgroup-\" + this.options.direction );\n\n\t\tif ( this.options.direction === \"horizontal\" ) {\n\t\t\tthis._addClass( null, \"ui-helper-clearfix\" );\n\t\t}\n\t\tthis._initWidgets();\n\n\t\tchildren = this.childWidgets;\n\n\t\t// We filter here because we need to track all childWidgets not just the visible ones\n\t\tif ( this.options.onlyVisible ) {\n\t\t\tchildren = children.filter( \":visible\" );\n\t\t}\n\n\t\tif ( children.length ) {\n\n\t\t\t// We do this last because we need to make sure all enhancment is done\n\t\t\t// before determining first and last\n\t\t\t$.each( [ \"first\", \"last\" ], function( index, value ) {\n\t\t\t\tvar instance = children[ value ]().data( \"ui-controlgroup-data\" );\n\n\t\t\t\tif ( instance && that[ \"_\" + instance.widgetName + \"Options\" ] ) {\n\t\t\t\t\tvar options = that[ \"_\" + instance.widgetName + \"Options\" ](\n\t\t\t\t\t\tchildren.length === 1 ? \"only\" : value\n\t\t\t\t\t);\n\t\t\t\t\toptions.classes = that._resolveClassesValues( options.classes, instance );\n\t\t\t\t\tinstance.element[ instance.widgetName ]( options );\n\t\t\t\t} else {\n\t\t\t\t\tthat._updateCornerClass( children[ value ](), value );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\t// Finally call the refresh method on each of the child widgets.\n\t\t\tthis._callChildMethod( \"refresh\" );\n\t\t}\n\t}\n} );\n\n/*!\n * jQuery UI Checkboxradio 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Checkboxradio\n//>>group: Widgets\n//>>description: Enhances a form with multiple themeable checkboxes or radio buttons.\n//>>docs: http://api.jqueryui.com/checkboxradio/\n//>>demos: http://jqueryui.com/checkboxradio/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.structure: ../../themes/base/checkboxradio.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.checkboxradio\", [ $.ui.formResetMixin, {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tdisabled: null,\n\t\tlabel: null,\n\t\ticon: true,\n\t\tclasses: {\n\t\t\t\"ui-checkboxradio-label\": \"ui-corner-all\",\n\t\t\t\"ui-checkboxradio-icon\": \"ui-corner-all\"\n\t\t}\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled, labels;\n\t\tvar that = this;\n\t\tvar options = this._super() || {};\n\n\t\t// We read the type here, because it makes more sense to throw a element type error first,\n\t\t// rather then the error for lack of a label. Often if its the wrong type, it\n\t\t// won't have a label (e.g. calling on a div, btn, etc)\n\t\tthis._readType();\n\n\t\tlabels = this.element.labels();\n\n\t\t// If there are multiple labels, use the last one\n\t\tthis.label = $( labels[ labels.length - 1 ] );\n\t\tif ( !this.label.length ) {\n\t\t\t$.error( \"No label found for checkboxradio widget\" );\n\t\t}\n\n\t\tthis.originalLabel = \"\";\n\n\t\t// We need to get the label text but this may also need to make sure it does not contain the\n\t\t// input itself.\n\t\tthis.label.contents().not( this.element[ 0 ] ).each( function() {\n\n\t\t\t// The label contents could be text, html, or a mix. We concat each element to get a\n\t\t\t// string representation of the label, without the input as part of it.\n\t\t\tthat.originalLabel += this.nodeType === 3 ? $( this ).text() : this.outerHTML;\n\t\t} );\n\n\t\t// Set the label option if we found label text\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\n\t\tthis._bindFormResetHandler();\n\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled;\n\t\t}\n\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._addClass( \"ui-checkboxradio\", \"ui-helper-hidden-accessible\" );\n\t\tthis._addClass( this.label, \"ui-checkboxradio-label\", \"ui-button ui-widget\" );\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-radio-label\" );\n\t\t}\n\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tthis._updateLabel();\n\t\t} else if ( this.originalLabel ) {\n\t\t\tthis.options.label = this.originalLabel;\n\t\t}\n\n\t\tthis._enhance();\n\n\t\tif ( checked ) {\n\t\t\tthis._addClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\tif ( this.icon ) {\n\t\t\t\tthis._addClass( this.icon, null, \"ui-state-hover\" );\n\t\t\t}\n\t\t}\n\n\t\tthis._on( {\n\t\t\tchange: \"_toggleClasses\",\n\t\t\tfocus: function() {\n\t\t\t\tthis._addClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t},\n\t\t\tblur: function() {\n\t\t\t\tthis._removeClass( this.label, null, \"ui-state-focus ui-visual-focus\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_readType: function() {\n\t\tvar nodeName = this.element[ 0 ].nodeName.toLowerCase();\n\t\tthis.type = this.element[ 0 ].type;\n\t\tif ( nodeName !== \"input\" || !/radio|checkbox/.test( this.type ) ) {\n\t\t\t$.error( \"Can't create checkboxradio on element.nodeName=\" + nodeName +\n\t\t\t\t\" and element.type=\" + this.type );\n\t\t}\n\t},\n\n\t// Support jQuery Mobile enhanced option\n\t_enhance: function() {\n\t\tthis._updateIcon( this.element[ 0 ].checked );\n\t},\n\n\twidget: function() {\n\t\treturn this.label;\n\t},\n\n\t_getRadioGroup: function() {\n\t\tvar group;\n\t\tvar name = this.element[ 0 ].name;\n\t\tvar nameSelector = \"input[name='\" + $.ui.escapeSelector( name ) + \"']\";\n\n\t\tif ( !name ) {\n\t\t\treturn $( [] );\n\t\t}\n\n\t\tif ( this.form.length ) {\n\t\t\tgroup = $( this.form[ 0 ].elements ).filter( nameSelector );\n\t\t} else {\n\n\t\t\t// Not inside a form, check all inputs that also are not inside a form\n\t\t\tgroup = $( nameSelector ).filter( function() {\n\t\t\t\treturn $( this ).form().length === 0;\n\t\t\t} );\n\t\t}\n\n\t\treturn group.not( this.element );\n\t},\n\n\t_toggleClasses: function() {\n\t\tvar checked = this.element[ 0 ].checked;\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\n\t\tif ( this.options.icon && this.type === \"checkbox\" ) {\n\t\t\tthis._toggleClass( this.icon, null, \"ui-icon-check ui-state-checked\", checked )\n\t\t\t\t._toggleClass( this.icon, null, \"ui-icon-blank\", !checked );\n\t\t}\n\n\t\tif ( this.type === \"radio\" ) {\n\t\t\tthis._getRadioGroup()\n\t\t\t\t.each( function() {\n\t\t\t\t\tvar instance = $( this ).checkboxradio( \"instance\" );\n\n\t\t\t\t\tif ( instance ) {\n\t\t\t\t\t\tinstance._removeClass( instance.label,\n\t\t\t\t\t\t\t\"ui-checkboxradio-checked\", \"ui-state-active\" );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\t// We don't allow the value to be set to nothing\n\t\tif ( key === \"label\" && !value ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( this.label, null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\n\t\t\t// Don't refresh when setting disabled\n\t\t\treturn;\n\t\t}\n\t\tthis.refresh();\n\t},\n\n\t_updateIcon: function( checked ) {\n\t\tvar toAdd = \"ui-icon ui-icon-background \";\n\n\t\tif ( this.options.icon ) {\n\t\t\tif ( !this.icon ) {\n\t\t\t\tthis.icon = $( \"<span>\" );\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-checkboxradio-icon-space\" );\n\t\t\t}\n\n\t\t\tif ( this.type === \"checkbox\" ) {\n\t\t\t\ttoAdd += checked ? \"ui-icon-check ui-state-checked\" : \"ui-icon-blank\";\n\t\t\t\tthis._removeClass( this.icon, null, checked ? \"ui-icon-blank\" : \"ui-icon-check\" );\n\t\t\t} else {\n\t\t\t\ttoAdd += \"ui-icon-blank\";\n\t\t\t}\n\t\t\tthis._addClass( this.icon, \"ui-checkboxradio-icon\", toAdd );\n\t\t\tif ( !checked ) {\n\t\t\t\tthis._removeClass( this.icon, null, \"ui-icon-check ui-state-checked\" );\n\t\t\t}\n\t\t\tthis.icon.prependTo( this.label ).after( this.iconSpace );\n\t\t} else if ( this.icon !== undefined ) {\n\t\t\tthis.icon.remove();\n\t\t\tthis.iconSpace.remove();\n\t\t\tdelete this.icon;\n\t\t}\n\t},\n\n\t_updateLabel: function() {\n\n\t\t// Remove the contents of the label ( minus the icon, icon space, and input )\n\t\tvar contents = this.label.contents().not( this.element[ 0 ] );\n\t\tif ( this.icon ) {\n\t\t\tcontents = contents.not( this.icon[ 0 ] );\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tcontents = contents.not( this.iconSpace[ 0 ] );\n\t\t}\n\t\tcontents.remove();\n\n\t\tthis.label.append( this.options.label );\n\t},\n\n\trefresh: function() {\n\t\tvar checked = this.element[ 0 ].checked,\n\t\t\tisDisabled = this.element[ 0 ].disabled;\n\n\t\tthis._updateIcon( checked );\n\t\tthis._toggleClass( this.label, \"ui-checkboxradio-checked\", \"ui-state-active\", checked );\n\t\tif ( this.options.label !== null ) {\n\t\t\tthis._updateLabel();\n\t\t}\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { \"disabled\": isDisabled } );\n\t\t}\n\t}\n\n} ] );\n\nvar widgetsCheckboxradio = $.ui.checkboxradio;\n\n\n/*!\n * jQuery UI Button 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Button\n//>>group: Widgets\n//>>description: Enhances a form with themeable buttons.\n//>>docs: http://api.jqueryui.com/button/\n//>>demos: http://jqueryui.com/button/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.button\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<button>\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-button\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticon: null,\n\t\ticonPosition: \"beginning\",\n\t\tlabel: null,\n\t\tshowLabel: true\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar disabled,\n\n\t\t\t// This is to support cases like in jQuery Mobile where the base widget does have\n\t\t\t// an implementation of _getCreateOptions\n\t\t\toptions = this._super() || {};\n\n\t\tthis.isInput = this.element.is( \"input\" );\n\n\t\tdisabled = this.element[ 0 ].disabled;\n\t\tif ( disabled != null ) {\n\t\t\toptions.disabled = disabled;\n\t\t}\n\n\t\tthis.originalLabel = this.isInput ? this.element.val() : this.element.html();\n\t\tif ( this.originalLabel ) {\n\t\t\toptions.label = this.originalLabel;\n\t\t}\n\n\t\treturn options;\n\t},\n\n\t_create: function() {\n\t\tif ( !this.option.showLabel & !this.options.icon ) {\n\t\t\tthis.options.showLabel = true;\n\t\t}\n\n\t\t// We have to check the option again here even though we did in _getCreateOptions,\n\t\t// because null may have been passed on init which would override what was set in\n\t\t// _getCreateOptions\n\t\tif ( this.options.disabled == null ) {\n\t\t\tthis.options.disabled = this.element[ 0 ].disabled || false;\n\t\t}\n\n\t\tthis.hasTitle = !!this.element.attr( \"title\" );\n\n\t\t// Check to see if the label needs to be set or if its already correct\n\t\tif ( this.options.label && this.options.label !== this.originalLabel ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( this.options.label );\n\t\t\t} else {\n\t\t\t\tthis.element.html( this.options.label );\n\t\t\t}\n\t\t}\n\t\tthis._addClass( \"ui-button\", \"ui-widget\" );\n\t\tthis._setOption( \"disabled\", this.options.disabled );\n\t\tthis._enhance();\n\n\t\tif ( this.element.is( \"a\" ) ) {\n\t\t\tthis._on( {\n\t\t\t\t\"keyup\": function( event ) {\n\t\t\t\t\tif ( event.keyCode === $.ui.keyCode.SPACE ) {\n\t\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t\t// Support: PhantomJS <= 1.9, IE 8 Only\n\t\t\t\t\t\t// If a native click is available use it so we actually cause navigation\n\t\t\t\t\t\t// otherwise just trigger a click event\n\t\t\t\t\t\tif ( this.element[ 0 ].click ) {\n\t\t\t\t\t\t\tthis.element[ 0 ].click();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.element.trigger( \"click\" );\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\n\t_enhance: function() {\n\t\tif ( !this.element.is( \"button\" ) ) {\n\t\t\tthis.element.attr( \"role\", \"button\" );\n\t\t}\n\n\t\tif ( this.options.icon ) {\n\t\t\tthis._updateIcon( \"icon\", this.options.icon );\n\t\t\tthis._updateTooltip();\n\t\t}\n\t},\n\n\t_updateTooltip: function() {\n\t\tthis.title = this.element.attr( \"title\" );\n\n\t\tif ( !this.options.showLabel && !this.title ) {\n\t\t\tthis.element.attr( \"title\", this.options.label );\n\t\t}\n\t},\n\n\t_updateIcon: function( option, value ) {\n\t\tvar icon = option !== \"iconPosition\",\n\t\t\tposition = icon ? this.options.iconPosition : value,\n\t\t\tdisplayBlock = position === \"top\" || position === \"bottom\";\n\n\t\t// Create icon\n\t\tif ( !this.icon ) {\n\t\t\tthis.icon = $( \"<span>\" );\n\n\t\t\tthis._addClass( this.icon, \"ui-button-icon\", \"ui-icon\" );\n\n\t\t\tif ( !this.options.showLabel ) {\n\t\t\t\tthis._addClass( \"ui-button-icon-only\" );\n\t\t\t}\n\t\t} else if ( icon ) {\n\n\t\t\t// If we are updating the icon remove the old icon class\n\t\t\tthis._removeClass( this.icon, null, this.options.icon );\n\t\t}\n\n\t\t// If we are updating the icon add the new icon class\n\t\tif ( icon ) {\n\t\t\tthis._addClass( this.icon, null, value );\n\t\t}\n\n\t\tthis._attachIcon( position );\n\n\t\t// If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove\n\t\t// the iconSpace if there is one.\n\t\tif ( displayBlock ) {\n\t\t\tthis._addClass( this.icon, null, \"ui-widget-icon-block\" );\n\t\t\tif ( this.iconSpace ) {\n\t\t\t\tthis.iconSpace.remove();\n\t\t\t}\n\t\t} else {\n\n\t\t\t// Position is beginning or end so remove the ui-widget-icon-block class and add the\n\t\t\t// space if it does not exist\n\t\t\tif ( !this.iconSpace ) {\n\t\t\t\tthis.iconSpace = $( \"<span> </span>\" );\n\t\t\t\tthis._addClass( this.iconSpace, \"ui-button-icon-space\" );\n\t\t\t}\n\t\t\tthis._removeClass( this.icon, null, \"ui-wiget-icon-block\" );\n\t\t\tthis._attachIconSpace( position );\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role\" );\n\n\t\tif ( this.icon ) {\n\t\t\tthis.icon.remove();\n\t\t}\n\t\tif ( this.iconSpace ) {\n\t\t\tthis.iconSpace.remove();\n\t\t}\n\t\tif ( !this.hasTitle ) {\n\t\t\tthis.element.removeAttr( \"title\" );\n\t\t}\n\t},\n\n\t_attachIconSpace: function( iconPosition ) {\n\t\tthis.icon[ /^(?:end|bottom)/.test( iconPosition ) ? \"before\" : \"after\" ]( this.iconSpace );\n\t},\n\n\t_attachIcon: function( iconPosition ) {\n\t\tthis.element[ /^(?:end|bottom)/.test( iconPosition ) ? \"append\" : \"prepend\" ]( this.icon );\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar newShowLabel = options.showLabel === undefined ?\n\t\t\t\tthis.options.showLabel :\n\t\t\t\toptions.showLabel,\n\t\t\tnewIcon = options.icon === undefined ? this.options.icon : options.icon;\n\n\t\tif ( !newShowLabel && !newIcon ) {\n\t\t\toptions.showLabel = true;\n\t\t}\n\t\tthis._super( options );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icon\" ) {\n\t\t\tif ( value ) {\n\t\t\t\tthis._updateIcon( key, value );\n\t\t\t} else if ( this.icon ) {\n\t\t\t\tthis.icon.remove();\n\t\t\t\tif ( this.iconSpace ) {\n\t\t\t\t\tthis.iconSpace.remove();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"iconPosition\" ) {\n\t\t\tthis._updateIcon( key, value );\n\t\t}\n\n\t\t// Make sure we can't end up with a button that has neither text nor icon\n\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis._toggleClass( \"ui-button-icon-only\", null, !value );\n\t\t\t\tthis._updateTooltip();\n\t\t}\n\n\t\tif ( key === \"label\" ) {\n\t\t\tif ( this.isInput ) {\n\t\t\t\tthis.element.val( value );\n\t\t\t} else {\n\n\t\t\t\t// If there is an icon, append it, else nothing then append the value\n\t\t\t\t// this avoids removal of the icon when setting label text\n\t\t\t\tthis.element.html( value );\n\t\t\t\tif ( this.icon ) {\n\t\t\t\t\tthis._attachIcon( this.options.iconPosition );\n\t\t\t\t\tthis._attachIconSpace( this.options.iconPosition );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\tthis._toggleClass( null, \"ui-state-disabled\", value );\n\t\t\tthis.element[ 0 ].disabled = value;\n\t\t\tif ( value ) {\n\t\t\t\tthis.element.blur();\n\t\t\t}\n\t\t}\n\t},\n\n\trefresh: function() {\n\n\t\t// Make sure to only check disabled if its an element that supports this otherwise\n\t\t// check for the disabled class to determine state\n\t\tvar isDisabled = this.element.is( \"input, button\" ) ?\n\t\t\tthis.element[ 0 ].disabled : this.element.hasClass( \"ui-button-disabled\" );\n\n\t\tif ( isDisabled !== this.options.disabled ) {\n\t\t\tthis._setOptions( { disabled: isDisabled } );\n\t\t}\n\n\t\tthis._updateTooltip();\n\t}\n} );\n\n// DEPRECATED\nif ( $.uiBackCompat !== false ) {\n\n\t// Text and Icons options\n\t$.widget( \"ui.button\", $.ui.button, {\n\t\toptions: {\n\t\t\ttext: true,\n\t\t\ticons: {\n\t\t\t\tprimary: null,\n\t\t\t\tsecondary: null\n\t\t\t}\n\t\t},\n\n\t\t_create: function() {\n\t\t\tif ( this.options.showLabel && !this.options.text ) {\n\t\t\t\tthis.options.showLabel = this.options.text;\n\t\t\t}\n\t\t\tif ( !this.options.showLabel && this.options.text ) {\n\t\t\t\tthis.options.text = this.options.showLabel;\n\t\t\t}\n\t\t\tif ( !this.options.icon && ( this.options.icons.primary ||\n\t\t\t\t\tthis.options.icons.secondary ) ) {\n\t\t\t\tif ( this.options.icons.primary ) {\n\t\t\t\t\tthis.options.icon = this.options.icons.primary;\n\t\t\t\t} else {\n\t\t\t\t\tthis.options.icon = this.options.icons.secondary;\n\t\t\t\t\tthis.options.iconPosition = \"end\";\n\t\t\t\t}\n\t\t\t} else if ( this.options.icon ) {\n\t\t\t\tthis.options.icons.primary = this.options.icon;\n\t\t\t}\n\t\t\tthis._super();\n\t\t},\n\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"text\" ) {\n\t\t\t\tthis._super( \"showLabel\", value );\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( key === \"showLabel\" ) {\n\t\t\t\tthis.options.text = value;\n\t\t\t}\n\t\t\tif ( key === \"icon\" ) {\n\t\t\t\tthis.options.icons.primary = value;\n\t\t\t}\n\t\t\tif ( key === \"icons\" ) {\n\t\t\t\tif ( value.primary ) {\n\t\t\t\t\tthis._super( \"icon\", value.primary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"beginning\" );\n\t\t\t\t} else if ( value.secondary ) {\n\t\t\t\t\tthis._super( \"icon\", value.secondary );\n\t\t\t\t\tthis._super( \"iconPosition\", \"end\" );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n\n\t$.fn.button = ( function( orig ) {\n\t\treturn function() {\n\t\t\tif ( !this.length || ( this.length && this[ 0 ].tagName !== \"INPUT\" ) ||\n\t\t\t\t\t( this.length && this[ 0 ].tagName === \"INPUT\" && (\n\t\t\t\t\t\tthis.attr( \"type\" ) !== \"checkbox\" && this.attr( \"type\" ) !== \"radio\"\n\t\t\t\t\t) ) ) {\n\t\t\t\treturn orig.apply( this, arguments );\n\t\t\t}\n\t\t\tif ( !$.ui.checkboxradio ) {\n\t\t\t\t$.error( \"Checkboxradio widget missing\" );\n\t\t\t}\n\t\t\tif ( arguments.length === 0 ) {\n\t\t\t\treturn this.checkboxradio( {\n\t\t\t\t\t\"icon\": false\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn this.checkboxradio.apply( this, arguments );\n\t\t};\n\t} )( $.fn.button );\n\n\t$.fn.buttonset = function() {\n\t\tif ( !$.ui.controlgroup ) {\n\t\t\t$.error( \"Controlgroup widget missing\" );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" && arguments[ 2 ] ) {\n\t\t\treturn this.controlgroup.apply( this,\n\t\t\t\t[ arguments[ 0 ], \"items.button\", arguments[ 2 ] ] );\n\t\t}\n\t\tif ( arguments[ 0 ] === \"option\" && arguments[ 1 ] === \"items\" ) {\n\t\t\treturn this.controlgroup.apply( this, [ arguments[ 0 ], \"items.button\" ] );\n\t\t}\n\t\tif ( typeof arguments[ 0 ] === \"object\" && arguments[ 0 ].items ) {\n\t\t\targuments[ 0 ].items = {\n\t\t\t\tbutton: arguments[ 0 ].items\n\t\t\t};\n\t\t}\n\t\treturn this.controlgroup.apply( this, arguments );\n\t};\n}\n\nvar widgetsButton = $.ui.button;\n\n\n// jscs:disable maximumLineLength\n/* jscs:disable requireCamelCaseOrUpperCaseIdentifiers */\n/*!\n * jQuery UI Datepicker 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Datepicker\n//>>group: Widgets\n//>>description: Displays a calendar from an input or inline for selecting dates.\n//>>docs: http://api.jqueryui.com/datepicker/\n//>>demos: http://jqueryui.com/datepicker/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/datepicker.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.extend( $.ui, { datepicker: { version: \"1.12.1\" } } );\n\nvar datepicker_instActive;\n\nfunction datepicker_getZindex( elem ) {\n\tvar position, value;\n\twhile ( elem.length && elem[ 0 ] !== document ) {\n\n\t\t// Ignore z-index if position is set to a value where z-index is ignored by the browser\n\t\t// This makes behavior of this function consistent across browsers\n\t\t// WebKit always returns auto if the element is positioned\n\t\tposition = elem.css( \"position\" );\n\t\tif ( position === \"absolute\" || position === \"relative\" || position === \"fixed\" ) {\n\n\t\t\t// IE returns 0 when zIndex is not specified\n\t\t\t// other browsers return a string\n\t\t\t// we ignore the case of nested elements with an explicit value of 0\n\t\t\t// <div style=\"z-index: -10;\"><div style=\"z-index: 0;\"></div></div>\n\t\t\tvalue = parseInt( elem.css( \"zIndex\" ), 10 );\n\t\t\tif ( !isNaN( value ) && value !== 0 ) {\n\t\t\t\treturn value;\n\t\t\t}\n\t\t}\n\t\telem = elem.parent();\n\t}\n\n\treturn 0;\n}\n/* Date picker manager.\n   Use the singleton instance of this class, $.datepicker, to interact with the date picker.\n   Settings for (groups of) date pickers are maintained in an instance object,\n   allowing multiple different settings on the same page. */\n\nfunction Datepicker() {\n\tthis._curInst = null; // The current instance in use\n\tthis._keyEvent = false; // If the last event was a key event\n\tthis._disabledInputs = []; // List of date picker inputs that have been disabled\n\tthis._datepickerShowing = false; // True if the popup picker is showing , false if not\n\tthis._inDialog = false; // True if showing within a \"dialog\", false if not\n\tthis._mainDivId = \"ui-datepicker-div\"; // The ID of the main datepicker division\n\tthis._inlineClass = \"ui-datepicker-inline\"; // The name of the inline marker class\n\tthis._appendClass = \"ui-datepicker-append\"; // The name of the append marker class\n\tthis._triggerClass = \"ui-datepicker-trigger\"; // The name of the trigger marker class\n\tthis._dialogClass = \"ui-datepicker-dialog\"; // The name of the dialog marker class\n\tthis._disableClass = \"ui-datepicker-disabled\"; // The name of the disabled covering marker class\n\tthis._unselectableClass = \"ui-datepicker-unselectable\"; // The name of the unselectable cell marker class\n\tthis._currentClass = \"ui-datepicker-current-day\"; // The name of the current day marker class\n\tthis._dayOverClass = \"ui-datepicker-days-cell-over\"; // The name of the day hover marker class\n\tthis.regional = []; // Available regional settings, indexed by language code\n\tthis.regional[ \"\" ] = { // Default regional settings\n\t\tcloseText: \"Done\", // Display text for close link\n\t\tprevText: \"Prev\", // Display text for previous month link\n\t\tnextText: \"Next\", // Display text for next month link\n\t\tcurrentText: \"Today\", // Display text for current month link\n\t\tmonthNames: [ \"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\n\t\t\t\"July\",\"August\",\"September\",\"October\",\"November\",\"December\" ], // Names of months for drop-down and formatting\n\t\tmonthNamesShort: [ \"Jan\", \"Feb\", \"Mar\", \"Apr\", \"May\", \"Jun\", \"Jul\", \"Aug\", \"Sep\", \"Oct\", \"Nov\", \"Dec\" ], // For formatting\n\t\tdayNames: [ \"Sunday\", \"Monday\", \"Tuesday\", \"Wednesday\", \"Thursday\", \"Friday\", \"Saturday\" ], // For formatting\n\t\tdayNamesShort: [ \"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\" ], // For formatting\n\t\tdayNamesMin: [ \"Su\",\"Mo\",\"Tu\",\"We\",\"Th\",\"Fr\",\"Sa\" ], // Column headings for days starting at Sunday\n\t\tweekHeader: \"Wk\", // Column header for week of the year\n\t\tdateFormat: \"mm/dd/yy\", // See format options on parseDate\n\t\tfirstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...\n\t\tisRTL: false, // True if right-to-left language, false if left-to-right\n\t\tshowMonthAfterYear: false, // True if the year select precedes month, false for month then year\n\t\tyearSuffix: \"\" // Additional text to append to the year in the month headers\n\t};\n\tthis._defaults = { // Global defaults for all the date picker instances\n\t\tshowOn: \"focus\", // \"focus\" for popup on focus,\n\t\t\t// \"button\" for trigger button, or \"both\" for either\n\t\tshowAnim: \"fadeIn\", // Name of jQuery animation for popup\n\t\tshowOptions: {}, // Options for enhanced animations\n\t\tdefaultDate: null, // Used when field is blank: actual date,\n\t\t\t// +/-number for offset from today, null for today\n\t\tappendText: \"\", // Display text following the input box, e.g. showing the format\n\t\tbuttonText: \"...\", // Text for trigger button\n\t\tbuttonImage: \"\", // URL for trigger button image\n\t\tbuttonImageOnly: false, // True if the image appears alone, false if it appears on a button\n\t\thideIfNoPrevNext: false, // True to hide next/previous month links\n\t\t\t// if not applicable, false to just disable them\n\t\tnavigationAsDateFormat: false, // True if date formatting applied to prev/today/next links\n\t\tgotoCurrent: false, // True if today link goes back to current selection instead\n\t\tchangeMonth: false, // True if month can be selected directly, false if only prev/next\n\t\tchangeYear: false, // True if year can be selected directly, false if only prev/next\n\t\tyearRange: \"c-10:c+10\", // Range of years to display in drop-down,\n\t\t\t// either relative to today's year (-nn:+nn), relative to currently displayed year\n\t\t\t// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)\n\t\tshowOtherMonths: false, // True to show dates in other months, false to leave blank\n\t\tselectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable\n\t\tshowWeek: false, // True to show week of the year, false to not show it\n\t\tcalculateWeek: this.iso8601Week, // How to calculate the week of the year,\n\t\t\t// takes a Date and returns the number of the week for it\n\t\tshortYearCutoff: \"+10\", // Short year values < this are in the current century,\n\t\t\t// > this are in the previous century,\n\t\t\t// string value starting with \"+\" for current year + value\n\t\tminDate: null, // The earliest selectable date, or null for no limit\n\t\tmaxDate: null, // The latest selectable date, or null for no limit\n\t\tduration: \"fast\", // Duration of display/closure\n\t\tbeforeShowDay: null, // Function that takes a date and returns an array with\n\t\t\t// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or \"\",\n\t\t\t// [2] = cell title (optional), e.g. $.datepicker.noWeekends\n\t\tbeforeShow: null, // Function that takes an input field and\n\t\t\t// returns a set of custom settings for the date picker\n\t\tonSelect: null, // Define a callback function when a date is selected\n\t\tonChangeMonthYear: null, // Define a callback function when the month or year is changed\n\t\tonClose: null, // Define a callback function when the datepicker is closed\n\t\tnumberOfMonths: 1, // Number of months to show at a time\n\t\tshowCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)\n\t\tstepMonths: 1, // Number of months to step back/forward\n\t\tstepBigMonths: 12, // Number of months to step back/forward for the big links\n\t\taltField: \"\", // Selector for an alternate field to store selected dates into\n\t\taltFormat: \"\", // The date format to use for the alternate field\n\t\tconstrainInput: true, // The input is constrained by the current date format\n\t\tshowButtonPanel: false, // True to show button panel, false to not show it\n\t\tautoSize: false, // True to size the input for the date format, false to leave as is\n\t\tdisabled: false // The initial disabled state\n\t};\n\t$.extend( this._defaults, this.regional[ \"\" ] );\n\tthis.regional.en = $.extend( true, {}, this.regional[ \"\" ] );\n\tthis.regional[ \"en-US\" ] = $.extend( true, {}, this.regional.en );\n\tthis.dpDiv = datepicker_bindHover( $( \"<div id='\" + this._mainDivId + \"' class='ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) );\n}\n\n$.extend( Datepicker.prototype, {\n\t/* Class name added to elements to indicate already configured with a date picker. */\n\tmarkerClassName: \"hasDatepicker\",\n\n\t//Keep track of the maximum number of rows displayed (see #7043)\n\tmaxRows: 4,\n\n\t// TODO rename to \"widget\" when switching to widget factory\n\t_widgetDatepicker: function() {\n\t\treturn this.dpDiv;\n\t},\n\n\t/* Override the default settings for all instances of the date picker.\n\t * @param  settings  object - the new settings to use as defaults (anonymous object)\n\t * @return the manager object\n\t */\n\tsetDefaults: function( settings ) {\n\t\tdatepicker_extendRemove( this._defaults, settings || {} );\n\t\treturn this;\n\t},\n\n\t/* Attach the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t * @param  settings  object - the new settings to use for this date picker instance (anonymous)\n\t */\n\t_attachDatepicker: function( target, settings ) {\n\t\tvar nodeName, inline, inst;\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tinline = ( nodeName === \"div\" || nodeName === \"span\" );\n\t\tif ( !target.id ) {\n\t\t\tthis.uuid += 1;\n\t\t\ttarget.id = \"dp\" + this.uuid;\n\t\t}\n\t\tinst = this._newInst( $( target ), inline );\n\t\tinst.settings = $.extend( {}, settings || {} );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tthis._connectDatepicker( target, inst );\n\t\t} else if ( inline ) {\n\t\t\tthis._inlineDatepicker( target, inst );\n\t\t}\n\t},\n\n\t/* Create a new instance object. */\n\t_newInst: function( target, inline ) {\n\t\tvar id = target[ 0 ].id.replace( /([^A-Za-z0-9_\\-])/g, \"\\\\\\\\$1\" ); // escape jQuery meta chars\n\t\treturn { id: id, input: target, // associated target\n\t\t\tselectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection\n\t\t\tdrawMonth: 0, drawYear: 0, // month being drawn\n\t\t\tinline: inline, // is datepicker inline or not\n\t\t\tdpDiv: ( !inline ? this.dpDiv : // presentation div\n\t\t\tdatepicker_bindHover( $( \"<div class='\" + this._inlineClass + \" ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all'></div>\" ) ) ) };\n\t},\n\n\t/* Attach the date picker to an input field. */\n\t_connectDatepicker: function( target, inst ) {\n\t\tvar input = $( target );\n\t\tinst.append = $( [] );\n\t\tinst.trigger = $( [] );\n\t\tif ( input.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._attachments( input, inst );\n\t\tinput.addClass( this.markerClassName ).on( \"keydown\", this._doKeyDown ).\n\t\t\ton( \"keypress\", this._doKeyPress ).on( \"keyup\", this._doKeyUp );\n\t\tthis._autoSize( inst );\n\t\t$.data( target, \"datepicker\", inst );\n\n\t\t//If disabled option is true, disable the datepicker once it has been attached to the input (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\t},\n\n\t/* Make attachments based on settings. */\n\t_attachments: function( input, inst ) {\n\t\tvar showOn, buttonText, buttonImage,\n\t\t\tappendText = this._get( inst, \"appendText\" ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\tif ( inst.append ) {\n\t\t\tinst.append.remove();\n\t\t}\n\t\tif ( appendText ) {\n\t\t\tinst.append = $( \"<span class='\" + this._appendClass + \"'>\" + appendText + \"</span>\" );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.append );\n\t\t}\n\n\t\tinput.off( \"focus\", this._showDatepicker );\n\n\t\tif ( inst.trigger ) {\n\t\t\tinst.trigger.remove();\n\t\t}\n\n\t\tshowOn = this._get( inst, \"showOn\" );\n\t\tif ( showOn === \"focus\" || showOn === \"both\" ) { // pop-up date picker when in the marked field\n\t\t\tinput.on( \"focus\", this._showDatepicker );\n\t\t}\n\t\tif ( showOn === \"button\" || showOn === \"both\" ) { // pop-up date picker when button clicked\n\t\t\tbuttonText = this._get( inst, \"buttonText\" );\n\t\t\tbuttonImage = this._get( inst, \"buttonImage\" );\n\t\t\tinst.trigger = $( this._get( inst, \"buttonImageOnly\" ) ?\n\t\t\t\t$( \"<img/>\" ).addClass( this._triggerClass ).\n\t\t\t\t\tattr( { src: buttonImage, alt: buttonText, title: buttonText } ) :\n\t\t\t\t$( \"<button type='button'></button>\" ).addClass( this._triggerClass ).\n\t\t\t\t\thtml( !buttonImage ? buttonText : $( \"<img/>\" ).attr(\n\t\t\t\t\t{ src:buttonImage, alt:buttonText, title:buttonText } ) ) );\n\t\t\tinput[ isRTL ? \"before\" : \"after\" ]( inst.trigger );\n\t\t\tinst.trigger.on( \"click\", function() {\n\t\t\t\tif ( $.datepicker._datepickerShowing && $.datepicker._lastInput === input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t} else if ( $.datepicker._datepickerShowing && $.datepicker._lastInput !== input[ 0 ] ) {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t} else {\n\t\t\t\t\t$.datepicker._showDatepicker( input[ 0 ] );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t} );\n\t\t}\n\t},\n\n\t/* Apply the maximum length for the date format. */\n\t_autoSize: function( inst ) {\n\t\tif ( this._get( inst, \"autoSize\" ) && !inst.inline ) {\n\t\t\tvar findMax, max, maxI, i,\n\t\t\t\tdate = new Date( 2009, 12 - 1, 20 ), // Ensure double digits\n\t\t\t\tdateFormat = this._get( inst, \"dateFormat\" );\n\n\t\t\tif ( dateFormat.match( /[DM]/ ) ) {\n\t\t\t\tfindMax = function( names ) {\n\t\t\t\t\tmax = 0;\n\t\t\t\t\tmaxI = 0;\n\t\t\t\t\tfor ( i = 0; i < names.length; i++ ) {\n\t\t\t\t\t\tif ( names[ i ].length > max ) {\n\t\t\t\t\t\t\tmax = names[ i ].length;\n\t\t\t\t\t\t\tmaxI = i;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\treturn maxI;\n\t\t\t\t};\n\t\t\t\tdate.setMonth( findMax( this._get( inst, ( dateFormat.match( /MM/ ) ?\n\t\t\t\t\t\"monthNames\" : \"monthNamesShort\" ) ) ) );\n\t\t\t\tdate.setDate( findMax( this._get( inst, ( dateFormat.match( /DD/ ) ?\n\t\t\t\t\t\"dayNames\" : \"dayNamesShort\" ) ) ) + 20 - date.getDay() );\n\t\t\t}\n\t\t\tinst.input.attr( \"size\", this._formatDate( inst, date ).length );\n\t\t}\n\t},\n\n\t/* Attach an inline date picker to a div. */\n\t_inlineDatepicker: function( target, inst ) {\n\t\tvar divSpan = $( target );\n\t\tif ( divSpan.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\t\tdivSpan.addClass( this.markerClassName ).append( inst.dpDiv );\n\t\t$.data( target, \"datepicker\", inst );\n\t\tthis._setDate( inst, this._getDefaultDate( inst ), true );\n\t\tthis._updateDatepicker( inst );\n\t\tthis._updateAlternate( inst );\n\n\t\t//If disabled option is true, disable the datepicker before showing it (see ticket #5665)\n\t\tif ( inst.settings.disabled ) {\n\t\t\tthis._disableDatepicker( target );\n\t\t}\n\n\t\t// Set display:block in place of inst.dpDiv.show() which won't work on disconnected elements\n\t\t// http://bugs.jqueryui.com/ticket/7552 - A Datepicker created on a detached div has zero height\n\t\tinst.dpDiv.css( \"display\", \"block\" );\n\t},\n\n\t/* Pop-up the date picker in a \"dialog\" box.\n\t * @param  input element - ignored\n\t * @param  date\tstring or Date - the initial date to display\n\t * @param  onSelect  function - the function to call when a date is selected\n\t * @param  settings  object - update the dialog date picker instance's settings (anonymous object)\n\t * @param  pos int[2] - coordinates for the dialog's position within the screen or\n\t *\t\t\t\t\tevent - with x/y coordinates or\n\t *\t\t\t\t\tleave empty for default (screen centre)\n\t * @return the manager object\n\t */\n\t_dialogDatepicker: function( input, date, onSelect, settings, pos ) {\n\t\tvar id, browserWidth, browserHeight, scrollX, scrollY,\n\t\t\tinst = this._dialogInst; // internal instance\n\n\t\tif ( !inst ) {\n\t\t\tthis.uuid += 1;\n\t\t\tid = \"dp\" + this.uuid;\n\t\t\tthis._dialogInput = $( \"<input type='text' id='\" + id +\n\t\t\t\t\"' style='position: absolute; top: -100px; width: 0px;'/>\" );\n\t\t\tthis._dialogInput.on( \"keydown\", this._doKeyDown );\n\t\t\t$( \"body\" ).append( this._dialogInput );\n\t\t\tinst = this._dialogInst = this._newInst( this._dialogInput, false );\n\t\t\tinst.settings = {};\n\t\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, settings || {} );\n\t\tdate = ( date && date.constructor === Date ? this._formatDate( inst, date ) : date );\n\t\tthis._dialogInput.val( date );\n\n\t\tthis._pos = ( pos ? ( pos.length ? pos : [ pos.pageX, pos.pageY ] ) : null );\n\t\tif ( !this._pos ) {\n\t\t\tbrowserWidth = document.documentElement.clientWidth;\n\t\t\tbrowserHeight = document.documentElement.clientHeight;\n\t\t\tscrollX = document.documentElement.scrollLeft || document.body.scrollLeft;\n\t\t\tscrollY = document.documentElement.scrollTop || document.body.scrollTop;\n\t\t\tthis._pos = // should use actual width/height below\n\t\t\t\t[ ( browserWidth / 2 ) - 100 + scrollX, ( browserHeight / 2 ) - 150 + scrollY ];\n\t\t}\n\n\t\t// Move input on screen for focus, but hidden behind dialog\n\t\tthis._dialogInput.css( \"left\", ( this._pos[ 0 ] + 20 ) + \"px\" ).css( \"top\", this._pos[ 1 ] + \"px\" );\n\t\tinst.settings.onSelect = onSelect;\n\t\tthis._inDialog = true;\n\t\tthis.dpDiv.addClass( this._dialogClass );\n\t\tthis._showDatepicker( this._dialogInput[ 0 ] );\n\t\tif ( $.blockUI ) {\n\t\t\t$.blockUI( this.dpDiv );\n\t\t}\n\t\t$.data( this._dialogInput[ 0 ], \"datepicker\", inst );\n\t\treturn this;\n\t},\n\n\t/* Detach a datepicker from its control.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_destroyDatepicker: function( target ) {\n\t\tvar nodeName,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\t$.removeData( target, \"datepicker\" );\n\t\tif ( nodeName === \"input\" ) {\n\t\t\tinst.append.remove();\n\t\t\tinst.trigger.remove();\n\t\t\t$target.removeClass( this.markerClassName ).\n\t\t\t\toff( \"focus\", this._showDatepicker ).\n\t\t\t\toff( \"keydown\", this._doKeyDown ).\n\t\t\t\toff( \"keypress\", this._doKeyPress ).\n\t\t\t\toff( \"keyup\", this._doKeyUp );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\t$target.removeClass( this.markerClassName ).empty();\n\t\t}\n\n\t\tif ( datepicker_instActive === inst ) {\n\t\t\tdatepicker_instActive = null;\n\t\t}\n\t},\n\n\t/* Enable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_enableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = false;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = false; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"1.0\", cursor: \"\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().removeClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", false );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t},\n\n\t/* Disable the date picker to a jQuery selection.\n\t * @param  target\telement - the target input field or division or span\n\t */\n\t_disableDatepicker: function( target ) {\n\t\tvar nodeName, inline,\n\t\t\t$target = $( target ),\n\t\t\tinst = $.data( target, \"datepicker\" );\n\n\t\tif ( !$target.hasClass( this.markerClassName ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tnodeName = target.nodeName.toLowerCase();\n\t\tif ( nodeName === \"input\" ) {\n\t\t\ttarget.disabled = true;\n\t\t\tinst.trigger.filter( \"button\" ).\n\t\t\t\teach( function() { this.disabled = true; } ).end().\n\t\t\t\tfilter( \"img\" ).css( { opacity: \"0.5\", cursor: \"default\" } );\n\t\t} else if ( nodeName === \"div\" || nodeName === \"span\" ) {\n\t\t\tinline = $target.children( \".\" + this._inlineClass );\n\t\t\tinline.children().addClass( \"ui-state-disabled\" );\n\t\t\tinline.find( \"select.ui-datepicker-month, select.ui-datepicker-year\" ).\n\t\t\t\tprop( \"disabled\", true );\n\t\t}\n\t\tthis._disabledInputs = $.map( this._disabledInputs,\n\t\t\tfunction( value ) { return ( value === target ? null : value ); } ); // delete entry\n\t\tthis._disabledInputs[ this._disabledInputs.length ] = target;\n\t},\n\n\t/* Is the first field in a jQuery collection disabled as a datepicker?\n\t * @param  target\telement - the target input field or division or span\n\t * @return boolean - true if disabled, false if enabled\n\t */\n\t_isDisabledDatepicker: function( target ) {\n\t\tif ( !target ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i = 0; i < this._disabledInputs.length; i++ ) {\n\t\t\tif ( this._disabledInputs[ i ] === target ) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\t/* Retrieve the instance data for the target control.\n\t * @param  target  element - the target input field or division or span\n\t * @return  object - the associated instance data\n\t * @throws  error if a jQuery problem getting data\n\t */\n\t_getInst: function( target ) {\n\t\ttry {\n\t\t\treturn $.data( target, \"datepicker\" );\n\t\t}\n\t\tcatch ( err ) {\n\t\t\tthrow \"Missing instance data for this datepicker\";\n\t\t}\n\t},\n\n\t/* Update or retrieve the settings for a date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t * @param  name\tobject - the new settings to update or\n\t *\t\t\t\tstring - the name of the setting to change or retrieve,\n\t *\t\t\t\twhen retrieving also \"all\" for all instance settings or\n\t *\t\t\t\t\"defaults\" for all global defaults\n\t * @param  value   any - the new value for the setting\n\t *\t\t\t\t(omit if above is an object or to retrieve a value)\n\t */\n\t_optionDatepicker: function( target, name, value ) {\n\t\tvar settings, date, minDate, maxDate,\n\t\t\tinst = this._getInst( target );\n\n\t\tif ( arguments.length === 2 && typeof name === \"string\" ) {\n\t\t\treturn ( name === \"defaults\" ? $.extend( {}, $.datepicker._defaults ) :\n\t\t\t\t( inst ? ( name === \"all\" ? $.extend( {}, inst.settings ) :\n\t\t\t\tthis._get( inst, name ) ) : null ) );\n\t\t}\n\n\t\tsettings = name || {};\n\t\tif ( typeof name === \"string\" ) {\n\t\t\tsettings = {};\n\t\t\tsettings[ name ] = value;\n\t\t}\n\n\t\tif ( inst ) {\n\t\t\tif ( this._curInst === inst ) {\n\t\t\t\tthis._hideDatepicker();\n\t\t\t}\n\n\t\t\tdate = this._getDateDatepicker( target, true );\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" );\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" );\n\t\t\tdatepicker_extendRemove( inst.settings, settings );\n\n\t\t\t// reformat the old minDate/maxDate values if dateFormat changes and a new minDate/maxDate isn't provided\n\t\t\tif ( minDate !== null && settings.dateFormat !== undefined && settings.minDate === undefined ) {\n\t\t\t\tinst.settings.minDate = this._formatDate( inst, minDate );\n\t\t\t}\n\t\t\tif ( maxDate !== null && settings.dateFormat !== undefined && settings.maxDate === undefined ) {\n\t\t\t\tinst.settings.maxDate = this._formatDate( inst, maxDate );\n\t\t\t}\n\t\t\tif ( \"disabled\" in settings ) {\n\t\t\t\tif ( settings.disabled ) {\n\t\t\t\t\tthis._disableDatepicker( target );\n\t\t\t\t} else {\n\t\t\t\t\tthis._enableDatepicker( target );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._attachments( $( target ), inst );\n\t\t\tthis._autoSize( inst );\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateAlternate( inst );\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t// Change method deprecated\n\t_changeDatepicker: function( target, name, value ) {\n\t\tthis._optionDatepicker( target, name, value );\n\t},\n\n\t/* Redraw the date picker attached to an input field or division.\n\t * @param  target  element - the target input field or division or span\n\t */\n\t_refreshDatepicker: function( target ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t}\n\t},\n\n\t/* Set the dates for a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  date\tDate - the new date\n\t */\n\t_setDateDatepicker: function( target, date ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst ) {\n\t\t\tthis._setDate( inst, date );\n\t\t\tthis._updateDatepicker( inst );\n\t\t\tthis._updateAlternate( inst );\n\t\t}\n\t},\n\n\t/* Get the date(s) for the first entry in a jQuery selection.\n\t * @param  target element - the target input field or division or span\n\t * @param  noDefault boolean - true if no default date is to be used\n\t * @return Date - the current date\n\t */\n\t_getDateDatepicker: function( target, noDefault ) {\n\t\tvar inst = this._getInst( target );\n\t\tif ( inst && !inst.inline ) {\n\t\t\tthis._setDateFromField( inst, noDefault );\n\t\t}\n\t\treturn ( inst ? this._getDate( inst ) : null );\n\t},\n\n\t/* Handle keystrokes. */\n\t_doKeyDown: function( event ) {\n\t\tvar onSelect, dateStr, sel,\n\t\t\tinst = $.datepicker._getInst( event.target ),\n\t\t\thandled = true,\n\t\t\tisRTL = inst.dpDiv.is( \".ui-datepicker-rtl\" );\n\n\t\tinst._keyEvent = true;\n\t\tif ( $.datepicker._datepickerShowing ) {\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase 9: $.datepicker._hideDatepicker();\n\t\t\t\t\t\thandled = false;\n\t\t\t\t\t\tbreak; // hide on tab out\n\t\t\t\tcase 13: sel = $( \"td.\" + $.datepicker._dayOverClass + \":not(.\" +\n\t\t\t\t\t\t\t\t\t$.datepicker._currentClass + \")\", inst.dpDiv );\n\t\t\t\t\t\tif ( sel[ 0 ] ) {\n\t\t\t\t\t\t\t$.datepicker._selectDay( event.target, inst.selectedMonth, inst.selectedYear, sel[ 0 ] );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tonSelect = $.datepicker._get( inst, \"onSelect\" );\n\t\t\t\t\t\tif ( onSelect ) {\n\t\t\t\t\t\t\tdateStr = $.datepicker._formatDate( inst );\n\n\t\t\t\t\t\t\t// Trigger custom callback\n\t\t\t\t\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false; // don't submit the form\n\t\t\t\tcase 27: $.datepicker._hideDatepicker();\n\t\t\t\t\t\tbreak; // hide on escape\n\t\t\t\tcase 33: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // previous month/year on page up/+ ctrl\n\t\t\t\tcase 34: $.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\tbreak; // next month/year on page down/+ ctrl\n\t\t\t\tcase 35: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._clearDate( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // clear on ctrl or command +end\n\t\t\t\tcase 36: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._gotoToday( event.target );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // current on ctrl or command +home\n\t\t\t\tcase 37: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? +1 : -1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// -1 day on ctrl or command +left\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t-$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +left on Mac\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 38: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, -7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // -1 week on ctrl or command +up\n\t\t\t\tcase 39: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( isRTL ? -1 : +1 ), \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\n\t\t\t\t\t\t// +1 day on ctrl or command +right\n\t\t\t\t\t\tif ( event.originalEvent.altKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, ( event.ctrlKey ?\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepBigMonths\" ) :\n\t\t\t\t\t\t\t\t+$.datepicker._get( inst, \"stepMonths\" ) ), \"M\" );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// next month/year on alt +right\n\t\t\t\t\t\tbreak;\n\t\t\t\tcase 40: if ( event.ctrlKey || event.metaKey ) {\n\t\t\t\t\t\t\t$.datepicker._adjustDate( event.target, +7, \"D\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t\thandled = event.ctrlKey || event.metaKey;\n\t\t\t\t\t\tbreak; // +1 week on ctrl or command +down\n\t\t\t\tdefault: handled = false;\n\t\t\t}\n\t\t} else if ( event.keyCode === 36 && event.ctrlKey ) { // display the date picker on ctrl+home\n\t\t\t$.datepicker._showDatepicker( this );\n\t\t} else {\n\t\t\thandled = false;\n\t\t}\n\n\t\tif ( handled ) {\n\t\t\tevent.preventDefault();\n\t\t\tevent.stopPropagation();\n\t\t}\n\t},\n\n\t/* Filter entered characters - based on date format. */\n\t_doKeyPress: function( event ) {\n\t\tvar chars, chr,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( $.datepicker._get( inst, \"constrainInput\" ) ) {\n\t\t\tchars = $.datepicker._possibleChars( $.datepicker._get( inst, \"dateFormat\" ) );\n\t\t\tchr = String.fromCharCode( event.charCode == null ? event.keyCode : event.charCode );\n\t\t\treturn event.ctrlKey || event.metaKey || ( chr < \" \" || !chars || chars.indexOf( chr ) > -1 );\n\t\t}\n\t},\n\n\t/* Synchronise manual entry and field/alternate field. */\n\t_doKeyUp: function( event ) {\n\t\tvar date,\n\t\t\tinst = $.datepicker._getInst( event.target );\n\n\t\tif ( inst.input.val() !== inst.lastVal ) {\n\t\t\ttry {\n\t\t\t\tdate = $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t( inst.input ? inst.input.val() : null ),\n\t\t\t\t\t$.datepicker._getFormatConfig( inst ) );\n\n\t\t\t\tif ( date ) { // only if valid\n\t\t\t\t\t$.datepicker._setDateFromField( inst );\n\t\t\t\t\t$.datepicker._updateAlternate( inst );\n\t\t\t\t\t$.datepicker._updateDatepicker( inst );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( err ) {\n\t\t\t}\n\t\t}\n\t\treturn true;\n\t},\n\n\t/* Pop-up the date picker for a given input field.\n\t * If false returned from beforeShow event handler do not show.\n\t * @param  input  element - the input field attached to the date picker or\n\t *\t\t\t\t\tevent - if triggered by focus\n\t */\n\t_showDatepicker: function( input ) {\n\t\tinput = input.target || input;\n\t\tif ( input.nodeName.toLowerCase() !== \"input\" ) { // find from button/image trigger\n\t\t\tinput = $( \"input\", input.parentNode )[ 0 ];\n\t\t}\n\n\t\tif ( $.datepicker._isDisabledDatepicker( input ) || $.datepicker._lastInput === input ) { // already here\n\t\t\treturn;\n\t\t}\n\n\t\tvar inst, beforeShow, beforeShowSettings, isFixed,\n\t\t\toffset, showAnim, duration;\n\n\t\tinst = $.datepicker._getInst( input );\n\t\tif ( $.datepicker._curInst && $.datepicker._curInst !== inst ) {\n\t\t\t$.datepicker._curInst.dpDiv.stop( true, true );\n\t\t\tif ( inst && $.datepicker._datepickerShowing ) {\n\t\t\t\t$.datepicker._hideDatepicker( $.datepicker._curInst.input[ 0 ] );\n\t\t\t}\n\t\t}\n\n\t\tbeforeShow = $.datepicker._get( inst, \"beforeShow\" );\n\t\tbeforeShowSettings = beforeShow ? beforeShow.apply( input, [ input, inst ] ) : {};\n\t\tif ( beforeShowSettings === false ) {\n\t\t\treturn;\n\t\t}\n\t\tdatepicker_extendRemove( inst.settings, beforeShowSettings );\n\n\t\tinst.lastVal = null;\n\t\t$.datepicker._lastInput = input;\n\t\t$.datepicker._setDateFromField( inst );\n\n\t\tif ( $.datepicker._inDialog ) { // hide cursor\n\t\t\tinput.value = \"\";\n\t\t}\n\t\tif ( !$.datepicker._pos ) { // position below input\n\t\t\t$.datepicker._pos = $.datepicker._findPos( input );\n\t\t\t$.datepicker._pos[ 1 ] += input.offsetHeight; // add the height\n\t\t}\n\n\t\tisFixed = false;\n\t\t$( input ).parents().each( function() {\n\t\t\tisFixed |= $( this ).css( \"position\" ) === \"fixed\";\n\t\t\treturn !isFixed;\n\t\t} );\n\n\t\toffset = { left: $.datepicker._pos[ 0 ], top: $.datepicker._pos[ 1 ] };\n\t\t$.datepicker._pos = null;\n\n\t\t//to avoid flashes on Firefox\n\t\tinst.dpDiv.empty();\n\n\t\t// determine sizing offscreen\n\t\tinst.dpDiv.css( { position: \"absolute\", display: \"block\", top: \"-1000px\" } );\n\t\t$.datepicker._updateDatepicker( inst );\n\n\t\t// fix width for dynamic number of date pickers\n\t\t// and adjust position before showing\n\t\toffset = $.datepicker._checkOffset( inst, offset, isFixed );\n\t\tinst.dpDiv.css( { position: ( $.datepicker._inDialog && $.blockUI ?\n\t\t\t\"static\" : ( isFixed ? \"fixed\" : \"absolute\" ) ), display: \"none\",\n\t\t\tleft: offset.left + \"px\", top: offset.top + \"px\" } );\n\n\t\tif ( !inst.inline ) {\n\t\t\tshowAnim = $.datepicker._get( inst, \"showAnim\" );\n\t\t\tduration = $.datepicker._get( inst, \"duration\" );\n\t\t\tinst.dpDiv.css( \"z-index\", datepicker_getZindex( $( input ) ) + 1 );\n\t\t\t$.datepicker._datepickerShowing = true;\n\n\t\t\tif ( $.effects && $.effects.effect[ showAnim ] ) {\n\t\t\t\tinst.dpDiv.show( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ showAnim || \"show\" ]( showAnim ? duration : null );\n\t\t\t}\n\n\t\t\tif ( $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\t\tinst.input.trigger( \"focus\" );\n\t\t\t}\n\n\t\t\t$.datepicker._curInst = inst;\n\t\t}\n\t},\n\n\t/* Generate the date picker content. */\n\t_updateDatepicker: function( inst ) {\n\t\tthis.maxRows = 4; //Reset the max number of rows being displayed (see #7043)\n\t\tdatepicker_instActive = inst; // for delegate hover events\n\t\tinst.dpDiv.empty().append( this._generateHTML( inst ) );\n\t\tthis._attachHandlers( inst );\n\n\t\tvar origyearshtml,\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tcols = numMonths[ 1 ],\n\t\t\twidth = 17,\n\t\t\tactiveCell = inst.dpDiv.find( \".\" + this._dayOverClass + \" a\" );\n\n\t\tif ( activeCell.length > 0 ) {\n\t\t\tdatepicker_handleMouseover.apply( activeCell.get( 0 ) );\n\t\t}\n\n\t\tinst.dpDiv.removeClass( \"ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4\" ).width( \"\" );\n\t\tif ( cols > 1 ) {\n\t\t\tinst.dpDiv.addClass( \"ui-datepicker-multi-\" + cols ).css( \"width\", ( width * cols ) + \"em\" );\n\t\t}\n\t\tinst.dpDiv[ ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-multi\" );\n\t\tinst.dpDiv[ ( this._get( inst, \"isRTL\" ) ? \"add\" : \"remove\" ) +\n\t\t\t\"Class\" ]( \"ui-datepicker-rtl\" );\n\n\t\tif ( inst === $.datepicker._curInst && $.datepicker._datepickerShowing && $.datepicker._shouldFocusInput( inst ) ) {\n\t\t\tinst.input.trigger( \"focus\" );\n\t\t}\n\n\t\t// Deffered render of the years select (to avoid flashes on Firefox)\n\t\tif ( inst.yearshtml ) {\n\t\t\torigyearshtml = inst.yearshtml;\n\t\t\tsetTimeout( function() {\n\n\t\t\t\t//assure that inst.yearshtml didn't change.\n\t\t\t\tif ( origyearshtml === inst.yearshtml && inst.yearshtml ) {\n\t\t\t\t\tinst.dpDiv.find( \"select.ui-datepicker-year:first\" ).replaceWith( inst.yearshtml );\n\t\t\t\t}\n\t\t\t\torigyearshtml = inst.yearshtml = null;\n\t\t\t}, 0 );\n\t\t}\n\t},\n\n\t// #6694 - don't focus the input if it's already focused\n\t// this breaks the change event in IE\n\t// Support: IE and jQuery <1.9\n\t_shouldFocusInput: function( inst ) {\n\t\treturn inst.input && inst.input.is( \":visible\" ) && !inst.input.is( \":disabled\" ) && !inst.input.is( \":focus\" );\n\t},\n\n\t/* Check positioning to remain on screen. */\n\t_checkOffset: function( inst, offset, isFixed ) {\n\t\tvar dpWidth = inst.dpDiv.outerWidth(),\n\t\t\tdpHeight = inst.dpDiv.outerHeight(),\n\t\t\tinputWidth = inst.input ? inst.input.outerWidth() : 0,\n\t\t\tinputHeight = inst.input ? inst.input.outerHeight() : 0,\n\t\t\tviewWidth = document.documentElement.clientWidth + ( isFixed ? 0 : $( document ).scrollLeft() ),\n\t\t\tviewHeight = document.documentElement.clientHeight + ( isFixed ? 0 : $( document ).scrollTop() );\n\n\t\toffset.left -= ( this._get( inst, \"isRTL\" ) ? ( dpWidth - inputWidth ) : 0 );\n\t\toffset.left -= ( isFixed && offset.left === inst.input.offset().left ) ? $( document ).scrollLeft() : 0;\n\t\toffset.top -= ( isFixed && offset.top === ( inst.input.offset().top + inputHeight ) ) ? $( document ).scrollTop() : 0;\n\n\t\t// Now check if datepicker is showing outside window viewport - move to a better place if so.\n\t\toffset.left -= Math.min( offset.left, ( offset.left + dpWidth > viewWidth && viewWidth > dpWidth ) ?\n\t\t\tMath.abs( offset.left + dpWidth - viewWidth ) : 0 );\n\t\toffset.top -= Math.min( offset.top, ( offset.top + dpHeight > viewHeight && viewHeight > dpHeight ) ?\n\t\t\tMath.abs( dpHeight + inputHeight ) : 0 );\n\n\t\treturn offset;\n\t},\n\n\t/* Find an object's position on the screen. */\n\t_findPos: function( obj ) {\n\t\tvar position,\n\t\t\tinst = this._getInst( obj ),\n\t\t\tisRTL = this._get( inst, \"isRTL\" );\n\n\t\twhile ( obj && ( obj.type === \"hidden\" || obj.nodeType !== 1 || $.expr.filters.hidden( obj ) ) ) {\n\t\t\tobj = obj[ isRTL ? \"previousSibling\" : \"nextSibling\" ];\n\t\t}\n\n\t\tposition = $( obj ).offset();\n\t\treturn [ position.left, position.top ];\n\t},\n\n\t/* Hide the date picker from view.\n\t * @param  input  element - the input field attached to the date picker\n\t */\n\t_hideDatepicker: function( input ) {\n\t\tvar showAnim, duration, postProcess, onClose,\n\t\t\tinst = this._curInst;\n\n\t\tif ( !inst || ( input && inst !== $.data( input, \"datepicker\" ) ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._datepickerShowing ) {\n\t\t\tshowAnim = this._get( inst, \"showAnim\" );\n\t\t\tduration = this._get( inst, \"duration\" );\n\t\t\tpostProcess = function() {\n\t\t\t\t$.datepicker._tidyDialog( inst );\n\t\t\t};\n\n\t\t\t// DEPRECATED: after BC for 1.8.x $.effects[ showAnim ] is not needed\n\t\t\tif ( $.effects && ( $.effects.effect[ showAnim ] || $.effects[ showAnim ] ) ) {\n\t\t\t\tinst.dpDiv.hide( showAnim, $.datepicker._get( inst, \"showOptions\" ), duration, postProcess );\n\t\t\t} else {\n\t\t\t\tinst.dpDiv[ ( showAnim === \"slideDown\" ? \"slideUp\" :\n\t\t\t\t\t( showAnim === \"fadeIn\" ? \"fadeOut\" : \"hide\" ) ) ]( ( showAnim ? duration : null ), postProcess );\n\t\t\t}\n\n\t\t\tif ( !showAnim ) {\n\t\t\t\tpostProcess();\n\t\t\t}\n\t\t\tthis._datepickerShowing = false;\n\n\t\t\tonClose = this._get( inst, \"onClose\" );\n\t\t\tif ( onClose ) {\n\t\t\t\tonClose.apply( ( inst.input ? inst.input[ 0 ] : null ), [ ( inst.input ? inst.input.val() : \"\" ), inst ] );\n\t\t\t}\n\n\t\t\tthis._lastInput = null;\n\t\t\tif ( this._inDialog ) {\n\t\t\t\tthis._dialogInput.css( { position: \"absolute\", left: \"0\", top: \"-100px\" } );\n\t\t\t\tif ( $.blockUI ) {\n\t\t\t\t\t$.unblockUI();\n\t\t\t\t\t$( \"body\" ).append( this.dpDiv );\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._inDialog = false;\n\t\t}\n\t},\n\n\t/* Tidy up after a dialog display. */\n\t_tidyDialog: function( inst ) {\n\t\tinst.dpDiv.removeClass( this._dialogClass ).off( \".ui-datepicker-calendar\" );\n\t},\n\n\t/* Close date picker if clicked elsewhere. */\n\t_checkExternalClick: function( event ) {\n\t\tif ( !$.datepicker._curInst ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar $target = $( event.target ),\n\t\t\tinst = $.datepicker._getInst( $target[ 0 ] );\n\n\t\tif ( ( ( $target[ 0 ].id !== $.datepicker._mainDivId &&\n\t\t\t\t$target.parents( \"#\" + $.datepicker._mainDivId ).length === 0 &&\n\t\t\t\t!$target.hasClass( $.datepicker.markerClassName ) &&\n\t\t\t\t!$target.closest( \".\" + $.datepicker._triggerClass ).length &&\n\t\t\t\t$.datepicker._datepickerShowing && !( $.datepicker._inDialog && $.blockUI ) ) ) ||\n\t\t\t( $target.hasClass( $.datepicker.markerClassName ) && $.datepicker._curInst !== inst ) ) {\n\t\t\t\t$.datepicker._hideDatepicker();\n\t\t}\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustDate: function( id, offset, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\t\tthis._adjustInstDate( inst, offset +\n\t\t\t( period === \"M\" ? this._get( inst, \"showCurrentAtPos\" ) : 0 ), // undo positioning\n\t\t\tperiod );\n\t\tthis._updateDatepicker( inst );\n\t},\n\n\t/* Action for current link. */\n\t_gotoToday: function( id ) {\n\t\tvar date,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tif ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ) {\n\t\t\tinst.selectedDay = inst.currentDay;\n\t\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth;\n\t\t\tinst.drawYear = inst.selectedYear = inst.currentYear;\n\t\t} else {\n\t\t\tdate = new Date();\n\t\t\tinst.selectedDay = date.getDate();\n\t\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\t}\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a new month/year. */\n\t_selectMonthYear: function( id, select, period ) {\n\t\tvar target = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tinst[ \"selected\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\tinst[ \"draw\" + ( period === \"M\" ? \"Month\" : \"Year\" ) ] =\n\t\t\tparseInt( select.options[ select.selectedIndex ].value, 10 );\n\n\t\tthis._notifyChange( inst );\n\t\tthis._adjustDate( target );\n\t},\n\n\t/* Action for selecting a day. */\n\t_selectDay: function( id, month, year, td ) {\n\t\tvar inst,\n\t\t\ttarget = $( id );\n\n\t\tif ( $( td ).hasClass( this._unselectableClass ) || this._isDisabledDatepicker( target[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tinst = this._getInst( target[ 0 ] );\n\t\tinst.selectedDay = inst.currentDay = $( \"a\", td ).html();\n\t\tinst.selectedMonth = inst.currentMonth = month;\n\t\tinst.selectedYear = inst.currentYear = year;\n\t\tthis._selectDate( id, this._formatDate( inst,\n\t\t\tinst.currentDay, inst.currentMonth, inst.currentYear ) );\n\t},\n\n\t/* Erase the input field and hide the date picker. */\n\t_clearDate: function( id ) {\n\t\tvar target = $( id );\n\t\tthis._selectDate( target, \"\" );\n\t},\n\n\t/* Update the input field with the selected date. */\n\t_selectDate: function( id, dateStr ) {\n\t\tvar onSelect,\n\t\t\ttarget = $( id ),\n\t\t\tinst = this._getInst( target[ 0 ] );\n\n\t\tdateStr = ( dateStr != null ? dateStr : this._formatDate( inst ) );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( dateStr );\n\t\t}\n\t\tthis._updateAlternate( inst );\n\n\t\tonSelect = this._get( inst, \"onSelect\" );\n\t\tif ( onSelect ) {\n\t\t\tonSelect.apply( ( inst.input ? inst.input[ 0 ] : null ), [ dateStr, inst ] );  // trigger custom callback\n\t\t} else if ( inst.input ) {\n\t\t\tinst.input.trigger( \"change\" ); // fire the change event\n\t\t}\n\n\t\tif ( inst.inline ) {\n\t\t\tthis._updateDatepicker( inst );\n\t\t} else {\n\t\t\tthis._hideDatepicker();\n\t\t\tthis._lastInput = inst.input[ 0 ];\n\t\t\tif ( typeof( inst.input[ 0 ] ) !== \"object\" ) {\n\t\t\t\tinst.input.trigger( \"focus\" ); // restore focus\n\t\t\t}\n\t\t\tthis._lastInput = null;\n\t\t}\n\t},\n\n\t/* Update any alternate field to synchronise with the main field. */\n\t_updateAlternate: function( inst ) {\n\t\tvar altFormat, date, dateStr,\n\t\t\taltField = this._get( inst, \"altField\" );\n\n\t\tif ( altField ) { // update alternate field too\n\t\t\taltFormat = this._get( inst, \"altFormat\" ) || this._get( inst, \"dateFormat\" );\n\t\t\tdate = this._getDate( inst );\n\t\t\tdateStr = this.formatDate( altFormat, date, this._getFormatConfig( inst ) );\n\t\t\t$( altField ).val( dateStr );\n\t\t}\n\t},\n\n\t/* Set as beforeShowDay function to prevent selection of weekends.\n\t * @param  date  Date - the date to customise\n\t * @return [boolean, string] - is this date selectable?, what is its CSS class?\n\t */\n\tnoWeekends: function( date ) {\n\t\tvar day = date.getDay();\n\t\treturn [ ( day > 0 && day < 6 ), \"\" ];\n\t},\n\n\t/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.\n\t * @param  date  Date - the date to get the week for\n\t * @return  number - the number of the week within the year that contains this date\n\t */\n\tiso8601Week: function( date ) {\n\t\tvar time,\n\t\t\tcheckDate = new Date( date.getTime() );\n\n\t\t// Find Thursday of this week starting on Monday\n\t\tcheckDate.setDate( checkDate.getDate() + 4 - ( checkDate.getDay() || 7 ) );\n\n\t\ttime = checkDate.getTime();\n\t\tcheckDate.setMonth( 0 ); // Compare with Jan 1\n\t\tcheckDate.setDate( 1 );\n\t\treturn Math.floor( Math.round( ( time - checkDate ) / 86400000 ) / 7 ) + 1;\n\t},\n\n\t/* Parse a string value into a date object.\n\t * See formatDate below for the possible formats.\n\t *\n\t * @param  format string - the expected format of the date\n\t * @param  value string - the date in the above format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tshortYearCutoff  number - the cutoff year for determining the century (optional)\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  Date - the extracted date value or null if value is blank\n\t */\n\tparseDate: function( format, value, settings ) {\n\t\tif ( format == null || value == null ) {\n\t\t\tthrow \"Invalid arguments\";\n\t\t}\n\n\t\tvalue = ( typeof value === \"object\" ? value.toString() : value + \"\" );\n\t\tif ( value === \"\" ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar iFormat, dim, extra,\n\t\t\tiValue = 0,\n\t\t\tshortYearCutoffTemp = ( settings ? settings.shortYearCutoff : null ) || this._defaults.shortYearCutoff,\n\t\t\tshortYearCutoff = ( typeof shortYearCutoffTemp !== \"string\" ? shortYearCutoffTemp :\n\t\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoffTemp, 10 ) ),\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\t\t\tyear = -1,\n\t\t\tmonth = -1,\n\t\t\tday = -1,\n\t\t\tdoy = -1,\n\t\t\tliteral = false,\n\t\t\tdate,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Extract a number from the string value\n\t\t\tgetNumber = function( match ) {\n\t\t\t\tvar isDoubled = lookAhead( match ),\n\t\t\t\t\tsize = ( match === \"@\" ? 14 : ( match === \"!\" ? 20 :\n\t\t\t\t\t( match === \"y\" && isDoubled ? 4 : ( match === \"o\" ? 3 : 2 ) ) ) ),\n\t\t\t\t\tminSize = ( match === \"y\" ? size : 1 ),\n\t\t\t\t\tdigits = new RegExp( \"^\\\\d{\" + minSize + \",\" + size + \"}\" ),\n\t\t\t\t\tnum = value.substring( iValue ).match( digits );\n\t\t\t\tif ( !num ) {\n\t\t\t\t\tthrow \"Missing number at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue += num[ 0 ].length;\n\t\t\t\treturn parseInt( num[ 0 ], 10 );\n\t\t\t},\n\n\t\t\t// Extract a name from the string value and convert to an index\n\t\t\tgetName = function( match, shortNames, longNames ) {\n\t\t\t\tvar index = -1,\n\t\t\t\t\tnames = $.map( lookAhead( match ) ? longNames : shortNames, function( v, k ) {\n\t\t\t\t\t\treturn [ [ k, v ] ];\n\t\t\t\t\t} ).sort( function( a, b ) {\n\t\t\t\t\t\treturn -( a[ 1 ].length - b[ 1 ].length );\n\t\t\t\t\t} );\n\n\t\t\t\t$.each( names, function( i, pair ) {\n\t\t\t\t\tvar name = pair[ 1 ];\n\t\t\t\t\tif ( value.substr( iValue, name.length ).toLowerCase() === name.toLowerCase() ) {\n\t\t\t\t\t\tindex = pair[ 0 ];\n\t\t\t\t\t\tiValue += name.length;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t\tif ( index !== -1 ) {\n\t\t\t\t\treturn index + 1;\n\t\t\t\t} else {\n\t\t\t\t\tthrow \"Unknown name at position \" + iValue;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\t// Confirm that a literal character matches the string value\n\t\t\tcheckLiteral = function() {\n\t\t\t\tif ( value.charAt( iValue ) !== format.charAt( iFormat ) ) {\n\t\t\t\t\tthrow \"Unexpected literal at position \" + iValue;\n\t\t\t\t}\n\t\t\t\tiValue++;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\tday = getNumber( \"d\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\tgetName( \"D\", dayNamesShort, dayNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\tdoy = getNumber( \"o\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\tmonth = getNumber( \"m\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\tmonth = getName( \"M\", monthNamesShort, monthNames );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\tyear = getNumber( \"y\" );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\tdate = new Date( getNumber( \"@\" ) );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\tdate = new Date( ( getNumber( \"!\" ) - this._ticksTo1970 ) / 10000 );\n\t\t\t\t\t\tyear = date.getFullYear();\n\t\t\t\t\t\tmonth = date.getMonth() + 1;\n\t\t\t\t\t\tday = date.getDate();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tcheckLiteral();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( iValue < value.length ) {\n\t\t\textra = value.substr( iValue );\n\t\t\tif ( !/^\\s+/.test( extra ) ) {\n\t\t\t\tthrow \"Extra/unparsed characters found in date: \" + extra;\n\t\t\t}\n\t\t}\n\n\t\tif ( year === -1 ) {\n\t\t\tyear = new Date().getFullYear();\n\t\t} else if ( year < 100 ) {\n\t\t\tyear += new Date().getFullYear() - new Date().getFullYear() % 100 +\n\t\t\t\t( year <= shortYearCutoff ? 0 : -100 );\n\t\t}\n\n\t\tif ( doy > -1 ) {\n\t\t\tmonth = 1;\n\t\t\tday = doy;\n\t\t\tdo {\n\t\t\t\tdim = this._getDaysInMonth( year, month - 1 );\n\t\t\t\tif ( day <= dim ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tmonth++;\n\t\t\t\tday -= dim;\n\t\t\t} while ( true );\n\t\t}\n\n\t\tdate = this._daylightSavingAdjust( new Date( year, month - 1, day ) );\n\t\tif ( date.getFullYear() !== year || date.getMonth() + 1 !== month || date.getDate() !== day ) {\n\t\t\tthrow \"Invalid date\"; // E.g. 31/02/00\n\t\t}\n\t\treturn date;\n\t},\n\n\t/* Standard date formats. */\n\tATOM: \"yy-mm-dd\", // RFC 3339 (ISO 8601)\n\tCOOKIE: \"D, dd M yy\",\n\tISO_8601: \"yy-mm-dd\",\n\tRFC_822: \"D, d M y\",\n\tRFC_850: \"DD, dd-M-y\",\n\tRFC_1036: \"D, d M y\",\n\tRFC_1123: \"D, d M yy\",\n\tRFC_2822: \"D, d M yy\",\n\tRSS: \"D, d M y\", // RFC 822\n\tTICKS: \"!\",\n\tTIMESTAMP: \"@\",\n\tW3C: \"yy-mm-dd\", // ISO 8601\n\n\t_ticksTo1970: ( ( ( 1970 - 1 ) * 365 + Math.floor( 1970 / 4 ) - Math.floor( 1970 / 100 ) +\n\t\tMath.floor( 1970 / 400 ) ) * 24 * 60 * 60 * 10000000 ),\n\n\t/* Format a date object into a string value.\n\t * The format can be combinations of the following:\n\t * d  - day of month (no leading zero)\n\t * dd - day of month (two digit)\n\t * o  - day of year (no leading zeros)\n\t * oo - day of year (three digit)\n\t * D  - day name short\n\t * DD - day name long\n\t * m  - month of year (no leading zero)\n\t * mm - month of year (two digit)\n\t * M  - month name short\n\t * MM - month name long\n\t * y  - year (two digit)\n\t * yy - year (four digit)\n\t * @ - Unix timestamp (ms since 01/01/1970)\n\t * ! - Windows ticks (100ns since 01/01/0001)\n\t * \"...\" - literal text\n\t * '' - single quote\n\t *\n\t * @param  format string - the desired format of the date\n\t * @param  date Date - the date value to format\n\t * @param  settings Object - attributes include:\n\t *\t\t\t\t\tdayNamesShort\tstring[7] - abbreviated names of the days from Sunday (optional)\n\t *\t\t\t\t\tdayNames\t\tstring[7] - names of the days from Sunday (optional)\n\t *\t\t\t\t\tmonthNamesShort string[12] - abbreviated names of the months (optional)\n\t *\t\t\t\t\tmonthNames\t\tstring[12] - names of the months (optional)\n\t * @return  string - the date in the above format\n\t */\n\tformatDate: function( format, date, settings ) {\n\t\tif ( !date ) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tvar iFormat,\n\t\t\tdayNamesShort = ( settings ? settings.dayNamesShort : null ) || this._defaults.dayNamesShort,\n\t\t\tdayNames = ( settings ? settings.dayNames : null ) || this._defaults.dayNames,\n\t\t\tmonthNamesShort = ( settings ? settings.monthNamesShort : null ) || this._defaults.monthNamesShort,\n\t\t\tmonthNames = ( settings ? settings.monthNames : null ) || this._defaults.monthNames,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t},\n\n\t\t\t// Format a number, with leading zero if necessary\n\t\t\tformatNumber = function( match, value, len ) {\n\t\t\t\tvar num = \"\" + value;\n\t\t\t\tif ( lookAhead( match ) ) {\n\t\t\t\t\twhile ( num.length < len ) {\n\t\t\t\t\t\tnum = \"0\" + num;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn num;\n\t\t\t},\n\n\t\t\t// Format a name, short or long as requested\n\t\t\tformatName = function( match, value, shortNames, longNames ) {\n\t\t\t\treturn ( lookAhead( match ) ? longNames[ value ] : shortNames[ value ] );\n\t\t\t},\n\t\t\toutput = \"\",\n\t\t\tliteral = false;\n\n\t\tif ( date ) {\n\t\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\t\tif ( literal ) {\n\t\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\t\tliteral = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\t\tcase \"d\":\n\t\t\t\t\t\t\toutput += formatNumber( \"d\", date.getDate(), 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"D\":\n\t\t\t\t\t\t\toutput += formatName( \"D\", date.getDay(), dayNamesShort, dayNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"o\":\n\t\t\t\t\t\t\toutput += formatNumber( \"o\",\n\t\t\t\t\t\t\t\tMath.round( ( new Date( date.getFullYear(), date.getMonth(), date.getDate() ).getTime() - new Date( date.getFullYear(), 0, 0 ).getTime() ) / 86400000 ), 3 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"m\":\n\t\t\t\t\t\t\toutput += formatNumber( \"m\", date.getMonth() + 1, 2 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"M\":\n\t\t\t\t\t\t\toutput += formatName( \"M\", date.getMonth(), monthNamesShort, monthNames );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\":\n\t\t\t\t\t\t\toutput += ( lookAhead( \"y\" ) ? date.getFullYear() :\n\t\t\t\t\t\t\t\t( date.getFullYear() % 100 < 10 ? \"0\" : \"\" ) + date.getFullYear() % 100 );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"@\":\n\t\t\t\t\t\t\toutput += date.getTime();\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"!\":\n\t\t\t\t\t\t\toutput += date.getTime() * 10000 + this._ticksTo1970;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\t\toutput += \"'\";\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\toutput += format.charAt( iFormat );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn output;\n\t},\n\n\t/* Extract all possible characters from the date format. */\n\t_possibleChars: function( format ) {\n\t\tvar iFormat,\n\t\t\tchars = \"\",\n\t\t\tliteral = false,\n\n\t\t\t// Check whether a format character is doubled\n\t\t\tlookAhead = function( match ) {\n\t\t\t\tvar matches = ( iFormat + 1 < format.length && format.charAt( iFormat + 1 ) === match );\n\t\t\t\tif ( matches ) {\n\t\t\t\t\tiFormat++;\n\t\t\t\t}\n\t\t\t\treturn matches;\n\t\t\t};\n\n\t\tfor ( iFormat = 0; iFormat < format.length; iFormat++ ) {\n\t\t\tif ( literal ) {\n\t\t\t\tif ( format.charAt( iFormat ) === \"'\" && !lookAhead( \"'\" ) ) {\n\t\t\t\t\tliteral = false;\n\t\t\t\t} else {\n\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tswitch ( format.charAt( iFormat ) ) {\n\t\t\t\t\tcase \"d\": case \"m\": case \"y\": case \"@\":\n\t\t\t\t\t\tchars += \"0123456789\";\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"D\": case \"M\":\n\t\t\t\t\t\treturn null; // Accept anything\n\t\t\t\t\tcase \"'\":\n\t\t\t\t\t\tif ( lookAhead( \"'\" ) ) {\n\t\t\t\t\t\t\tchars += \"'\";\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tliteral = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tchars += format.charAt( iFormat );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chars;\n\t},\n\n\t/* Get a setting value, defaulting if necessary. */\n\t_get: function( inst, name ) {\n\t\treturn inst.settings[ name ] !== undefined ?\n\t\t\tinst.settings[ name ] : this._defaults[ name ];\n\t},\n\n\t/* Parse existing date and initialise date picker. */\n\t_setDateFromField: function( inst, noDefault ) {\n\t\tif ( inst.input.val() === inst.lastVal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar dateFormat = this._get( inst, \"dateFormat\" ),\n\t\t\tdates = inst.lastVal = inst.input ? inst.input.val() : null,\n\t\t\tdefaultDate = this._getDefaultDate( inst ),\n\t\t\tdate = defaultDate,\n\t\t\tsettings = this._getFormatConfig( inst );\n\n\t\ttry {\n\t\t\tdate = this.parseDate( dateFormat, dates, settings ) || defaultDate;\n\t\t} catch ( event ) {\n\t\t\tdates = ( noDefault ? \"\" : dates );\n\t\t}\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tinst.currentDay = ( dates ? date.getDate() : 0 );\n\t\tinst.currentMonth = ( dates ? date.getMonth() : 0 );\n\t\tinst.currentYear = ( dates ? date.getFullYear() : 0 );\n\t\tthis._adjustInstDate( inst );\n\t},\n\n\t/* Retrieve the default date shown on opening. */\n\t_getDefaultDate: function( inst ) {\n\t\treturn this._restrictMinMax( inst,\n\t\t\tthis._determineDate( inst, this._get( inst, \"defaultDate\" ), new Date() ) );\n\t},\n\n\t/* A date may be specified as an exact value or a relative one. */\n\t_determineDate: function( inst, date, defaultDate ) {\n\t\tvar offsetNumeric = function( offset ) {\n\t\t\t\tvar date = new Date();\n\t\t\t\tdate.setDate( date.getDate() + offset );\n\t\t\t\treturn date;\n\t\t\t},\n\t\t\toffsetString = function( offset ) {\n\t\t\t\ttry {\n\t\t\t\t\treturn $.datepicker.parseDate( $.datepicker._get( inst, \"dateFormat\" ),\n\t\t\t\t\t\toffset, $.datepicker._getFormatConfig( inst ) );\n\t\t\t\t}\n\t\t\t\tcatch ( e ) {\n\n\t\t\t\t\t// Ignore\n\t\t\t\t}\n\n\t\t\t\tvar date = ( offset.toLowerCase().match( /^c/ ) ?\n\t\t\t\t\t$.datepicker._getDate( inst ) : null ) || new Date(),\n\t\t\t\t\tyear = date.getFullYear(),\n\t\t\t\t\tmonth = date.getMonth(),\n\t\t\t\t\tday = date.getDate(),\n\t\t\t\t\tpattern = /([+\\-]?[0-9]+)\\s*(d|D|w|W|m|M|y|Y)?/g,\n\t\t\t\t\tmatches = pattern.exec( offset );\n\n\t\t\t\twhile ( matches ) {\n\t\t\t\t\tswitch ( matches[ 2 ] || \"d\" ) {\n\t\t\t\t\t\tcase \"d\" : case \"D\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ); break;\n\t\t\t\t\t\tcase \"w\" : case \"W\" :\n\t\t\t\t\t\t\tday += parseInt( matches[ 1 ], 10 ) * 7; break;\n\t\t\t\t\t\tcase \"m\" : case \"M\" :\n\t\t\t\t\t\t\tmonth += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"y\": case \"Y\" :\n\t\t\t\t\t\t\tyear += parseInt( matches[ 1 ], 10 );\n\t\t\t\t\t\t\tday = Math.min( day, $.datepicker._getDaysInMonth( year, month ) );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tmatches = pattern.exec( offset );\n\t\t\t\t}\n\t\t\t\treturn new Date( year, month, day );\n\t\t\t},\n\t\t\tnewDate = ( date == null || date === \"\" ? defaultDate : ( typeof date === \"string\" ? offsetString( date ) :\n\t\t\t\t( typeof date === \"number\" ? ( isNaN( date ) ? defaultDate : offsetNumeric( date ) ) : new Date( date.getTime() ) ) ) );\n\n\t\tnewDate = ( newDate && newDate.toString() === \"Invalid Date\" ? defaultDate : newDate );\n\t\tif ( newDate ) {\n\t\t\tnewDate.setHours( 0 );\n\t\t\tnewDate.setMinutes( 0 );\n\t\t\tnewDate.setSeconds( 0 );\n\t\t\tnewDate.setMilliseconds( 0 );\n\t\t}\n\t\treturn this._daylightSavingAdjust( newDate );\n\t},\n\n\t/* Handle switch to/from daylight saving.\n\t * Hours may be non-zero on daylight saving cut-over:\n\t * > 12 when midnight changeover, but then cannot generate\n\t * midnight datetime, so jump to 1AM, otherwise reset.\n\t * @param  date  (Date) the date to check\n\t * @return  (Date) the corrected date\n\t */\n\t_daylightSavingAdjust: function( date ) {\n\t\tif ( !date ) {\n\t\t\treturn null;\n\t\t}\n\t\tdate.setHours( date.getHours() > 12 ? date.getHours() + 2 : 0 );\n\t\treturn date;\n\t},\n\n\t/* Set the date(s) directly. */\n\t_setDate: function( inst, date, noChange ) {\n\t\tvar clear = !date,\n\t\t\torigMonth = inst.selectedMonth,\n\t\t\torigYear = inst.selectedYear,\n\t\t\tnewDate = this._restrictMinMax( inst, this._determineDate( inst, date, new Date() ) );\n\n\t\tinst.selectedDay = inst.currentDay = newDate.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = inst.currentMonth = newDate.getMonth();\n\t\tinst.drawYear = inst.selectedYear = inst.currentYear = newDate.getFullYear();\n\t\tif ( ( origMonth !== inst.selectedMonth || origYear !== inst.selectedYear ) && !noChange ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t\tthis._adjustInstDate( inst );\n\t\tif ( inst.input ) {\n\t\t\tinst.input.val( clear ? \"\" : this._formatDate( inst ) );\n\t\t}\n\t},\n\n\t/* Retrieve the date(s) directly. */\n\t_getDate: function( inst ) {\n\t\tvar startDate = ( !inst.currentYear || ( inst.input && inst.input.val() === \"\" ) ? null :\n\t\t\tthis._daylightSavingAdjust( new Date(\n\t\t\tinst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\t\treturn startDate;\n\t},\n\n\t/* Attach the onxxx handlers.  These are declared statically so\n\t * they work with static code transformers like Caja.\n\t */\n\t_attachHandlers: function( inst ) {\n\t\tvar stepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tid = \"#\" + inst.id.replace( /\\\\\\\\/g, \"\\\\\" );\n\t\tinst.dpDiv.find( \"[data-handler]\" ).map( function() {\n\t\t\tvar handler = {\n\t\t\t\tprev: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, -stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\tnext: function() {\n\t\t\t\t\t$.datepicker._adjustDate( id, +stepMonths, \"M\" );\n\t\t\t\t},\n\t\t\t\thide: function() {\n\t\t\t\t\t$.datepicker._hideDatepicker();\n\t\t\t\t},\n\t\t\t\ttoday: function() {\n\t\t\t\t\t$.datepicker._gotoToday( id );\n\t\t\t\t},\n\t\t\t\tselectDay: function() {\n\t\t\t\t\t$.datepicker._selectDay( id, +this.getAttribute( \"data-month\" ), +this.getAttribute( \"data-year\" ), this );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectMonth: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"M\" );\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t\tselectYear: function() {\n\t\t\t\t\t$.datepicker._selectMonthYear( id, this, \"Y\" );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t};\n\t\t\t$( this ).on( this.getAttribute( \"data-event\" ), handler[ this.getAttribute( \"data-handler\" ) ] );\n\t\t} );\n\t},\n\n\t/* Generate the HTML for the current state of the date picker. */\n\t_generateHTML: function( inst ) {\n\t\tvar maxDraw, prevText, prev, nextText, next, currentText, gotoDate,\n\t\t\tcontrols, buttonPanel, firstDay, showWeek, dayNames, dayNamesMin,\n\t\t\tmonthNames, monthNamesShort, beforeShowDay, showOtherMonths,\n\t\t\tselectOtherMonths, defaultDate, html, dow, row, group, col, selectedDate,\n\t\t\tcornerClass, calender, thead, day, daysInMonth, leadDays, curRows, numRows,\n\t\t\tprintDate, dRow, tbody, daySettings, otherMonth, unselectable,\n\t\t\ttempDate = new Date(),\n\t\t\ttoday = this._daylightSavingAdjust(\n\t\t\t\tnew Date( tempDate.getFullYear(), tempDate.getMonth(), tempDate.getDate() ) ), // clear time\n\t\t\tisRTL = this._get( inst, \"isRTL\" ),\n\t\t\tshowButtonPanel = this._get( inst, \"showButtonPanel\" ),\n\t\t\thideIfNoPrevNext = this._get( inst, \"hideIfNoPrevNext\" ),\n\t\t\tnavigationAsDateFormat = this._get( inst, \"navigationAsDateFormat\" ),\n\t\t\tnumMonths = this._getNumberOfMonths( inst ),\n\t\t\tshowCurrentAtPos = this._get( inst, \"showCurrentAtPos\" ),\n\t\t\tstepMonths = this._get( inst, \"stepMonths\" ),\n\t\t\tisMultiMonth = ( numMonths[ 0 ] !== 1 || numMonths[ 1 ] !== 1 ),\n\t\t\tcurrentDate = this._daylightSavingAdjust( ( !inst.currentDay ? new Date( 9999, 9, 9 ) :\n\t\t\t\tnew Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) ),\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tdrawMonth = inst.drawMonth - showCurrentAtPos,\n\t\t\tdrawYear = inst.drawYear;\n\n\t\tif ( drawMonth < 0 ) {\n\t\t\tdrawMonth += 12;\n\t\t\tdrawYear--;\n\t\t}\n\t\tif ( maxDate ) {\n\t\t\tmaxDraw = this._daylightSavingAdjust( new Date( maxDate.getFullYear(),\n\t\t\t\tmaxDate.getMonth() - ( numMonths[ 0 ] * numMonths[ 1 ] ) + 1, maxDate.getDate() ) );\n\t\t\tmaxDraw = ( minDate && maxDraw < minDate ? minDate : maxDraw );\n\t\t\twhile ( this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 ) ) > maxDraw ) {\n\t\t\t\tdrawMonth--;\n\t\t\t\tif ( drawMonth < 0 ) {\n\t\t\t\t\tdrawMonth = 11;\n\t\t\t\t\tdrawYear--;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tinst.drawMonth = drawMonth;\n\t\tinst.drawYear = drawYear;\n\n\t\tprevText = this._get( inst, \"prevText\" );\n\t\tprevText = ( !navigationAsDateFormat ? prevText : this.formatDate( prevText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth - stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tprev = ( this._canAdjustMonth( inst, -1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-prev ui-corner-all' data-handler='prev' data-event='click'\" +\n\t\t\t\" title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-prev ui-corner-all ui-state-disabled' title='\" + prevText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"e\" : \"w\" ) + \"'>\" + prevText + \"</span></a>\" ) );\n\n\t\tnextText = this._get( inst, \"nextText\" );\n\t\tnextText = ( !navigationAsDateFormat ? nextText : this.formatDate( nextText,\n\t\t\tthis._daylightSavingAdjust( new Date( drawYear, drawMonth + stepMonths, 1 ) ),\n\t\t\tthis._getFormatConfig( inst ) ) );\n\n\t\tnext = ( this._canAdjustMonth( inst, +1, drawYear, drawMonth ) ?\n\t\t\t\"<a class='ui-datepicker-next ui-corner-all' data-handler='next' data-event='click'\" +\n\t\t\t\" title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" :\n\t\t\t( hideIfNoPrevNext ? \"\" : \"<a class='ui-datepicker-next ui-corner-all ui-state-disabled' title='\" + nextText + \"'><span class='ui-icon ui-icon-circle-triangle-\" + ( isRTL ? \"w\" : \"e\" ) + \"'>\" + nextText + \"</span></a>\" ) );\n\n\t\tcurrentText = this._get( inst, \"currentText\" );\n\t\tgotoDate = ( this._get( inst, \"gotoCurrent\" ) && inst.currentDay ? currentDate : today );\n\t\tcurrentText = ( !navigationAsDateFormat ? currentText :\n\t\t\tthis.formatDate( currentText, gotoDate, this._getFormatConfig( inst ) ) );\n\n\t\tcontrols = ( !inst.inline ? \"<button type='button' class='ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all' data-handler='hide' data-event='click'>\" +\n\t\t\tthis._get( inst, \"closeText\" ) + \"</button>\" : \"\" );\n\n\t\tbuttonPanel = ( showButtonPanel ) ? \"<div class='ui-datepicker-buttonpane ui-widget-content'>\" + ( isRTL ? controls : \"\" ) +\n\t\t\t( this._isInRange( inst, gotoDate ) ? \"<button type='button' class='ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all' data-handler='today' data-event='click'\" +\n\t\t\t\">\" + currentText + \"</button>\" : \"\" ) + ( isRTL ? \"\" : controls ) + \"</div>\" : \"\";\n\n\t\tfirstDay = parseInt( this._get( inst, \"firstDay\" ), 10 );\n\t\tfirstDay = ( isNaN( firstDay ) ? 0 : firstDay );\n\n\t\tshowWeek = this._get( inst, \"showWeek\" );\n\t\tdayNames = this._get( inst, \"dayNames\" );\n\t\tdayNamesMin = this._get( inst, \"dayNamesMin\" );\n\t\tmonthNames = this._get( inst, \"monthNames\" );\n\t\tmonthNamesShort = this._get( inst, \"monthNamesShort\" );\n\t\tbeforeShowDay = this._get( inst, \"beforeShowDay\" );\n\t\tshowOtherMonths = this._get( inst, \"showOtherMonths\" );\n\t\tselectOtherMonths = this._get( inst, \"selectOtherMonths\" );\n\t\tdefaultDate = this._getDefaultDate( inst );\n\t\thtml = \"\";\n\n\t\tfor ( row = 0; row < numMonths[ 0 ]; row++ ) {\n\t\t\tgroup = \"\";\n\t\t\tthis.maxRows = 4;\n\t\t\tfor ( col = 0; col < numMonths[ 1 ]; col++ ) {\n\t\t\t\tselectedDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, inst.selectedDay ) );\n\t\t\t\tcornerClass = \" ui-corner-all\";\n\t\t\t\tcalender = \"\";\n\t\t\t\tif ( isMultiMonth ) {\n\t\t\t\t\tcalender += \"<div class='ui-datepicker-group\";\n\t\t\t\t\tif ( numMonths[ 1 ] > 1 ) {\n\t\t\t\t\t\tswitch ( col ) {\n\t\t\t\t\t\t\tcase 0: calender += \" ui-datepicker-group-first\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"right\" : \"left\" ); break;\n\t\t\t\t\t\t\tcase numMonths[ 1 ] - 1: calender += \" ui-datepicker-group-last\";\n\t\t\t\t\t\t\t\tcornerClass = \" ui-corner-\" + ( isRTL ? \"left\" : \"right\" ); break;\n\t\t\t\t\t\t\tdefault: calender += \" ui-datepicker-group-middle\"; cornerClass = \"\"; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcalender += \"'>\";\n\t\t\t\t}\n\t\t\t\tcalender += \"<div class='ui-datepicker-header ui-widget-header ui-helper-clearfix\" + cornerClass + \"'>\" +\n\t\t\t\t\t( /all|left/.test( cornerClass ) && row === 0 ? ( isRTL ? next : prev ) : \"\" ) +\n\t\t\t\t\t( /all|right/.test( cornerClass ) && row === 0 ? ( isRTL ? prev : next ) : \"\" ) +\n\t\t\t\t\tthis._generateMonthYearHeader( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\t\t\trow > 0 || col > 0, monthNames, monthNamesShort ) + // draw month headers\n\t\t\t\t\t\"</div><table class='ui-datepicker-calendar'><thead>\" +\n\t\t\t\t\t\"<tr>\";\n\t\t\t\tthead = ( showWeek ? \"<th class='ui-datepicker-week-col'>\" + this._get( inst, \"weekHeader\" ) + \"</th>\" : \"\" );\n\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // days of the week\n\t\t\t\t\tday = ( dow + firstDay ) % 7;\n\t\t\t\t\tthead += \"<th scope='col'\" + ( ( dow + firstDay + 6 ) % 7 >= 5 ? \" class='ui-datepicker-week-end'\" : \"\" ) + \">\" +\n\t\t\t\t\t\t\"<span title='\" + dayNames[ day ] + \"'>\" + dayNamesMin[ day ] + \"</span></th>\";\n\t\t\t\t}\n\t\t\t\tcalender += thead + \"</tr></thead><tbody>\";\n\t\t\t\tdaysInMonth = this._getDaysInMonth( drawYear, drawMonth );\n\t\t\t\tif ( drawYear === inst.selectedYear && drawMonth === inst.selectedMonth ) {\n\t\t\t\t\tinst.selectedDay = Math.min( inst.selectedDay, daysInMonth );\n\t\t\t\t}\n\t\t\t\tleadDays = ( this._getFirstDayOfMonth( drawYear, drawMonth ) - firstDay + 7 ) % 7;\n\t\t\t\tcurRows = Math.ceil( ( leadDays + daysInMonth ) / 7 ); // calculate the number of rows to generate\n\t\t\t\tnumRows = ( isMultiMonth ? this.maxRows > curRows ? this.maxRows : curRows : curRows ); //If multiple months, use the higher number of rows (see #7043)\n\t\t\t\tthis.maxRows = numRows;\n\t\t\t\tprintDate = this._daylightSavingAdjust( new Date( drawYear, drawMonth, 1 - leadDays ) );\n\t\t\t\tfor ( dRow = 0; dRow < numRows; dRow++ ) { // create date picker rows\n\t\t\t\t\tcalender += \"<tr>\";\n\t\t\t\t\ttbody = ( !showWeek ? \"\" : \"<td class='ui-datepicker-week-col'>\" +\n\t\t\t\t\t\tthis._get( inst, \"calculateWeek\" )( printDate ) + \"</td>\" );\n\t\t\t\t\tfor ( dow = 0; dow < 7; dow++ ) { // create date picker days\n\t\t\t\t\t\tdaySettings = ( beforeShowDay ?\n\t\t\t\t\t\t\tbeforeShowDay.apply( ( inst.input ? inst.input[ 0 ] : null ), [ printDate ] ) : [ true, \"\" ] );\n\t\t\t\t\t\totherMonth = ( printDate.getMonth() !== drawMonth );\n\t\t\t\t\t\tunselectable = ( otherMonth && !selectOtherMonths ) || !daySettings[ 0 ] ||\n\t\t\t\t\t\t\t( minDate && printDate < minDate ) || ( maxDate && printDate > maxDate );\n\t\t\t\t\t\ttbody += \"<td class='\" +\n\t\t\t\t\t\t\t( ( dow + firstDay + 6 ) % 7 >= 5 ? \" ui-datepicker-week-end\" : \"\" ) + // highlight weekends\n\t\t\t\t\t\t\t( otherMonth ? \" ui-datepicker-other-month\" : \"\" ) + // highlight days from other months\n\t\t\t\t\t\t\t( ( printDate.getTime() === selectedDate.getTime() && drawMonth === inst.selectedMonth && inst._keyEvent ) || // user pressed key\n\t\t\t\t\t\t\t( defaultDate.getTime() === printDate.getTime() && defaultDate.getTime() === selectedDate.getTime() ) ?\n\n\t\t\t\t\t\t\t// or defaultDate is current printedDate and defaultDate is selectedDate\n\t\t\t\t\t\t\t\" \" + this._dayOverClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( unselectable ? \" \" + this._unselectableClass + \" ui-state-disabled\" : \"\" ) +  // highlight unselectable days\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"\" : \" \" + daySettings[ 1 ] + // highlight custom dates\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" \" + this._currentClass : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-datepicker-today\" : \"\" ) ) + \"'\" + // highlight today (if different)\n\t\t\t\t\t\t\t( ( !otherMonth || showOtherMonths ) && daySettings[ 2 ] ? \" title='\" + daySettings[ 2 ].replace( /'/g, \"&#39;\" ) + \"'\" : \"\" ) + // cell title\n\t\t\t\t\t\t\t( unselectable ? \"\" : \" data-handler='selectDay' data-event='click' data-month='\" + printDate.getMonth() + \"' data-year='\" + printDate.getFullYear() + \"'\" ) + \">\" + // actions\n\t\t\t\t\t\t\t( otherMonth && !showOtherMonths ? \"&#xa0;\" : // display for other months\n\t\t\t\t\t\t\t( unselectable ? \"<span class='ui-state-default'>\" + printDate.getDate() + \"</span>\" : \"<a class='ui-state-default\" +\n\t\t\t\t\t\t\t( printDate.getTime() === today.getTime() ? \" ui-state-highlight\" : \"\" ) +\n\t\t\t\t\t\t\t( printDate.getTime() === currentDate.getTime() ? \" ui-state-active\" : \"\" ) + // highlight selected day\n\t\t\t\t\t\t\t( otherMonth ? \" ui-priority-secondary\" : \"\" ) + // distinguish dates from other months\n\t\t\t\t\t\t\t\"' href='#'>\" + printDate.getDate() + \"</a>\" ) ) + \"</td>\"; // display selectable date\n\t\t\t\t\t\tprintDate.setDate( printDate.getDate() + 1 );\n\t\t\t\t\t\tprintDate = this._daylightSavingAdjust( printDate );\n\t\t\t\t\t}\n\t\t\t\t\tcalender += tbody + \"</tr>\";\n\t\t\t\t}\n\t\t\t\tdrawMonth++;\n\t\t\t\tif ( drawMonth > 11 ) {\n\t\t\t\t\tdrawMonth = 0;\n\t\t\t\t\tdrawYear++;\n\t\t\t\t}\n\t\t\t\tcalender += \"</tbody></table>\" + ( isMultiMonth ? \"</div>\" +\n\t\t\t\t\t\t\t( ( numMonths[ 0 ] > 0 && col === numMonths[ 1 ] - 1 ) ? \"<div class='ui-datepicker-row-break'></div>\" : \"\" ) : \"\" );\n\t\t\t\tgroup += calender;\n\t\t\t}\n\t\t\thtml += group;\n\t\t}\n\t\thtml += buttonPanel;\n\t\tinst._keyEvent = false;\n\t\treturn html;\n\t},\n\n\t/* Generate the month and year header. */\n\t_generateMonthYearHeader: function( inst, drawMonth, drawYear, minDate, maxDate,\n\t\t\tsecondary, monthNames, monthNamesShort ) {\n\n\t\tvar inMinYear, inMaxYear, month, years, thisYear, determineYear, year, endYear,\n\t\t\tchangeMonth = this._get( inst, \"changeMonth\" ),\n\t\t\tchangeYear = this._get( inst, \"changeYear\" ),\n\t\t\tshowMonthAfterYear = this._get( inst, \"showMonthAfterYear\" ),\n\t\t\thtml = \"<div class='ui-datepicker-title'>\",\n\t\t\tmonthHtml = \"\";\n\n\t\t// Month selection\n\t\tif ( secondary || !changeMonth ) {\n\t\t\tmonthHtml += \"<span class='ui-datepicker-month'>\" + monthNames[ drawMonth ] + \"</span>\";\n\t\t} else {\n\t\t\tinMinYear = ( minDate && minDate.getFullYear() === drawYear );\n\t\t\tinMaxYear = ( maxDate && maxDate.getFullYear() === drawYear );\n\t\t\tmonthHtml += \"<select class='ui-datepicker-month' data-handler='selectMonth' data-event='change'>\";\n\t\t\tfor ( month = 0; month < 12; month++ ) {\n\t\t\t\tif ( ( !inMinYear || month >= minDate.getMonth() ) && ( !inMaxYear || month <= maxDate.getMonth() ) ) {\n\t\t\t\t\tmonthHtml += \"<option value='\" + month + \"'\" +\n\t\t\t\t\t\t( month === drawMonth ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + monthNamesShort[ month ] + \"</option>\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tmonthHtml += \"</select>\";\n\t\t}\n\n\t\tif ( !showMonthAfterYear ) {\n\t\t\thtml += monthHtml + ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" );\n\t\t}\n\n\t\t// Year selection\n\t\tif ( !inst.yearshtml ) {\n\t\t\tinst.yearshtml = \"\";\n\t\t\tif ( secondary || !changeYear ) {\n\t\t\t\thtml += \"<span class='ui-datepicker-year'>\" + drawYear + \"</span>\";\n\t\t\t} else {\n\n\t\t\t\t// determine range of years to display\n\t\t\t\tyears = this._get( inst, \"yearRange\" ).split( \":\" );\n\t\t\t\tthisYear = new Date().getFullYear();\n\t\t\t\tdetermineYear = function( value ) {\n\t\t\t\t\tvar year = ( value.match( /c[+\\-].*/ ) ? drawYear + parseInt( value.substring( 1 ), 10 ) :\n\t\t\t\t\t\t( value.match( /[+\\-].*/ ) ? thisYear + parseInt( value, 10 ) :\n\t\t\t\t\t\tparseInt( value, 10 ) ) );\n\t\t\t\t\treturn ( isNaN( year ) ? thisYear : year );\n\t\t\t\t};\n\t\t\t\tyear = determineYear( years[ 0 ] );\n\t\t\t\tendYear = Math.max( year, determineYear( years[ 1 ] || \"\" ) );\n\t\t\t\tyear = ( minDate ? Math.max( year, minDate.getFullYear() ) : year );\n\t\t\t\tendYear = ( maxDate ? Math.min( endYear, maxDate.getFullYear() ) : endYear );\n\t\t\t\tinst.yearshtml += \"<select class='ui-datepicker-year' data-handler='selectYear' data-event='change'>\";\n\t\t\t\tfor ( ; year <= endYear; year++ ) {\n\t\t\t\t\tinst.yearshtml += \"<option value='\" + year + \"'\" +\n\t\t\t\t\t\t( year === drawYear ? \" selected='selected'\" : \"\" ) +\n\t\t\t\t\t\t\">\" + year + \"</option>\";\n\t\t\t\t}\n\t\t\t\tinst.yearshtml += \"</select>\";\n\n\t\t\t\thtml += inst.yearshtml;\n\t\t\t\tinst.yearshtml = null;\n\t\t\t}\n\t\t}\n\n\t\thtml += this._get( inst, \"yearSuffix\" );\n\t\tif ( showMonthAfterYear ) {\n\t\t\thtml += ( secondary || !( changeMonth && changeYear ) ? \"&#xa0;\" : \"\" ) + monthHtml;\n\t\t}\n\t\thtml += \"</div>\"; // Close datepicker_header\n\t\treturn html;\n\t},\n\n\t/* Adjust one of the date sub-fields. */\n\t_adjustInstDate: function( inst, offset, period ) {\n\t\tvar year = inst.selectedYear + ( period === \"Y\" ? offset : 0 ),\n\t\t\tmonth = inst.selectedMonth + ( period === \"M\" ? offset : 0 ),\n\t\t\tday = Math.min( inst.selectedDay, this._getDaysInMonth( year, month ) ) + ( period === \"D\" ? offset : 0 ),\n\t\t\tdate = this._restrictMinMax( inst, this._daylightSavingAdjust( new Date( year, month, day ) ) );\n\n\t\tinst.selectedDay = date.getDate();\n\t\tinst.drawMonth = inst.selectedMonth = date.getMonth();\n\t\tinst.drawYear = inst.selectedYear = date.getFullYear();\n\t\tif ( period === \"M\" || period === \"Y\" ) {\n\t\t\tthis._notifyChange( inst );\n\t\t}\n\t},\n\n\t/* Ensure a date is within any min/max bounds. */\n\t_restrictMinMax: function( inst, date ) {\n\t\tvar minDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tnewDate = ( minDate && date < minDate ? minDate : date );\n\t\treturn ( maxDate && newDate > maxDate ? maxDate : newDate );\n\t},\n\n\t/* Notify change of month/year. */\n\t_notifyChange: function( inst ) {\n\t\tvar onChange = this._get( inst, \"onChangeMonthYear\" );\n\t\tif ( onChange ) {\n\t\t\tonChange.apply( ( inst.input ? inst.input[ 0 ] : null ),\n\t\t\t\t[ inst.selectedYear, inst.selectedMonth + 1, inst ] );\n\t\t}\n\t},\n\n\t/* Determine the number of months to show. */\n\t_getNumberOfMonths: function( inst ) {\n\t\tvar numMonths = this._get( inst, \"numberOfMonths\" );\n\t\treturn ( numMonths == null ? [ 1, 1 ] : ( typeof numMonths === \"number\" ? [ 1, numMonths ] : numMonths ) );\n\t},\n\n\t/* Determine the current maximum date - ensure no time components are set. */\n\t_getMinMaxDate: function( inst, minMax ) {\n\t\treturn this._determineDate( inst, this._get( inst, minMax + \"Date\" ), null );\n\t},\n\n\t/* Find the number of days in a given month. */\n\t_getDaysInMonth: function( year, month ) {\n\t\treturn 32 - this._daylightSavingAdjust( new Date( year, month, 32 ) ).getDate();\n\t},\n\n\t/* Find the day of the week of the first of a month. */\n\t_getFirstDayOfMonth: function( year, month ) {\n\t\treturn new Date( year, month, 1 ).getDay();\n\t},\n\n\t/* Determines if we should allow a \"next/prev\" month display change. */\n\t_canAdjustMonth: function( inst, offset, curYear, curMonth ) {\n\t\tvar numMonths = this._getNumberOfMonths( inst ),\n\t\t\tdate = this._daylightSavingAdjust( new Date( curYear,\n\t\t\tcurMonth + ( offset < 0 ? offset : numMonths[ 0 ] * numMonths[ 1 ] ), 1 ) );\n\n\t\tif ( offset < 0 ) {\n\t\t\tdate.setDate( this._getDaysInMonth( date.getFullYear(), date.getMonth() ) );\n\t\t}\n\t\treturn this._isInRange( inst, date );\n\t},\n\n\t/* Is the given date in the accepted range? */\n\t_isInRange: function( inst, date ) {\n\t\tvar yearSplit, currentYear,\n\t\t\tminDate = this._getMinMaxDate( inst, \"min\" ),\n\t\t\tmaxDate = this._getMinMaxDate( inst, \"max\" ),\n\t\t\tminYear = null,\n\t\t\tmaxYear = null,\n\t\t\tyears = this._get( inst, \"yearRange\" );\n\t\t\tif ( years ) {\n\t\t\t\tyearSplit = years.split( \":\" );\n\t\t\t\tcurrentYear = new Date().getFullYear();\n\t\t\t\tminYear = parseInt( yearSplit[ 0 ], 10 );\n\t\t\t\tmaxYear = parseInt( yearSplit[ 1 ], 10 );\n\t\t\t\tif ( yearSplit[ 0 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tminYear += currentYear;\n\t\t\t\t}\n\t\t\t\tif ( yearSplit[ 1 ].match( /[+\\-].*/ ) ) {\n\t\t\t\t\tmaxYear += currentYear;\n\t\t\t\t}\n\t\t\t}\n\n\t\treturn ( ( !minDate || date.getTime() >= minDate.getTime() ) &&\n\t\t\t( !maxDate || date.getTime() <= maxDate.getTime() ) &&\n\t\t\t( !minYear || date.getFullYear() >= minYear ) &&\n\t\t\t( !maxYear || date.getFullYear() <= maxYear ) );\n\t},\n\n\t/* Provide the configuration settings for formatting/parsing. */\n\t_getFormatConfig: function( inst ) {\n\t\tvar shortYearCutoff = this._get( inst, \"shortYearCutoff\" );\n\t\tshortYearCutoff = ( typeof shortYearCutoff !== \"string\" ? shortYearCutoff :\n\t\t\tnew Date().getFullYear() % 100 + parseInt( shortYearCutoff, 10 ) );\n\t\treturn { shortYearCutoff: shortYearCutoff,\n\t\t\tdayNamesShort: this._get( inst, \"dayNamesShort\" ), dayNames: this._get( inst, \"dayNames\" ),\n\t\t\tmonthNamesShort: this._get( inst, \"monthNamesShort\" ), monthNames: this._get( inst, \"monthNames\" ) };\n\t},\n\n\t/* Format the given date for display. */\n\t_formatDate: function( inst, day, month, year ) {\n\t\tif ( !day ) {\n\t\t\tinst.currentDay = inst.selectedDay;\n\t\t\tinst.currentMonth = inst.selectedMonth;\n\t\t\tinst.currentYear = inst.selectedYear;\n\t\t}\n\t\tvar date = ( day ? ( typeof day === \"object\" ? day :\n\t\t\tthis._daylightSavingAdjust( new Date( year, month, day ) ) ) :\n\t\t\tthis._daylightSavingAdjust( new Date( inst.currentYear, inst.currentMonth, inst.currentDay ) ) );\n\t\treturn this.formatDate( this._get( inst, \"dateFormat\" ), date, this._getFormatConfig( inst ) );\n\t}\n} );\n\n/*\n * Bind hover events for datepicker elements.\n * Done via delegate so the binding only occurs once in the lifetime of the parent div.\n * Global datepicker_instActive, set by _updateDatepicker allows the handlers to find their way back to the active picker.\n */\nfunction datepicker_bindHover( dpDiv ) {\n\tvar selector = \"button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a\";\n\treturn dpDiv.on( \"mouseout\", selector, function() {\n\t\t\t$( this ).removeClass( \"ui-state-hover\" );\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-prev-hover\" );\n\t\t\t}\n\t\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t\t$( this ).removeClass( \"ui-datepicker-next-hover\" );\n\t\t\t}\n\t\t} )\n\t\t.on( \"mouseover\", selector, datepicker_handleMouseover );\n}\n\nfunction datepicker_handleMouseover() {\n\tif ( !$.datepicker._isDisabledDatepicker( datepicker_instActive.inline ? datepicker_instActive.dpDiv.parent()[ 0 ] : datepicker_instActive.input[ 0 ] ) ) {\n\t\t$( this ).parents( \".ui-datepicker-calendar\" ).find( \"a\" ).removeClass( \"ui-state-hover\" );\n\t\t$( this ).addClass( \"ui-state-hover\" );\n\t\tif ( this.className.indexOf( \"ui-datepicker-prev\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-prev-hover\" );\n\t\t}\n\t\tif ( this.className.indexOf( \"ui-datepicker-next\" ) !== -1 ) {\n\t\t\t$( this ).addClass( \"ui-datepicker-next-hover\" );\n\t\t}\n\t}\n}\n\n/* jQuery extend now ignores nulls! */\nfunction datepicker_extendRemove( target, props ) {\n\t$.extend( target, props );\n\tfor ( var name in props ) {\n\t\tif ( props[ name ] == null ) {\n\t\t\ttarget[ name ] = props[ name ];\n\t\t}\n\t}\n\treturn target;\n}\n\n/* Invoke the datepicker functionality.\n   @param  options  string - a command, optionally followed by additional parameters or\n\t\t\t\t\tObject - settings for attaching new datepicker functionality\n   @return  jQuery object */\n$.fn.datepicker = function( options ) {\n\n\t/* Verify an empty collection wasn't passed - Fixes #6976 */\n\tif ( !this.length ) {\n\t\treturn this;\n\t}\n\n\t/* Initialise the date picker. */\n\tif ( !$.datepicker.initialized ) {\n\t\t$( document ).on( \"mousedown\", $.datepicker._checkExternalClick );\n\t\t$.datepicker.initialized = true;\n\t}\n\n\t/* Append datepicker main container to body if not exist. */\n\tif ( $( \"#\" + $.datepicker._mainDivId ).length === 0 ) {\n\t\t$( \"body\" ).append( $.datepicker.dpDiv );\n\t}\n\n\tvar otherArgs = Array.prototype.slice.call( arguments, 1 );\n\tif ( typeof options === \"string\" && ( options === \"isDisabled\" || options === \"getDate\" || options === \"widget\" ) ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\tif ( options === \"option\" && arguments.length === 2 && typeof arguments[ 1 ] === \"string\" ) {\n\t\treturn $.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\tapply( $.datepicker, [ this[ 0 ] ].concat( otherArgs ) );\n\t}\n\treturn this.each( function() {\n\t\ttypeof options === \"string\" ?\n\t\t\t$.datepicker[ \"_\" + options + \"Datepicker\" ].\n\t\t\t\tapply( $.datepicker, [ this ].concat( otherArgs ) ) :\n\t\t\t$.datepicker._attachDatepicker( this, options );\n\t} );\n};\n\n$.datepicker = new Datepicker(); // singleton instance\n$.datepicker.initialized = false;\n$.datepicker.uuid = new Date().getTime();\n$.datepicker.version = \"1.12.1\";\n\nvar widgetsDatepicker = $.datepicker;\n\n\n\n\n// This file is deprecated\nvar ie = $.ui.ie = !!/msie [\\w.]+/.exec( navigator.userAgent.toLowerCase() );\n\n/*!\n * jQuery UI Mouse 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Mouse\n//>>group: Widgets\n//>>description: Abstracts mouse-based interactions to assist in creating certain widgets.\n//>>docs: http://api.jqueryui.com/mouse/\n\n\n\nvar mouseHandled = false;\n$( document ).on( \"mouseup\", function() {\n\tmouseHandled = false;\n} );\n\nvar widgetsMouse = $.widget( \"ui.mouse\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tcancel: \"input, textarea, button, select, option\",\n\t\tdistance: 1,\n\t\tdelay: 0\n\t},\n\t_mouseInit: function() {\n\t\tvar that = this;\n\n\t\tthis.element\n\t\t\t.on( \"mousedown.\" + this.widgetName, function( event ) {\n\t\t\t\treturn that._mouseDown( event );\n\t\t\t} )\n\t\t\t.on( \"click.\" + this.widgetName, function( event ) {\n\t\t\t\tif ( true === $.data( event.target, that.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t\t\t$.removeData( event.target, that.widgetName + \".preventClickEvent\" );\n\t\t\t\t\tevent.stopImmediatePropagation();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.started = false;\n\t},\n\n\t// TODO: make sure destroying one instance of mouse doesn't mess with\n\t// other instances of mouse\n\t_mouseDestroy: function() {\n\t\tthis.element.off( \".\" + this.widgetName );\n\t\tif ( this._mouseMoveDelegate ) {\n\t\t\tthis.document\n\t\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\t\t}\n\t},\n\n\t_mouseDown: function( event ) {\n\n\t\t// don't let more than one widget handle mouseStart\n\t\tif ( mouseHandled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._mouseMoved = false;\n\n\t\t// We may have missed mouseup (out of window)\n\t\t( this._mouseStarted && this._mouseUp( event ) );\n\n\t\tthis._mouseDownEvent = event;\n\n\t\tvar that = this,\n\t\t\tbtnIsLeft = ( event.which === 1 ),\n\n\t\t\t// event.target.nodeName works around a bug in IE 8 with\n\t\t\t// disabled inputs (#7620)\n\t\t\telIsCancel = ( typeof this.options.cancel === \"string\" && event.target.nodeName ?\n\t\t\t\t$( event.target ).closest( this.options.cancel ).length : false );\n\t\tif ( !btnIsLeft || elIsCancel || !this._mouseCapture( event ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tthis.mouseDelayMet = !this.options.delay;\n\t\tif ( !this.mouseDelayMet ) {\n\t\t\tthis._mouseDelayTimer = setTimeout( function() {\n\t\t\t\tthat.mouseDelayMet = true;\n\t\t\t}, this.options.delay );\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted = ( this._mouseStart( event ) !== false );\n\t\t\tif ( !this._mouseStarted ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\t// Click event may never have fired (Gecko & Opera)\n\t\tif ( true === $.data( event.target, this.widgetName + \".preventClickEvent\" ) ) {\n\t\t\t$.removeData( event.target, this.widgetName + \".preventClickEvent\" );\n\t\t}\n\n\t\t// These delegates are required to keep context\n\t\tthis._mouseMoveDelegate = function( event ) {\n\t\t\treturn that._mouseMove( event );\n\t\t};\n\t\tthis._mouseUpDelegate = function( event ) {\n\t\t\treturn that._mouseUp( event );\n\t\t};\n\n\t\tthis.document\n\t\t\t.on( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.on( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tevent.preventDefault();\n\n\t\tmouseHandled = true;\n\t\treturn true;\n\t},\n\n\t_mouseMove: function( event ) {\n\n\t\t// Only check for mouseups outside the document if you've moved inside the document\n\t\t// at least once. This prevents the firing of mouseup in the case of IE<9, which will\n\t\t// fire a mousemove event if content is placed under the cursor. See #7778\n\t\t// Support: IE <9\n\t\tif ( this._mouseMoved ) {\n\n\t\t\t// IE mouseup check - mouseup happened when mouse was out of window\n\t\t\tif ( $.ui.ie && ( !document.documentMode || document.documentMode < 9 ) &&\n\t\t\t\t\t!event.button ) {\n\t\t\t\treturn this._mouseUp( event );\n\n\t\t\t// Iframe mouseup check - mouseup occurred in another document\n\t\t\t} else if ( !event.which ) {\n\n\t\t\t\t// Support: Safari <=8 - 9\n\t\t\t\t// Safari sets which to 0 if you press any of the following keys\n\t\t\t\t// during a drag (#14461)\n\t\t\t\tif ( event.originalEvent.altKey || event.originalEvent.ctrlKey ||\n\t\t\t\t\t\tevent.originalEvent.metaKey || event.originalEvent.shiftKey ) {\n\t\t\t\t\tthis.ignoreMissingWhich = true;\n\t\t\t\t} else if ( !this.ignoreMissingWhich ) {\n\t\t\t\t\treturn this._mouseUp( event );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif ( event.which || event.button ) {\n\t\t\tthis._mouseMoved = true;\n\t\t}\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseDrag( event );\n\t\t\treturn event.preventDefault();\n\t\t}\n\n\t\tif ( this._mouseDistanceMet( event ) && this._mouseDelayMet( event ) ) {\n\t\t\tthis._mouseStarted =\n\t\t\t\t( this._mouseStart( this._mouseDownEvent, event ) !== false );\n\t\t\t( this._mouseStarted ? this._mouseDrag( event ) : this._mouseUp( event ) );\n\t\t}\n\n\t\treturn !this._mouseStarted;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis.document\n\t\t\t.off( \"mousemove.\" + this.widgetName, this._mouseMoveDelegate )\n\t\t\t.off( \"mouseup.\" + this.widgetName, this._mouseUpDelegate );\n\n\t\tif ( this._mouseStarted ) {\n\t\t\tthis._mouseStarted = false;\n\n\t\t\tif ( event.target === this._mouseDownEvent.target ) {\n\t\t\t\t$.data( event.target, this.widgetName + \".preventClickEvent\", true );\n\t\t\t}\n\n\t\t\tthis._mouseStop( event );\n\t\t}\n\n\t\tif ( this._mouseDelayTimer ) {\n\t\t\tclearTimeout( this._mouseDelayTimer );\n\t\t\tdelete this._mouseDelayTimer;\n\t\t}\n\n\t\tthis.ignoreMissingWhich = false;\n\t\tmouseHandled = false;\n\t\tevent.preventDefault();\n\t},\n\n\t_mouseDistanceMet: function( event ) {\n\t\treturn ( Math.max(\n\t\t\t\tMath.abs( this._mouseDownEvent.pageX - event.pageX ),\n\t\t\t\tMath.abs( this._mouseDownEvent.pageY - event.pageY )\n\t\t\t) >= this.options.distance\n\t\t);\n\t},\n\n\t_mouseDelayMet: function( /* event */ ) {\n\t\treturn this.mouseDelayMet;\n\t},\n\n\t// These are placeholder methods, to be overriden by extending plugin\n\t_mouseStart: function( /* event */ ) {},\n\t_mouseDrag: function( /* event */ ) {},\n\t_mouseStop: function( /* event */ ) {},\n\t_mouseCapture: function( /* event */ ) { return true; }\n} );\n\n\n\n\n// $.ui.plugin is deprecated. Use $.widget() extensions instead.\nvar plugin = $.ui.plugin = {\n\tadd: function( module, option, set ) {\n\t\tvar i,\n\t\t\tproto = $.ui[ module ].prototype;\n\t\tfor ( i in set ) {\n\t\t\tproto.plugins[ i ] = proto.plugins[ i ] || [];\n\t\t\tproto.plugins[ i ].push( [ option, set[ i ] ] );\n\t\t}\n\t},\n\tcall: function( instance, name, args, allowDisconnected ) {\n\t\tvar i,\n\t\t\tset = instance.plugins[ name ];\n\n\t\tif ( !set ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( !allowDisconnected && ( !instance.element[ 0 ].parentNode ||\n\t\t\t\tinstance.element[ 0 ].parentNode.nodeType === 11 ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor ( i = 0; i < set.length; i++ ) {\n\t\t\tif ( instance.options[ set[ i ][ 0 ] ] ) {\n\t\t\t\tset[ i ][ 1 ].apply( instance.element, args );\n\t\t\t}\n\t\t}\n\t}\n};\n\n\n\nvar safeBlur = $.ui.safeBlur = function( element ) {\n\n\t// Support: IE9 - 10 only\n\t// If the <body> is blurred, IE will switch windows, see #9420\n\tif ( element && element.nodeName.toLowerCase() !== \"body\" ) {\n\t\t$( element ).trigger( \"blur\" );\n\t}\n};\n\n\n/*!\n * jQuery UI Draggable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Draggable\n//>>group: Interactions\n//>>description: Enables dragging functionality for any element.\n//>>docs: http://api.jqueryui.com/draggable/\n//>>demos: http://jqueryui.com/draggable/\n//>>css.structure: ../../themes/base/draggable.css\n\n\n\n$.widget( \"ui.draggable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drag\",\n\toptions: {\n\t\taddClasses: true,\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectToSortable: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\tiframeFix: false,\n\t\topacity: false,\n\t\trefreshPositions: false,\n\t\trevert: false,\n\t\trevertDuration: 500,\n\t\tscope: \"default\",\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tsnap: false,\n\t\tsnapMode: \"both\",\n\t\tsnapTolerance: 20,\n\t\tstack: false,\n\t\tzIndex: false,\n\n\t\t// Callbacks\n\t\tdrag: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\t_create: function() {\n\n\t\tif ( this.options.helper === \"original\" ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\t\tif ( this.options.addClasses ) {\n\t\t\tthis._addClass( \"ui-draggable\" );\n\t\t}\n\t\tthis._setHandleClassName();\n\n\t\tthis._mouseInit();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._removeHandleClassName();\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tif ( ( this.helper || this.element ).is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis.destroyOnClear = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._removeHandleClassName();\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar o = this.options;\n\n\t\t// Among others, prevent a drag on a resizable-handle\n\t\tif ( this.helper || o.disabled ||\n\t\t\t\t$( event.target ).closest( \".ui-resizable-handle\" ).length > 0 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//Quit if we're not on a valid handle\n\t\tthis.handle = this._getHandle( event );\n\t\tif ( !this.handle ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis._blurActiveElement( event );\n\n\t\tthis._blockFrames( o.iframeFix === true ? \"iframe\" : o.iframeFix );\n\n\t\treturn true;\n\n\t},\n\n\t_blockFrames: function( selector ) {\n\t\tthis.iframeBlocks = this.document.find( selector ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( \"position\", \"absolute\" )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.outerWidth( iframe.outerWidth() )\n\t\t\t\t.outerHeight( iframe.outerHeight() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_blurActiveElement: function( event ) {\n\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\ttarget = $( event.target );\n\n\t\t// Don't blur if the event occurred on an element that is within\n\t\t// the currently focused element\n\t\t// See #10527, #12472\n\t\tif ( target.closest( activeElement ).length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Blur any element that currently has focus, see #4261\n\t\t$.ui.safeBlur( activeElement );\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar o = this.options;\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\tthis._addClass( this.helper, \"ui-draggable-dragging\" );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//If ddmanager is used for droppables, set the global draggable\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Store the helper's css position\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\t\tthis.scrollParent = this.helper.scrollParent( true );\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tthis.hasFixedAncestor = this.helper.parents().filter( function() {\n\t\t\t\treturn $( this ).css( \"position\" ) === \"fixed\";\n\t\t\t} ).length > 0;\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.positionAbs = this.element.offset();\n\t\tthis._refreshOffsets( event );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this.position = this._generatePosition( event, false );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Set a containment if given in the options\n\t\tthis._setContainment();\n\n\t\t//Trigger event + callbacks\n\t\tif ( this._trigger( \"start\", event ) === false ) {\n\t\t\tthis._clear();\n\t\t\treturn false;\n\t\t}\n\n\t\t//Recache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t//Prepare the droppable offsets\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\t// Execute the drag once - this causes the helper not to be visible before getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event, true );\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has started\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStart( this, event );\n\t\t}\n\n\t\treturn true;\n\t},\n\n\t_refreshOffsets: function( event ) {\n\t\tthis.offset = {\n\t\t\ttop: this.positionAbs.top - this.margins.top,\n\t\t\tleft: this.positionAbs.left - this.margins.left,\n\t\t\tscroll: false,\n\t\t\tparent: this._getParentOffset(),\n\t\t\trelative: this._getRelativeOffset()\n\t\t};\n\n\t\tthis.offset.click = {\n\t\t\tleft: event.pageX - this.offset.left,\n\t\t\ttop: event.pageY - this.offset.top\n\t\t};\n\t},\n\n\t_mouseDrag: function( event, noPropagation ) {\n\n\t\t// reset any necessary cached properties (see #5009)\n\t\tif ( this.hasFixedAncestor ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event, true );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Call plugins and callbacks and use the resulting position if something is returned\n\t\tif ( !noPropagation ) {\n\t\t\tvar ui = this._uiHash();\n\t\t\tif ( this._trigger( \"drag\", event, ui ) === false ) {\n\t\t\t\tthis._mouseUp( new $.Event( \"mouseup\", event ) );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis.position = ui.position;\n\t\t}\n\n\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tvar that = this,\n\t\t\tdropped = false;\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\tdropped = $.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\t//if a drop comes from outside (a sortable)\n\t\tif ( this.dropped ) {\n\t\t\tdropped = this.dropped;\n\t\t\tthis.dropped = false;\n\t\t}\n\n\t\tif ( ( this.options.revert === \"invalid\" && !dropped ) ||\n\t\t\t\t( this.options.revert === \"valid\" && dropped ) ||\n\t\t\t\tthis.options.revert === true || ( $.isFunction( this.options.revert ) &&\n\t\t\t\tthis.options.revert.call( this.element, dropped ) )\n\t\t) {\n\t\t\t$( this.helper ).animate(\n\t\t\t\tthis.originalPosition,\n\t\t\t\tparseInt( this.options.revertDuration, 10 ),\n\t\t\t\tfunction() {\n\t\t\t\t\tif ( that._trigger( \"stop\", event ) !== false ) {\n\t\t\t\t\t\tthat._clear();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tif ( this._trigger( \"stop\", event ) !== false ) {\n\t\t\t\tthis._clear();\n\t\t\t}\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseUp: function( event ) {\n\t\tthis._unblockFrames();\n\n\t\t// If the ddmanager is used for droppables, inform the manager that dragging has stopped\n\t\t// (see #5003)\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.dragStop( this, event );\n\t\t}\n\n\t\t// Only need to focus if the event occurred on the draggable itself, see #10527\n\t\tif ( this.handleElement.is( event.target ) ) {\n\n\t\t\t// The interaction is over; whether or not the click resulted in a drag,\n\t\t\t// focus the element\n\t\t\tthis.element.trigger( \"focus\" );\n\t\t}\n\n\t\treturn $.ui.mouse.prototype._mouseUp.call( this, event );\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.helper.is( \".ui-draggable-dragging\" ) ) {\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: this.element[ 0 ] } ) );\n\t\t} else {\n\t\t\tthis._clear();\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\t_getHandle: function( event ) {\n\t\treturn this.options.handle ?\n\t\t\t!!$( event.target ).closest( this.element.find( this.options.handle ) ).length :\n\t\t\ttrue;\n\t},\n\n\t_setHandleClassName: function() {\n\t\tthis.handleElement = this.options.handle ?\n\t\t\tthis.element.find( this.options.handle ) : this.element;\n\t\tthis._addClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_removeHandleClassName: function() {\n\t\tthis._removeClass( this.handleElement, \"ui-draggable-handle\" );\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelperIsFunction = $.isFunction( o.helper ),\n\t\t\thelper = helperIsFunction ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ?\n\t\t\t\t\tthis.element.clone().removeAttr( \"id\" ) :\n\t\t\t\t\tthis.element );\n\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\thelper.appendTo( ( o.appendTo === \"parent\" ?\n\t\t\t\tthis.element[ 0 ].parentNode :\n\t\t\t\to.appendTo ) );\n\t\t}\n\n\t\t// Http://bugs.jqueryui.com/ticket/9446\n\t\t// a helper function can return the original element\n\t\t// which wouldn't have been set to relative in _create\n\t\tif ( helperIsFunction && helper[ 0 ] === this.element[ 0 ] ) {\n\t\t\tthis._setPositionRelative();\n\t\t}\n\n\t\tif ( helper[ 0 ] !== this.element[ 0 ] &&\n\t\t\t\t!( /(fixed|absolute)/ ).test( helper.css( \"position\" ) ) ) {\n\t\t\thelper.css( \"position\", \"absolute\" );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_setPositionRelative: function() {\n\t\tif ( !( /^(?:r|a|f)/ ).test( this.element.css( \"position\" ) ) ) {\n\t\t\tthis.element[ 0 ].style.position = \"relative\";\n\t\t}\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_isRootNode: function( element ) {\n\t\treturn ( /(html|body)/i ).test( element.tagName ) || element === this.document[ 0 ];\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tvar po = this.offsetParent.offset(),\n\t\t\tdocument = this.document[ 0 ];\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== document &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\tif ( this._isRootNode( this.offsetParent[ 0 ] ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\t\tif ( this.cssPosition !== \"relative\" ) {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t\tvar p = this.element.position(),\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollTop() : 0 ),\n\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t( !scrollIsRootNode ? this.scrollParent.scrollLeft() : 0 )\n\t\t};\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.element.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.element.css( \"marginTop\" ), 10 ) || 0 ),\n\t\t\tright: ( parseInt( this.element.css( \"marginRight\" ), 10 ) || 0 ),\n\t\t\tbottom: ( parseInt( this.element.css( \"marginBottom\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar isUserScrollable, c, ce,\n\t\t\to = this.options,\n\t\t\tdocument = this.document[ 0 ];\n\n\t\tthis.relativeContainer = null;\n\n\t\tif ( !o.containment ) {\n\t\t\tthis.containment = null;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t$( window ).scrollLeft() - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t$( window ).scrollTop() - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\t$( window ).scrollLeft() + $( window ).width() -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\t$( window ).scrollTop() +\n\t\t\t\t\t( $( window ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"document\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0,\n\t\t\t\t0,\n\t\t\t\t$( document ).width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( $( document ).height() || document.body.parentNode.scrollHeight ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment.constructor === Array ) {\n\t\t\tthis.containment = o.containment;\n\t\t\treturn;\n\t\t}\n\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\n\t\tc = $( o.containment );\n\t\tce = c[ 0 ];\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tisUserScrollable = /(scroll|auto)/.test( c.css( \"overflow\" ) );\n\n\t\tthis.containment = [\n\t\t\t( parseInt( c.css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingLeft\" ), 10 ) || 0 ),\n\t\t\t( parseInt( c.css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( c.css( \"paddingTop\" ), 10 ) || 0 ),\n\t\t\t( isUserScrollable ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t( parseInt( c.css( \"borderRightWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.width -\n\t\t\t\tthis.margins.left -\n\t\t\t\tthis.margins.right,\n\t\t\t( isUserScrollable ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t( parseInt( c.css( \"borderBottomWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( c.css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\tthis.helperProportions.height -\n\t\t\t\tthis.margins.top -\n\t\t\t\tthis.margins.bottom\n\t\t];\n\t\tthis.relativeContainer = c;\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event, constrainPosition ) {\n\n\t\tvar containment, co, top, left,\n\t\t\to = this.options,\n\t\t\tscrollIsRootNode = this._isRootNode( this.scrollParent[ 0 ] ),\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY;\n\n\t\t// Cache the scroll\n\t\tif ( !scrollIsRootNode || !this.offset.scroll ) {\n\t\t\tthis.offset.scroll = {\n\t\t\t\ttop: this.scrollParent.scrollTop(),\n\t\t\t\tleft: this.scrollParent.scrollLeft()\n\t\t\t};\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\t// If we are not dragging yet, we won't check for options\n\t\tif ( constrainPosition ) {\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( this.relativeContainer ) {\n\t\t\t\t\tco = this.relativeContainer.offset();\n\t\t\t\t\tcontainment = [\n\t\t\t\t\t\tthis.containment[ 0 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 1 ] + co.top,\n\t\t\t\t\t\tthis.containment[ 2 ] + co.left,\n\t\t\t\t\t\tthis.containment[ 3 ] + co.top\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcontainment = this.containment;\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.offset.click.left < containment[ 0 ] ) {\n\t\t\t\t\tpageX = containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < containment[ 1 ] ) {\n\t\t\t\t\tpageY = containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > containment[ 2 ] ) {\n\t\t\t\t\tpageX = containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > containment[ 3 ] ) {\n\t\t\t\t\tpageY = containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\n\t\t\t\t//Check for grid elements set to 0 to prevent divide by 0 error causing invalid\n\t\t\t\t// argument errors in IE (see ticket #6950)\n\t\t\t\ttop = o.grid[ 1 ] ? this.originalPageY + Math.round( ( pageY -\n\t\t\t\t\tthis.originalPageY ) / o.grid[ 1 ] ) * o.grid[ 1 ] : this.originalPageY;\n\t\t\t\tpageY = containment ? ( ( top - this.offset.click.top >= containment[ 1 ] ||\n\t\t\t\t\ttop - this.offset.click.top > containment[ 3 ] ) ?\n\t\t\t\t\t\ttop :\n\t\t\t\t\t\t( ( top - this.offset.click.top >= containment[ 1 ] ) ?\n\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) : top;\n\n\t\t\t\tleft = o.grid[ 0 ] ? this.originalPageX +\n\t\t\t\t\tMath.round( ( pageX - this.originalPageX ) / o.grid[ 0 ] ) * o.grid[ 0 ] :\n\t\t\t\t\tthis.originalPageX;\n\t\t\t\tpageX = containment ? ( ( left - this.offset.click.left >= containment[ 0 ] ||\n\t\t\t\t\tleft - this.offset.click.left > containment[ 2 ] ) ?\n\t\t\t\t\t\tleft :\n\t\t\t\t\t\t( ( left - this.offset.click.left >= containment[ 0 ] ) ?\n\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) : left;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"y\" ) {\n\t\t\t\tpageX = this.originalPageX;\n\t\t\t}\n\n\t\t\tif ( o.axis === \"x\" ) {\n\t\t\t\tpageY = this.originalPageY;\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.top :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.top ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.offset.scroll.left :\n\t\t\t\t\t( scrollIsRootNode ? 0 : this.offset.scroll.left ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_clear: function() {\n\t\tthis._removeClass( this.helper, \"ui-draggable-dragging\" );\n\t\tif ( this.helper[ 0 ] !== this.element[ 0 ] && !this.cancelHelperRemoval ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\t\tthis.helper = null;\n\t\tthis.cancelHelperRemoval = false;\n\t\tif ( this.destroyOnClear ) {\n\t\t\tthis.destroy();\n\t\t}\n\t},\n\n\t// From now on bulk stuff - mainly helpers\n\n\t_trigger: function( type, event, ui ) {\n\t\tui = ui || this._uiHash();\n\t\t$.ui.plugin.call( this, type, [ event, ui, this ], true );\n\n\t\t// Absolute position and offset (see #6884 ) have to be recalculated after plugins\n\t\tif ( /^(drag|start|stop)/.test( type ) ) {\n\t\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\t\t\tui.offset = this.positionAbs;\n\t\t}\n\t\treturn $.Widget.prototype._trigger.call( this, type, event, ui );\n\t},\n\n\tplugins: {},\n\n\t_uiHash: function() {\n\t\treturn {\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\toriginalPosition: this.originalPosition,\n\t\t\toffset: this.positionAbs\n\t\t};\n\t}\n\n} );\n\n$.ui.plugin.add( \"draggable\", \"connectToSortable\", {\n\tstart: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.sortables = [];\n\t\t$( draggable.options.connectToSortable ).each( function() {\n\t\t\tvar sortable = $( this ).sortable( \"instance\" );\n\n\t\t\tif ( sortable && !sortable.options.disabled ) {\n\t\t\t\tdraggable.sortables.push( sortable );\n\n\t\t\t\t// RefreshPositions is called at drag start to refresh the containerCache\n\t\t\t\t// which is used in drag. This ensures it's initialized and synchronized\n\t\t\t\t// with any changes that might have happened on the page since initialization.\n\t\t\t\tsortable.refreshPositions();\n\t\t\t\tsortable._trigger( \"activate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tstop: function( event, ui, draggable ) {\n\t\tvar uiSortable = $.extend( {}, ui, {\n\t\t\titem: draggable.element\n\t\t} );\n\n\t\tdraggable.cancelHelperRemoval = false;\n\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar sortable = this;\n\n\t\t\tif ( sortable.isOver ) {\n\t\t\t\tsortable.isOver = 0;\n\n\t\t\t\t// Allow this sortable to handle removing the helper\n\t\t\t\tdraggable.cancelHelperRemoval = true;\n\t\t\t\tsortable.cancelHelperRemoval = false;\n\n\t\t\t\t// Use _storedCSS To restore properties in the sortable,\n\t\t\t\t// as this also handles revert (#9675) since the draggable\n\t\t\t\t// may have modified them in unexpected ways (#8809)\n\t\t\t\tsortable._storedCSS = {\n\t\t\t\t\tposition: sortable.placeholder.css( \"position\" ),\n\t\t\t\t\ttop: sortable.placeholder.css( \"top\" ),\n\t\t\t\t\tleft: sortable.placeholder.css( \"left\" )\n\t\t\t\t};\n\n\t\t\t\tsortable._mouseStop( event );\n\n\t\t\t\t// Once drag has ended, the sortable should return to using\n\t\t\t\t// its original helper, not the shared helper from draggable\n\t\t\t\tsortable.options.helper = sortable.options._helper;\n\t\t\t} else {\n\n\t\t\t\t// Prevent this Sortable from removing the helper.\n\t\t\t\t// However, don't set the draggable to remove the helper\n\t\t\t\t// either as another connected Sortable may yet handle the removal.\n\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\tsortable._trigger( \"deactivate\", event, uiSortable );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( event, ui, draggable ) {\n\t\t$.each( draggable.sortables, function() {\n\t\t\tvar innermostIntersecting = false,\n\t\t\t\tsortable = this;\n\n\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\tsortable.positionAbs = draggable.positionAbs;\n\t\t\tsortable.helperProportions = draggable.helperProportions;\n\t\t\tsortable.offset.click = draggable.offset.click;\n\n\t\t\tif ( sortable._intersectsWith( sortable.containerCache ) ) {\n\t\t\t\tinnermostIntersecting = true;\n\n\t\t\t\t$.each( draggable.sortables, function() {\n\n\t\t\t\t\t// Copy over variables that sortable's _intersectsWith uses\n\t\t\t\t\tthis.positionAbs = draggable.positionAbs;\n\t\t\t\t\tthis.helperProportions = draggable.helperProportions;\n\t\t\t\t\tthis.offset.click = draggable.offset.click;\n\n\t\t\t\t\tif ( this !== sortable &&\n\t\t\t\t\t\t\tthis._intersectsWith( this.containerCache ) &&\n\t\t\t\t\t\t\t$.contains( sortable.element[ 0 ], this.element[ 0 ] ) ) {\n\t\t\t\t\t\tinnermostIntersecting = false;\n\t\t\t\t\t}\n\n\t\t\t\t\treturn innermostIntersecting;\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( innermostIntersecting ) {\n\n\t\t\t\t// If it intersects, we use a little isOver variable and set it once,\n\t\t\t\t// so that the move-in stuff gets fired only once.\n\t\t\t\tif ( !sortable.isOver ) {\n\t\t\t\t\tsortable.isOver = 1;\n\n\t\t\t\t\t// Store draggable's parent in case we need to reappend to it later.\n\t\t\t\t\tdraggable._parent = ui.helper.parent();\n\n\t\t\t\t\tsortable.currentItem = ui.helper\n\t\t\t\t\t\t.appendTo( sortable.element )\n\t\t\t\t\t\t.data( \"ui-sortable-item\", true );\n\n\t\t\t\t\t// Store helper option to later restore it\n\t\t\t\t\tsortable.options._helper = sortable.options.helper;\n\n\t\t\t\t\tsortable.options.helper = function() {\n\t\t\t\t\t\treturn ui.helper[ 0 ];\n\t\t\t\t\t};\n\n\t\t\t\t\t// Fire the start events of the sortable with our passed browser event,\n\t\t\t\t\t// and our own helper (so it doesn't create a new one)\n\t\t\t\t\tevent.target = sortable.currentItem[ 0 ];\n\t\t\t\t\tsortable._mouseCapture( event, true );\n\t\t\t\t\tsortable._mouseStart( event, true, true );\n\n\t\t\t\t\t// Because the browser event is way off the new appended portlet,\n\t\t\t\t\t// modify necessary variables to reflect the changes\n\t\t\t\t\tsortable.offset.click.top = draggable.offset.click.top;\n\t\t\t\t\tsortable.offset.click.left = draggable.offset.click.left;\n\t\t\t\t\tsortable.offset.parent.left -= draggable.offset.parent.left -\n\t\t\t\t\t\tsortable.offset.parent.left;\n\t\t\t\t\tsortable.offset.parent.top -= draggable.offset.parent.top -\n\t\t\t\t\t\tsortable.offset.parent.top;\n\n\t\t\t\t\tdraggable._trigger( \"toSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is in a valid drop zone,\n\t\t\t\t\t// used solely in the revert option to handle \"valid/invalid\".\n\t\t\t\t\tdraggable.dropped = sortable.element;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables in the case that\n\t\t\t\t\t// adding to one sortable changes the location of the other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Hack so receive/update callbacks work (mostly)\n\t\t\t\t\tdraggable.currentItem = draggable.element;\n\t\t\t\t\tsortable.fromOutside = draggable;\n\t\t\t\t}\n\n\t\t\t\tif ( sortable.currentItem ) {\n\t\t\t\t\tsortable._mouseDrag( event );\n\n\t\t\t\t\t// Copy the sortable's position because the draggable's can potentially reflect\n\t\t\t\t\t// a relative position, while sortable is always absolute, which the dragged\n\t\t\t\t\t// element has now become. (#8809)\n\t\t\t\t\tui.position = sortable.position;\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// If it doesn't intersect with the sortable, and it intersected before,\n\t\t\t\t// we fake the drag stop of the sortable, but make sure it doesn't remove\n\t\t\t\t// the helper by using cancelHelperRemoval.\n\t\t\t\tif ( sortable.isOver ) {\n\n\t\t\t\t\tsortable.isOver = 0;\n\t\t\t\t\tsortable.cancelHelperRemoval = true;\n\n\t\t\t\t\t// Calling sortable's mouseStop would trigger a revert,\n\t\t\t\t\t// so revert must be temporarily false until after mouseStop is called.\n\t\t\t\t\tsortable.options._revert = sortable.options.revert;\n\t\t\t\t\tsortable.options.revert = false;\n\n\t\t\t\t\tsortable._trigger( \"out\", event, sortable._uiHash( sortable ) );\n\t\t\t\t\tsortable._mouseStop( event, true );\n\n\t\t\t\t\t// Restore sortable behaviors that were modfied\n\t\t\t\t\t// when the draggable entered the sortable area (#9481)\n\t\t\t\t\tsortable.options.revert = sortable.options._revert;\n\t\t\t\t\tsortable.options.helper = sortable.options._helper;\n\n\t\t\t\t\tif ( sortable.placeholder ) {\n\t\t\t\t\t\tsortable.placeholder.remove();\n\t\t\t\t\t}\n\n\t\t\t\t\t// Restore and recalculate the draggable's offset considering the sortable\n\t\t\t\t\t// may have modified them in unexpected ways. (#8809, #10669)\n\t\t\t\t\tui.helper.appendTo( draggable._parent );\n\t\t\t\t\tdraggable._refreshOffsets( event );\n\t\t\t\t\tui.position = draggable._generatePosition( event, true );\n\n\t\t\t\t\tdraggable._trigger( \"fromSortable\", event );\n\n\t\t\t\t\t// Inform draggable that the helper is no longer in a valid drop zone\n\t\t\t\t\tdraggable.dropped = false;\n\n\t\t\t\t\t// Need to refreshPositions of all sortables just in case removing\n\t\t\t\t\t// from one sortable changes the location of other sortables (#9675)\n\t\t\t\t\t$.each( draggable.sortables, function() {\n\t\t\t\t\t\tthis.refreshPositions();\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"cursor\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( \"body\" ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"cursor\" ) ) {\n\t\t\to._cursor = t.css( \"cursor\" );\n\t\t}\n\t\tt.css( \"cursor\", o.cursor );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._cursor ) {\n\t\t\t$( \"body\" ).css( \"cursor\", o._cursor );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"opacity\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\t\tif ( t.css( \"opacity\" ) ) {\n\t\t\to._opacity = t.css( \"opacity\" );\n\t\t}\n\t\tt.css( \"opacity\", o.opacity );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\t\tif ( o._opacity ) {\n\t\t\t$( ui.helper ).css( \"opacity\", o._opacity );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"scroll\", {\n\tstart: function( event, ui, i ) {\n\t\tif ( !i.scrollParentNotHidden ) {\n\t\t\ti.scrollParentNotHidden = i.helper.scrollParent( false );\n\t\t}\n\n\t\tif ( i.scrollParentNotHidden[ 0 ] !== i.document[ 0 ] &&\n\t\t\t\ti.scrollParentNotHidden[ 0 ].tagName !== \"HTML\" ) {\n\t\t\ti.overflowOffset = i.scrollParentNotHidden.offset();\n\t\t}\n\t},\n\tdrag: function( event, ui, i  ) {\n\n\t\tvar o = i.options,\n\t\t\tscrolled = false,\n\t\t\tscrollParent = i.scrollParentNotHidden[ 0 ],\n\t\t\tdocument = i.document[ 0 ];\n\n\t\tif ( scrollParent !== document && scrollParent.tagName !== \"HTML\" ) {\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( ( i.overflowOffset.top + scrollParent.offsetHeight ) - event.pageY <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - i.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollTop = scrolled = scrollParent.scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( ( i.overflowOffset.left + scrollParent.offsetWidth ) - event.pageX <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - i.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tscrollParent.scrollLeft = scrolled = scrollParent.scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tif ( !o.axis || o.axis !== \"x\" ) {\n\t\t\t\tif ( event.pageY - $( document ).scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( $( window ).height() - ( event.pageY - $( document ).scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollTop( $( document ).scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !o.axis || o.axis !== \"y\" ) {\n\t\t\t\tif ( event.pageX - $( document ).scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( $( window ).width() - ( event.pageX - $( document ).scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = $( document ).scrollLeft(\n\t\t\t\t\t\t$( document ).scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( i, event );\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"snap\", {\n\tstart: function( event, ui, i ) {\n\n\t\tvar o = i.options;\n\n\t\ti.snapElements = [];\n\n\t\t$( o.snap.constructor !== String ? ( o.snap.items || \":data(ui-draggable)\" ) : o.snap )\n\t\t\t.each( function() {\n\t\t\t\tvar $t = $( this ),\n\t\t\t\t\t$o = $t.offset();\n\t\t\t\tif ( this !== i.element[ 0 ] ) {\n\t\t\t\t\ti.snapElements.push( {\n\t\t\t\t\t\titem: this,\n\t\t\t\t\t\twidth: $t.outerWidth(), height: $t.outerHeight(),\n\t\t\t\t\t\ttop: $o.top, left: $o.left\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t},\n\tdrag: function( event, ui, inst ) {\n\n\t\tvar ts, bs, ls, rs, l, r, t, b, i, first,\n\t\t\to = inst.options,\n\t\t\td = o.snapTolerance,\n\t\t\tx1 = ui.offset.left, x2 = x1 + inst.helperProportions.width,\n\t\t\ty1 = ui.offset.top, y2 = y1 + inst.helperProportions.height;\n\n\t\tfor ( i = inst.snapElements.length - 1; i >= 0; i-- ) {\n\n\t\t\tl = inst.snapElements[ i ].left - inst.margins.left;\n\t\t\tr = l + inst.snapElements[ i ].width;\n\t\t\tt = inst.snapElements[ i ].top - inst.margins.top;\n\t\t\tb = t + inst.snapElements[ i ].height;\n\n\t\t\tif ( x2 < l - d || x1 > r + d || y2 < t - d || y1 > b + d ||\n\t\t\t\t\t!$.contains( inst.snapElements[ i ].item.ownerDocument,\n\t\t\t\t\tinst.snapElements[ i ].item ) ) {\n\t\t\t\tif ( inst.snapElements[ i ].snapping ) {\n\t\t\t\t\t( inst.options.snap.release &&\n\t\t\t\t\t\tinst.options.snap.release.call(\n\t\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\t\tevent,\n\t\t\t\t\t\t\t$.extend( inst._uiHash(), { snapItem: inst.snapElements[ i ].item } )\n\t\t\t\t\t\t) );\n\t\t\t\t}\n\t\t\t\tinst.snapElements[ i ].snapping = false;\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( o.snapMode !== \"inner\" ) {\n\t\t\t\tts = Math.abs( t - y2 ) <= d;\n\t\t\t\tbs = Math.abs( b - y1 ) <= d;\n\t\t\t\tls = Math.abs( l - x2 ) <= d;\n\t\t\t\trs = Math.abs( r - x1 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfirst = ( ts || bs || ls || rs );\n\n\t\t\tif ( o.snapMode !== \"outer\" ) {\n\t\t\t\tts = Math.abs( t - y1 ) <= d;\n\t\t\t\tbs = Math.abs( b - y2 ) <= d;\n\t\t\t\tls = Math.abs( l - x1 ) <= d;\n\t\t\t\trs = Math.abs( r - x2 ) <= d;\n\t\t\t\tif ( ts ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: t,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( bs ) {\n\t\t\t\t\tui.position.top = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: b - inst.helperProportions.height,\n\t\t\t\t\t\tleft: 0\n\t\t\t\t\t} ).top;\n\t\t\t\t}\n\t\t\t\tif ( ls ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: l\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t\tif ( rs ) {\n\t\t\t\t\tui.position.left = inst._convertPositionTo( \"relative\", {\n\t\t\t\t\t\ttop: 0,\n\t\t\t\t\t\tleft: r - inst.helperProportions.width\n\t\t\t\t\t} ).left;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !inst.snapElements[ i ].snapping && ( ts || bs || ls || rs || first ) ) {\n\t\t\t\t( inst.options.snap.snap &&\n\t\t\t\t\tinst.options.snap.snap.call(\n\t\t\t\t\t\tinst.element,\n\t\t\t\t\t\tevent,\n\t\t\t\t\t\t$.extend( inst._uiHash(), {\n\t\t\t\t\t\t\tsnapItem: inst.snapElements[ i ].item\n\t\t\t\t\t\t} ) ) );\n\t\t\t}\n\t\t\tinst.snapElements[ i ].snapping = ( ts || bs || ls || rs || first );\n\n\t\t}\n\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"stack\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar min,\n\t\t\to = instance.options,\n\t\t\tgroup = $.makeArray( $( o.stack ) ).sort( function( a, b ) {\n\t\t\t\treturn ( parseInt( $( a ).css( \"zIndex\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( b ).css( \"zIndex\" ), 10 ) || 0 );\n\t\t\t} );\n\n\t\tif ( !group.length ) { return; }\n\n\t\tmin = parseInt( $( group[ 0 ] ).css( \"zIndex\" ), 10 ) || 0;\n\t\t$( group ).each( function( i ) {\n\t\t\t$( this ).css( \"zIndex\", min + i );\n\t\t} );\n\t\tthis.css( \"zIndex\", ( min + group.length ) );\n\t}\n} );\n\n$.ui.plugin.add( \"draggable\", \"zIndex\", {\n\tstart: function( event, ui, instance ) {\n\t\tvar t = $( ui.helper ),\n\t\t\to = instance.options;\n\n\t\tif ( t.css( \"zIndex\" ) ) {\n\t\t\to._zIndex = t.css( \"zIndex\" );\n\t\t}\n\t\tt.css( \"zIndex\", o.zIndex );\n\t},\n\tstop: function( event, ui, instance ) {\n\t\tvar o = instance.options;\n\n\t\tif ( o._zIndex ) {\n\t\t\t$( ui.helper ).css( \"zIndex\", o._zIndex );\n\t\t}\n\t}\n} );\n\nvar widgetsDraggable = $.ui.draggable;\n\n\n/*!\n * jQuery UI Resizable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Resizable\n//>>group: Interactions\n//>>description: Enables resize functionality for any element.\n//>>docs: http://api.jqueryui.com/resizable/\n//>>demos: http://jqueryui.com/resizable/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/resizable.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.resizable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"resize\",\n\toptions: {\n\t\talsoResize: false,\n\t\tanimate: false,\n\t\tanimateDuration: \"slow\",\n\t\tanimateEasing: \"swing\",\n\t\taspectRatio: false,\n\t\tautoHide: false,\n\t\tclasses: {\n\t\t\t\"ui-resizable-se\": \"ui-icon ui-icon-gripsmall-diagonal-se\"\n\t\t},\n\t\tcontainment: false,\n\t\tghost: false,\n\t\tgrid: false,\n\t\thandles: \"e,s,se\",\n\t\thelper: false,\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 10,\n\t\tminWidth: 10,\n\n\t\t// See #7960\n\t\tzIndex: 90,\n\n\t\t// Callbacks\n\t\tresize: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_num: function( value ) {\n\t\treturn parseFloat( value ) || 0;\n\t},\n\n\t_isNumber: function( value ) {\n\t\treturn !isNaN( parseFloat( value ) );\n\t},\n\n\t_hasScroll: function( el, a ) {\n\n\t\tif ( $( el ).css( \"overflow\" ) === \"hidden\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar scroll = ( a && a === \"left\" ) ? \"scrollLeft\" : \"scrollTop\",\n\t\t\thas = false;\n\n\t\tif ( el[ scroll ] > 0 ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: determine which cases actually cause this to happen\n\t\t// if the element doesn't have the scroll set, see if it's possible to\n\t\t// set the scroll\n\t\tel[ scroll ] = 1;\n\t\thas = ( el[ scroll ] > 0 );\n\t\tel[ scroll ] = 0;\n\t\treturn has;\n\t},\n\n\t_create: function() {\n\n\t\tvar margins,\n\t\t\to = this.options,\n\t\t\tthat = this;\n\t\tthis._addClass( \"ui-resizable\" );\n\n\t\t$.extend( this, {\n\t\t\t_aspectRatio: !!( o.aspectRatio ),\n\t\t\taspectRatio: o.aspectRatio,\n\t\t\toriginalElement: this.element,\n\t\t\t_proportionallyResizeElements: [],\n\t\t\t_helper: o.helper || o.ghost || o.animate ? o.helper || \"ui-resizable-helper\" : null\n\t\t} );\n\n\t\t// Wrap the element if it cannot hold child nodes\n\t\tif ( this.element[ 0 ].nodeName.match( /^(canvas|textarea|input|select|button|img)$/i ) ) {\n\n\t\t\tthis.element.wrap(\n\t\t\t\t$( \"<div class='ui-wrapper' style='overflow: hidden;'></div>\" ).css( {\n\t\t\t\t\tposition: this.element.css( \"position\" ),\n\t\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\t\ttop: this.element.css( \"top\" ),\n\t\t\t\t\tleft: this.element.css( \"left\" )\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tthis.element = this.element.parent().data(\n\t\t\t\t\"ui-resizable\", this.element.resizable( \"instance\" )\n\t\t\t);\n\n\t\t\tthis.elementIsWrapper = true;\n\n\t\t\tmargins = {\n\t\t\t\tmarginTop: this.originalElement.css( \"marginTop\" ),\n\t\t\t\tmarginRight: this.originalElement.css( \"marginRight\" ),\n\t\t\t\tmarginBottom: this.originalElement.css( \"marginBottom\" ),\n\t\t\t\tmarginLeft: this.originalElement.css( \"marginLeft\" )\n\t\t\t};\n\n\t\t\tthis.element.css( margins );\n\t\t\tthis.originalElement.css( \"margin\", 0 );\n\n\t\t\t// support: Safari\n\t\t\t// Prevent Safari textarea resize\n\t\t\tthis.originalResizeStyle = this.originalElement.css( \"resize\" );\n\t\t\tthis.originalElement.css( \"resize\", \"none\" );\n\n\t\t\tthis._proportionallyResizeElements.push( this.originalElement.css( {\n\t\t\t\tposition: \"static\",\n\t\t\t\tzoom: 1,\n\t\t\t\tdisplay: \"block\"\n\t\t\t} ) );\n\n\t\t\t// Support: IE9\n\t\t\t// avoid IE jump (hard set the margin)\n\t\t\tthis.originalElement.css( margins );\n\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tthis._setupHandles();\n\n\t\tif ( o.autoHide ) {\n\t\t\t$( this.element )\n\t\t\t\t.on( \"mouseenter\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tthat._removeClass( \"ui-resizable-autohide\" );\n\t\t\t\t\tthat._handles.show();\n\t\t\t\t} )\n\t\t\t\t.on( \"mouseleave\", function() {\n\t\t\t\t\tif ( o.disabled ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif ( !that.resizing ) {\n\t\t\t\t\t\tthat._addClass( \"ui-resizable-autohide\" );\n\t\t\t\t\t\tthat._handles.hide();\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t}\n\n\t\tthis._mouseInit();\n\t},\n\n\t_destroy: function() {\n\n\t\tthis._mouseDestroy();\n\n\t\tvar wrapper,\n\t\t\t_destroy = function( exp ) {\n\t\t\t\t$( exp )\n\t\t\t\t\t.removeData( \"resizable\" )\n\t\t\t\t\t.removeData( \"ui-resizable\" )\n\t\t\t\t\t.off( \".resizable\" )\n\t\t\t\t\t.find( \".ui-resizable-handle\" )\n\t\t\t\t\t\t.remove();\n\t\t\t};\n\n\t\t// TODO: Unwrap at same DOM position\n\t\tif ( this.elementIsWrapper ) {\n\t\t\t_destroy( this.element );\n\t\t\twrapper = this.element;\n\t\t\tthis.originalElement.css( {\n\t\t\t\tposition: wrapper.css( \"position\" ),\n\t\t\t\twidth: wrapper.outerWidth(),\n\t\t\t\theight: wrapper.outerHeight(),\n\t\t\t\ttop: wrapper.css( \"top\" ),\n\t\t\t\tleft: wrapper.css( \"left\" )\n\t\t\t} ).insertAfter( wrapper );\n\t\t\twrapper.remove();\n\t\t}\n\n\t\tthis.originalElement.css( \"resize\", this.originalResizeStyle );\n\t\t_destroy( this.originalElement );\n\n\t\treturn this;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\tcase \"handles\":\n\t\t\tthis._removeHandles();\n\t\t\tthis._setupHandles();\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setupHandles: function() {\n\t\tvar o = this.options, handle, i, n, hname, axis, that = this;\n\t\tthis.handles = o.handles ||\n\t\t\t( !$( \".ui-resizable-handle\", this.element ).length ?\n\t\t\t\t\"e,s,se\" : {\n\t\t\t\t\tn: \".ui-resizable-n\",\n\t\t\t\t\te: \".ui-resizable-e\",\n\t\t\t\t\ts: \".ui-resizable-s\",\n\t\t\t\t\tw: \".ui-resizable-w\",\n\t\t\t\t\tse: \".ui-resizable-se\",\n\t\t\t\t\tsw: \".ui-resizable-sw\",\n\t\t\t\t\tne: \".ui-resizable-ne\",\n\t\t\t\t\tnw: \".ui-resizable-nw\"\n\t\t\t\t} );\n\n\t\tthis._handles = $();\n\t\tif ( this.handles.constructor === String ) {\n\n\t\t\tif ( this.handles === \"all\" ) {\n\t\t\t\tthis.handles = \"n,e,s,w,se,sw,ne,nw\";\n\t\t\t}\n\n\t\t\tn = this.handles.split( \",\" );\n\t\t\tthis.handles = {};\n\n\t\t\tfor ( i = 0; i < n.length; i++ ) {\n\n\t\t\t\thandle = $.trim( n[ i ] );\n\t\t\t\thname = \"ui-resizable-\" + handle;\n\t\t\t\taxis = $( \"<div>\" );\n\t\t\t\tthis._addClass( axis, \"ui-resizable-handle \" + hname );\n\n\t\t\t\taxis.css( { zIndex: o.zIndex } );\n\n\t\t\t\tthis.handles[ handle ] = \".ui-resizable-\" + handle;\n\t\t\t\tthis.element.append( axis );\n\t\t\t}\n\n\t\t}\n\n\t\tthis._renderAxis = function( target ) {\n\n\t\t\tvar i, axis, padPos, padWrapper;\n\n\t\t\ttarget = target || this.element;\n\n\t\t\tfor ( i in this.handles ) {\n\n\t\t\t\tif ( this.handles[ i ].constructor === String ) {\n\t\t\t\t\tthis.handles[ i ] = this.element.children( this.handles[ i ] ).first().show();\n\t\t\t\t} else if ( this.handles[ i ].jquery || this.handles[ i ].nodeType ) {\n\t\t\t\t\tthis.handles[ i ] = $( this.handles[ i ] );\n\t\t\t\t\tthis._on( this.handles[ i ], { \"mousedown\": that._mouseDown } );\n\t\t\t\t}\n\n\t\t\t\tif ( this.elementIsWrapper &&\n\t\t\t\t\t\tthis.originalElement[ 0 ]\n\t\t\t\t\t\t\t.nodeName\n\t\t\t\t\t\t\t.match( /^(textarea|input|select|button)$/i ) ) {\n\t\t\t\t\taxis = $( this.handles[ i ], this.element );\n\n\t\t\t\t\tpadWrapper = /sw|ne|nw|se|n|s/.test( i ) ?\n\t\t\t\t\t\taxis.outerHeight() :\n\t\t\t\t\t\taxis.outerWidth();\n\n\t\t\t\t\tpadPos = [ \"padding\",\n\t\t\t\t\t\t/ne|nw|n/.test( i ) ? \"Top\" :\n\t\t\t\t\t\t/se|sw|s/.test( i ) ? \"Bottom\" :\n\t\t\t\t\t\t/^e$/.test( i ) ? \"Right\" : \"Left\" ].join( \"\" );\n\n\t\t\t\t\ttarget.css( padPos, padWrapper );\n\n\t\t\t\t\tthis._proportionallyResize();\n\t\t\t\t}\n\n\t\t\t\tthis._handles = this._handles.add( this.handles[ i ] );\n\t\t\t}\n\t\t};\n\n\t\t// TODO: make renderAxis a prototype function\n\t\tthis._renderAxis( this.element );\n\n\t\tthis._handles = this._handles.add( this.element.find( \".ui-resizable-handle\" ) );\n\t\tthis._handles.disableSelection();\n\n\t\tthis._handles.on( \"mouseover\", function() {\n\t\t\tif ( !that.resizing ) {\n\t\t\t\tif ( this.className ) {\n\t\t\t\t\taxis = this.className.match( /ui-resizable-(se|sw|ne|nw|n|e|s|w)/i );\n\t\t\t\t}\n\t\t\t\tthat.axis = axis && axis[ 1 ] ? axis[ 1 ] : \"se\";\n\t\t\t}\n\t\t} );\n\n\t\tif ( o.autoHide ) {\n\t\t\tthis._handles.hide();\n\t\t\tthis._addClass( \"ui-resizable-autohide\" );\n\t\t}\n\t},\n\n\t_removeHandles: function() {\n\t\tthis._handles.remove();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar i, handle,\n\t\t\tcapture = false;\n\n\t\tfor ( i in this.handles ) {\n\t\t\thandle = $( this.handles[ i ] )[ 0 ];\n\t\t\tif ( handle === event.target || $.contains( handle, event.target ) ) {\n\t\t\t\tcapture = true;\n\t\t\t}\n\t\t}\n\n\t\treturn !this.options.disabled && capture;\n\t},\n\n\t_mouseStart: function( event ) {\n\n\t\tvar curleft, curtop, cursor,\n\t\t\to = this.options,\n\t\t\tel = this.element;\n\n\t\tthis.resizing = true;\n\n\t\tthis._renderProxy();\n\n\t\tcurleft = this._num( this.helper.css( \"left\" ) );\n\t\tcurtop = this._num( this.helper.css( \"top\" ) );\n\n\t\tif ( o.containment ) {\n\t\t\tcurleft += $( o.containment ).scrollLeft() || 0;\n\t\t\tcurtop += $( o.containment ).scrollTop() || 0;\n\t\t}\n\n\t\tthis.offset = this.helper.offset();\n\t\tthis.position = { left: curleft, top: curtop };\n\n\t\tthis.size = this._helper ? {\n\t\t\t\twidth: this.helper.width(),\n\t\t\t\theight: this.helper.height()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.originalSize = this._helper ? {\n\t\t\t\twidth: el.outerWidth(),\n\t\t\t\theight: el.outerHeight()\n\t\t\t} : {\n\t\t\t\twidth: el.width(),\n\t\t\t\theight: el.height()\n\t\t\t};\n\n\t\tthis.sizeDiff = {\n\t\t\twidth: el.outerWidth() - el.width(),\n\t\t\theight: el.outerHeight() - el.height()\n\t\t};\n\n\t\tthis.originalPosition = { left: curleft, top: curtop };\n\t\tthis.originalMousePosition = { left: event.pageX, top: event.pageY };\n\n\t\tthis.aspectRatio = ( typeof o.aspectRatio === \"number\" ) ?\n\t\t\to.aspectRatio :\n\t\t\t( ( this.originalSize.width / this.originalSize.height ) || 1 );\n\n\t\tcursor = $( \".ui-resizable-\" + this.axis ).css( \"cursor\" );\n\t\t$( \"body\" ).css( \"cursor\", cursor === \"auto\" ? this.axis + \"-resize\" : cursor );\n\n\t\tthis._addClass( \"ui-resizable-resizing\" );\n\t\tthis._propagate( \"start\", event );\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tvar data, props,\n\t\t\tsmp = this.originalMousePosition,\n\t\t\ta = this.axis,\n\t\t\tdx = ( event.pageX - smp.left ) || 0,\n\t\t\tdy = ( event.pageY - smp.top ) || 0,\n\t\t\ttrigger = this._change[ a ];\n\n\t\tthis._updatePrevProperties();\n\n\t\tif ( !trigger ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tdata = trigger.apply( this, [ event, dx, dy ] );\n\n\t\tthis._updateVirtualBoundaries( event.shiftKey );\n\t\tif ( this._aspectRatio || event.shiftKey ) {\n\t\t\tdata = this._updateRatio( data, event );\n\t\t}\n\n\t\tdata = this._respectSize( data, event );\n\n\t\tthis._updateCache( data );\n\n\t\tthis._propagate( \"resize\", event );\n\n\t\tprops = this._applyChanges();\n\n\t\tif ( !this._helper && this._proportionallyResizeElements.length ) {\n\t\t\tthis._proportionallyResize();\n\t\t}\n\n\t\tif ( !$.isEmptyObject( props ) ) {\n\t\t\tthis._updatePrevProperties();\n\t\t\tthis._trigger( \"resize\", event, this.ui() );\n\t\t\tthis._applyChanges();\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\n\t\tthis.resizing = false;\n\t\tvar pr, ista, soffseth, soffsetw, s, left, top,\n\t\t\to = this.options, that = this;\n\n\t\tif ( this._helper ) {\n\n\t\t\tpr = this._proportionallyResizeElements;\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName );\n\t\t\tsoffseth = ista && this._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height;\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width;\n\n\t\t\ts = {\n\t\t\t\twidth: ( that.helper.width()  - soffsetw ),\n\t\t\t\theight: ( that.helper.height() - soffseth )\n\t\t\t};\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null;\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\t\tif ( !o.animate ) {\n\t\t\t\tthis.element.css( $.extend( s, { top: top, left: left } ) );\n\t\t\t}\n\n\t\t\tthat.helper.height( that.size.height );\n\t\t\tthat.helper.width( that.size.width );\n\n\t\t\tif ( this._helper && !o.animate ) {\n\t\t\t\tthis._proportionallyResize();\n\t\t\t}\n\t\t}\n\n\t\t$( \"body\" ).css( \"cursor\", \"auto\" );\n\n\t\tthis._removeClass( \"ui-resizable-resizing\" );\n\n\t\tthis._propagate( \"stop\", event );\n\n\t\tif ( this._helper ) {\n\t\t\tthis.helper.remove();\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\t_updatePrevProperties: function() {\n\t\tthis.prevPosition = {\n\t\t\ttop: this.position.top,\n\t\t\tleft: this.position.left\n\t\t};\n\t\tthis.prevSize = {\n\t\t\twidth: this.size.width,\n\t\t\theight: this.size.height\n\t\t};\n\t},\n\n\t_applyChanges: function() {\n\t\tvar props = {};\n\n\t\tif ( this.position.top !== this.prevPosition.top ) {\n\t\t\tprops.top = this.position.top + \"px\";\n\t\t}\n\t\tif ( this.position.left !== this.prevPosition.left ) {\n\t\t\tprops.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( this.size.width !== this.prevSize.width ) {\n\t\t\tprops.width = this.size.width + \"px\";\n\t\t}\n\t\tif ( this.size.height !== this.prevSize.height ) {\n\t\t\tprops.height = this.size.height + \"px\";\n\t\t}\n\n\t\tthis.helper.css( props );\n\n\t\treturn props;\n\t},\n\n\t_updateVirtualBoundaries: function( forceAspectRatio ) {\n\t\tvar pMinWidth, pMaxWidth, pMinHeight, pMaxHeight, b,\n\t\t\to = this.options;\n\n\t\tb = {\n\t\t\tminWidth: this._isNumber( o.minWidth ) ? o.minWidth : 0,\n\t\t\tmaxWidth: this._isNumber( o.maxWidth ) ? o.maxWidth : Infinity,\n\t\t\tminHeight: this._isNumber( o.minHeight ) ? o.minHeight : 0,\n\t\t\tmaxHeight: this._isNumber( o.maxHeight ) ? o.maxHeight : Infinity\n\t\t};\n\n\t\tif ( this._aspectRatio || forceAspectRatio ) {\n\t\t\tpMinWidth = b.minHeight * this.aspectRatio;\n\t\t\tpMinHeight = b.minWidth / this.aspectRatio;\n\t\t\tpMaxWidth = b.maxHeight * this.aspectRatio;\n\t\t\tpMaxHeight = b.maxWidth / this.aspectRatio;\n\n\t\t\tif ( pMinWidth > b.minWidth ) {\n\t\t\t\tb.minWidth = pMinWidth;\n\t\t\t}\n\t\t\tif ( pMinHeight > b.minHeight ) {\n\t\t\t\tb.minHeight = pMinHeight;\n\t\t\t}\n\t\t\tif ( pMaxWidth < b.maxWidth ) {\n\t\t\t\tb.maxWidth = pMaxWidth;\n\t\t\t}\n\t\t\tif ( pMaxHeight < b.maxHeight ) {\n\t\t\t\tb.maxHeight = pMaxHeight;\n\t\t\t}\n\t\t}\n\t\tthis._vBoundaries = b;\n\t},\n\n\t_updateCache: function( data ) {\n\t\tthis.offset = this.helper.offset();\n\t\tif ( this._isNumber( data.left ) ) {\n\t\t\tthis.position.left = data.left;\n\t\t}\n\t\tif ( this._isNumber( data.top ) ) {\n\t\t\tthis.position.top = data.top;\n\t\t}\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tthis.size.height = data.height;\n\t\t}\n\t\tif ( this._isNumber( data.width ) ) {\n\t\t\tthis.size.width = data.width;\n\t\t}\n\t},\n\n\t_updateRatio: function( data ) {\n\n\t\tvar cpos = this.position,\n\t\t\tcsize = this.size,\n\t\t\ta = this.axis;\n\n\t\tif ( this._isNumber( data.height ) ) {\n\t\t\tdata.width = ( data.height * this.aspectRatio );\n\t\t} else if ( this._isNumber( data.width ) ) {\n\t\t\tdata.height = ( data.width / this.aspectRatio );\n\t\t}\n\n\t\tif ( a === \"sw\" ) {\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t\tdata.top = null;\n\t\t}\n\t\tif ( a === \"nw\" ) {\n\t\t\tdata.top = cpos.top + ( csize.height - data.height );\n\t\t\tdata.left = cpos.left + ( csize.width - data.width );\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_respectSize: function( data ) {\n\n\t\tvar o = this._vBoundaries,\n\t\t\ta = this.axis,\n\t\t\tismaxw = this._isNumber( data.width ) && o.maxWidth && ( o.maxWidth < data.width ),\n\t\t\tismaxh = this._isNumber( data.height ) && o.maxHeight && ( o.maxHeight < data.height ),\n\t\t\tisminw = this._isNumber( data.width ) && o.minWidth && ( o.minWidth > data.width ),\n\t\t\tisminh = this._isNumber( data.height ) && o.minHeight && ( o.minHeight > data.height ),\n\t\t\tdw = this.originalPosition.left + this.originalSize.width,\n\t\t\tdh = this.originalPosition.top + this.originalSize.height,\n\t\t\tcw = /sw|nw|w/.test( a ), ch = /nw|ne|n/.test( a );\n\t\tif ( isminw ) {\n\t\t\tdata.width = o.minWidth;\n\t\t}\n\t\tif ( isminh ) {\n\t\t\tdata.height = o.minHeight;\n\t\t}\n\t\tif ( ismaxw ) {\n\t\t\tdata.width = o.maxWidth;\n\t\t}\n\t\tif ( ismaxh ) {\n\t\t\tdata.height = o.maxHeight;\n\t\t}\n\n\t\tif ( isminw && cw ) {\n\t\t\tdata.left = dw - o.minWidth;\n\t\t}\n\t\tif ( ismaxw && cw ) {\n\t\t\tdata.left = dw - o.maxWidth;\n\t\t}\n\t\tif ( isminh && ch ) {\n\t\t\tdata.top = dh - o.minHeight;\n\t\t}\n\t\tif ( ismaxh && ch ) {\n\t\t\tdata.top = dh - o.maxHeight;\n\t\t}\n\n\t\t// Fixing jump error on top/left - bug #2330\n\t\tif ( !data.width && !data.height && !data.left && data.top ) {\n\t\t\tdata.top = null;\n\t\t} else if ( !data.width && !data.height && !data.top && data.left ) {\n\t\t\tdata.left = null;\n\t\t}\n\n\t\treturn data;\n\t},\n\n\t_getPaddingPlusBorderDimensions: function( element ) {\n\t\tvar i = 0,\n\t\t\twidths = [],\n\t\t\tborders = [\n\t\t\t\telement.css( \"borderTopWidth\" ),\n\t\t\t\telement.css( \"borderRightWidth\" ),\n\t\t\t\telement.css( \"borderBottomWidth\" ),\n\t\t\t\telement.css( \"borderLeftWidth\" )\n\t\t\t],\n\t\t\tpaddings = [\n\t\t\t\telement.css( \"paddingTop\" ),\n\t\t\t\telement.css( \"paddingRight\" ),\n\t\t\t\telement.css( \"paddingBottom\" ),\n\t\t\t\telement.css( \"paddingLeft\" )\n\t\t\t];\n\n\t\tfor ( ; i < 4; i++ ) {\n\t\t\twidths[ i ] = ( parseFloat( borders[ i ] ) || 0 );\n\t\t\twidths[ i ] += ( parseFloat( paddings[ i ] ) || 0 );\n\t\t}\n\n\t\treturn {\n\t\t\theight: widths[ 0 ] + widths[ 2 ],\n\t\t\twidth: widths[ 1 ] + widths[ 3 ]\n\t\t};\n\t},\n\n\t_proportionallyResize: function() {\n\n\t\tif ( !this._proportionallyResizeElements.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar prel,\n\t\t\ti = 0,\n\t\t\telement = this.helper || this.element;\n\n\t\tfor ( ; i < this._proportionallyResizeElements.length; i++ ) {\n\n\t\t\tprel = this._proportionallyResizeElements[ i ];\n\n\t\t\t// TODO: Seems like a bug to cache this.outerDimensions\n\t\t\t// considering that we are in a loop.\n\t\t\tif ( !this.outerDimensions ) {\n\t\t\t\tthis.outerDimensions = this._getPaddingPlusBorderDimensions( prel );\n\t\t\t}\n\n\t\t\tprel.css( {\n\t\t\t\theight: ( element.height() - this.outerDimensions.height ) || 0,\n\t\t\t\twidth: ( element.width() - this.outerDimensions.width ) || 0\n\t\t\t} );\n\n\t\t}\n\n\t},\n\n\t_renderProxy: function() {\n\n\t\tvar el = this.element, o = this.options;\n\t\tthis.elementOffset = el.offset();\n\n\t\tif ( this._helper ) {\n\n\t\t\tthis.helper = this.helper || $( \"<div style='overflow:hidden;'></div>\" );\n\n\t\t\tthis._addClass( this.helper, this._helper );\n\t\t\tthis.helper.css( {\n\t\t\t\twidth: this.element.outerWidth(),\n\t\t\t\theight: this.element.outerHeight(),\n\t\t\t\tposition: \"absolute\",\n\t\t\t\tleft: this.elementOffset.left + \"px\",\n\t\t\t\ttop: this.elementOffset.top + \"px\",\n\t\t\t\tzIndex: ++o.zIndex //TODO: Don't modify option\n\t\t\t} );\n\n\t\t\tthis.helper\n\t\t\t\t.appendTo( \"body\" )\n\t\t\t\t.disableSelection();\n\n\t\t} else {\n\t\t\tthis.helper = this.element;\n\t\t}\n\n\t},\n\n\t_change: {\n\t\te: function( event, dx ) {\n\t\t\treturn { width: this.originalSize.width + dx };\n\t\t},\n\t\tw: function( event, dx ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { left: sp.left + dx, width: cs.width - dx };\n\t\t},\n\t\tn: function( event, dx, dy ) {\n\t\t\tvar cs = this.originalSize, sp = this.originalPosition;\n\t\t\treturn { top: sp.top + dy, height: cs.height - dy };\n\t\t},\n\t\ts: function( event, dx, dy ) {\n\t\t\treturn { height: this.originalSize.height + dy };\n\t\t},\n\t\tse: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tsw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.s.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tne: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.e.apply( this, [ event, dx, dy ] ) );\n\t\t},\n\t\tnw: function( event, dx, dy ) {\n\t\t\treturn $.extend( this._change.n.apply( this, arguments ),\n\t\t\t\tthis._change.w.apply( this, [ event, dx, dy ] ) );\n\t\t}\n\t},\n\n\t_propagate: function( n, event ) {\n\t\t$.ui.plugin.call( this, n, [ event, this.ui() ] );\n\t\t( n !== \"resize\" && this._trigger( n, event, this.ui() ) );\n\t},\n\n\tplugins: {},\n\n\tui: function() {\n\t\treturn {\n\t\t\toriginalElement: this.originalElement,\n\t\t\telement: this.element,\n\t\t\thelper: this.helper,\n\t\t\tposition: this.position,\n\t\t\tsize: this.size,\n\t\t\toriginalSize: this.originalSize,\n\t\t\toriginalPosition: this.originalPosition\n\t\t};\n\t}\n\n} );\n\n/*\n * Resizable Extensions\n */\n\n$.ui.plugin.add( \"resizable\", \"animate\", {\n\n\tstop: function( event ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tpr = that._proportionallyResizeElements,\n\t\t\tista = pr.length && ( /textarea/i ).test( pr[ 0 ].nodeName ),\n\t\t\tsoffseth = ista && that._hasScroll( pr[ 0 ], \"left\" ) ? 0 : that.sizeDiff.height,\n\t\t\tsoffsetw = ista ? 0 : that.sizeDiff.width,\n\t\t\tstyle = {\n\t\t\t\twidth: ( that.size.width - soffsetw ),\n\t\t\t\theight: ( that.size.height - soffseth )\n\t\t\t},\n\t\t\tleft = ( parseFloat( that.element.css( \"left\" ) ) +\n\t\t\t\t( that.position.left - that.originalPosition.left ) ) || null,\n\t\t\ttop = ( parseFloat( that.element.css( \"top\" ) ) +\n\t\t\t\t( that.position.top - that.originalPosition.top ) ) || null;\n\n\t\tthat.element.animate(\n\t\t\t$.extend( style, top && left ? { top: top, left: left } : {} ), {\n\t\t\t\tduration: o.animateDuration,\n\t\t\t\teasing: o.animateEasing,\n\t\t\t\tstep: function() {\n\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\twidth: parseFloat( that.element.css( \"width\" ) ),\n\t\t\t\t\t\theight: parseFloat( that.element.css( \"height\" ) ),\n\t\t\t\t\t\ttop: parseFloat( that.element.css( \"top\" ) ),\n\t\t\t\t\t\tleft: parseFloat( that.element.css( \"left\" ) )\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( pr && pr.length ) {\n\t\t\t\t\t\t$( pr[ 0 ] ).css( { width: data.width, height: data.height } );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Propagating resize, and updating values for each animation step\n\t\t\t\t\tthat._updateCache( data );\n\t\t\t\t\tthat._propagate( \"resize\", event );\n\n\t\t\t\t}\n\t\t\t}\n\t\t);\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"containment\", {\n\n\tstart: function() {\n\t\tvar element, p, co, ch, cw, width, height,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tel = that.element,\n\t\t\toc = o.containment,\n\t\t\tce = ( oc instanceof $ ) ?\n\t\t\t\toc.get( 0 ) :\n\t\t\t\t( /parent/.test( oc ) ) ? el.parent().get( 0 ) : oc;\n\n\t\tif ( !ce ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthat.containerElement = $( ce );\n\n\t\tif ( /document/.test( oc ) || oc === document ) {\n\t\t\tthat.containerOffset = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\t\t\tthat.containerPosition = {\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0\n\t\t\t};\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: $( document ),\n\t\t\t\tleft: 0,\n\t\t\t\ttop: 0,\n\t\t\t\twidth: $( document ).width(),\n\t\t\t\theight: $( document ).height() || document.body.parentNode.scrollHeight\n\t\t\t};\n\t\t} else {\n\t\t\telement = $( ce );\n\t\t\tp = [];\n\t\t\t$( [ \"Top\", \"Right\", \"Left\", \"Bottom\" ] ).each( function( i, name ) {\n\t\t\t\tp[ i ] = that._num( element.css( \"padding\" + name ) );\n\t\t\t} );\n\n\t\t\tthat.containerOffset = element.offset();\n\t\t\tthat.containerPosition = element.position();\n\t\t\tthat.containerSize = {\n\t\t\t\theight: ( element.innerHeight() - p[ 3 ] ),\n\t\t\t\twidth: ( element.innerWidth() - p[ 1 ] )\n\t\t\t};\n\n\t\t\tco = that.containerOffset;\n\t\t\tch = that.containerSize.height;\n\t\t\tcw = that.containerSize.width;\n\t\t\twidth = ( that._hasScroll ( ce, \"left\" ) ? ce.scrollWidth : cw );\n\t\t\theight = ( that._hasScroll ( ce ) ? ce.scrollHeight : ch ) ;\n\n\t\t\tthat.parentData = {\n\t\t\t\telement: ce,\n\t\t\t\tleft: co.left,\n\t\t\t\ttop: co.top,\n\t\t\t\twidth: width,\n\t\t\t\theight: height\n\t\t\t};\n\t\t}\n\t},\n\n\tresize: function( event ) {\n\t\tvar woset, hoset, isParent, isOffsetRelative,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcp = that.position,\n\t\t\tpRatio = that._aspectRatio || event.shiftKey,\n\t\t\tcop = {\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0\n\t\t\t},\n\t\t\tce = that.containerElement,\n\t\t\tcontinueResize = true;\n\n\t\tif ( ce[ 0 ] !== document && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\tcop = co;\n\t\t}\n\n\t\tif ( cp.left < ( that._helper ? co.left : 0 ) ) {\n\t\t\tthat.size.width = that.size.width +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.left - co.left ) :\n\t\t\t\t\t( that.position.left - cop.left ) );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.left = o.helper ? co.left : 0;\n\t\t}\n\n\t\tif ( cp.top < ( that._helper ? co.top : 0 ) ) {\n\t\t\tthat.size.height = that.size.height +\n\t\t\t\t( that._helper ?\n\t\t\t\t\t( that.position.top - co.top ) :\n\t\t\t\t\tthat.position.top );\n\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t\tthat.position.top = that._helper ? co.top : 0;\n\t\t}\n\n\t\tisParent = that.containerElement.get( 0 ) === that.element.parent().get( 0 );\n\t\tisOffsetRelative = /relative|absolute/.test( that.containerElement.css( \"position\" ) );\n\n\t\tif ( isParent && isOffsetRelative ) {\n\t\t\tthat.offset.left = that.parentData.left + that.position.left;\n\t\t\tthat.offset.top = that.parentData.top + that.position.top;\n\t\t} else {\n\t\t\tthat.offset.left = that.element.offset().left;\n\t\t\tthat.offset.top = that.element.offset().top;\n\t\t}\n\n\t\twoset = Math.abs( that.sizeDiff.width +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.left - cop.left :\n\t\t\t\t( that.offset.left - co.left ) ) );\n\n\t\thoset = Math.abs( that.sizeDiff.height +\n\t\t\t( that._helper ?\n\t\t\t\tthat.offset.top - cop.top :\n\t\t\t\t( that.offset.top - co.top ) ) );\n\n\t\tif ( woset + that.size.width >= that.parentData.width ) {\n\t\t\tthat.size.width = that.parentData.width - woset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.height = that.size.width / that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( hoset + that.size.height >= that.parentData.height ) {\n\t\t\tthat.size.height = that.parentData.height - hoset;\n\t\t\tif ( pRatio ) {\n\t\t\t\tthat.size.width = that.size.height * that.aspectRatio;\n\t\t\t\tcontinueResize = false;\n\t\t\t}\n\t\t}\n\n\t\tif ( !continueResize ) {\n\t\t\tthat.position.left = that.prevPosition.left;\n\t\t\tthat.position.top = that.prevPosition.top;\n\t\t\tthat.size.width = that.prevSize.width;\n\t\t\tthat.size.height = that.prevSize.height;\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tco = that.containerOffset,\n\t\t\tcop = that.containerPosition,\n\t\t\tce = that.containerElement,\n\t\t\thelper = $( that.helper ),\n\t\t\tho = helper.offset(),\n\t\t\tw = helper.outerWidth() - that.sizeDiff.width,\n\t\t\th = helper.outerHeight() - that.sizeDiff.height;\n\n\t\tif ( that._helper && !o.animate && ( /relative/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\n\t\tif ( that._helper && !o.animate && ( /static/ ).test( ce.css( \"position\" ) ) ) {\n\t\t\t$( this ).css( {\n\t\t\t\tleft: ho.left - cop.left - co.left,\n\t\t\t\twidth: w,\n\t\t\t\theight: h\n\t\t\t} );\n\t\t}\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"alsoResize\", {\n\n\tstart: function() {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options;\n\n\t\t$( o.alsoResize ).each( function() {\n\t\t\tvar el = $( this );\n\t\t\tel.data( \"ui-resizable-alsoresize\", {\n\t\t\t\twidth: parseFloat( el.width() ), height: parseFloat( el.height() ),\n\t\t\t\tleft: parseFloat( el.css( \"left\" ) ), top: parseFloat( el.css( \"top\" ) )\n\t\t\t} );\n\t\t} );\n\t},\n\n\tresize: function( event, ui ) {\n\t\tvar that = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\tdelta = {\n\t\t\t\theight: ( that.size.height - os.height ) || 0,\n\t\t\t\twidth: ( that.size.width - os.width ) || 0,\n\t\t\t\ttop: ( that.position.top - op.top ) || 0,\n\t\t\t\tleft: ( that.position.left - op.left ) || 0\n\t\t\t};\n\n\t\t\t$( o.alsoResize ).each( function() {\n\t\t\t\tvar el = $( this ), start = $( this ).data( \"ui-resizable-alsoresize\" ), style = {},\n\t\t\t\t\tcss = el.parents( ui.originalElement[ 0 ] ).length ?\n\t\t\t\t\t\t\t[ \"width\", \"height\" ] :\n\t\t\t\t\t\t\t[ \"width\", \"height\", \"top\", \"left\" ];\n\n\t\t\t\t$.each( css, function( i, prop ) {\n\t\t\t\t\tvar sum = ( start[ prop ] || 0 ) + ( delta[ prop ] || 0 );\n\t\t\t\t\tif ( sum && sum >= 0 ) {\n\t\t\t\t\t\tstyle[ prop ] = sum || null;\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tel.css( style );\n\t\t\t} );\n\t},\n\n\tstop: function() {\n\t\t$( this ).removeData( \"ui-resizable-alsoresize\" );\n\t}\n} );\n\n$.ui.plugin.add( \"resizable\", \"ghost\", {\n\n\tstart: function() {\n\n\t\tvar that = $( this ).resizable( \"instance\" ), cs = that.size;\n\n\t\tthat.ghost = that.originalElement.clone();\n\t\tthat.ghost.css( {\n\t\t\topacity: 0.25,\n\t\t\tdisplay: \"block\",\n\t\t\tposition: \"relative\",\n\t\t\theight: cs.height,\n\t\t\twidth: cs.width,\n\t\t\tmargin: 0,\n\t\t\tleft: 0,\n\t\t\ttop: 0\n\t\t} );\n\n\t\tthat._addClass( that.ghost, \"ui-resizable-ghost\" );\n\n\t\t// DEPRECATED\n\t\t// TODO: remove after 1.12\n\t\tif ( $.uiBackCompat !== false && typeof that.options.ghost === \"string\" ) {\n\n\t\t\t// Ghost option\n\t\t\tthat.ghost.addClass( this.options.ghost );\n\t\t}\n\n\t\tthat.ghost.appendTo( that.helper );\n\n\t},\n\n\tresize: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost ) {\n\t\t\tthat.ghost.css( {\n\t\t\t\tposition: \"relative\",\n\t\t\t\theight: that.size.height,\n\t\t\t\twidth: that.size.width\n\t\t\t} );\n\t\t}\n\t},\n\n\tstop: function() {\n\t\tvar that = $( this ).resizable( \"instance\" );\n\t\tif ( that.ghost && that.helper ) {\n\t\t\tthat.helper.get( 0 ).removeChild( that.ghost.get( 0 ) );\n\t\t}\n\t}\n\n} );\n\n$.ui.plugin.add( \"resizable\", \"grid\", {\n\n\tresize: function() {\n\t\tvar outerDimensions,\n\t\t\tthat = $( this ).resizable( \"instance\" ),\n\t\t\to = that.options,\n\t\t\tcs = that.size,\n\t\t\tos = that.originalSize,\n\t\t\top = that.originalPosition,\n\t\t\ta = that.axis,\n\t\t\tgrid = typeof o.grid === \"number\" ? [ o.grid, o.grid ] : o.grid,\n\t\t\tgridX = ( grid[ 0 ] || 1 ),\n\t\t\tgridY = ( grid[ 1 ] || 1 ),\n\t\t\tox = Math.round( ( cs.width - os.width ) / gridX ) * gridX,\n\t\t\toy = Math.round( ( cs.height - os.height ) / gridY ) * gridY,\n\t\t\tnewWidth = os.width + ox,\n\t\t\tnewHeight = os.height + oy,\n\t\t\tisMaxWidth = o.maxWidth && ( o.maxWidth < newWidth ),\n\t\t\tisMaxHeight = o.maxHeight && ( o.maxHeight < newHeight ),\n\t\t\tisMinWidth = o.minWidth && ( o.minWidth > newWidth ),\n\t\t\tisMinHeight = o.minHeight && ( o.minHeight > newHeight );\n\n\t\to.grid = grid;\n\n\t\tif ( isMinWidth ) {\n\t\t\tnewWidth += gridX;\n\t\t}\n\t\tif ( isMinHeight ) {\n\t\t\tnewHeight += gridY;\n\t\t}\n\t\tif ( isMaxWidth ) {\n\t\t\tnewWidth -= gridX;\n\t\t}\n\t\tif ( isMaxHeight ) {\n\t\t\tnewHeight -= gridY;\n\t\t}\n\n\t\tif ( /^(se|s|e)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t} else if ( /^(ne)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.top = op.top - oy;\n\t\t} else if ( /^(sw)$/.test( a ) ) {\n\t\t\tthat.size.width = newWidth;\n\t\t\tthat.size.height = newHeight;\n\t\t\tthat.position.left = op.left - ox;\n\t\t} else {\n\t\t\tif ( newHeight - gridY <= 0 || newWidth - gridX <= 0 ) {\n\t\t\t\touterDimensions = that._getPaddingPlusBorderDimensions( this );\n\t\t\t}\n\n\t\t\tif ( newHeight - gridY > 0 ) {\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top - oy;\n\t\t\t} else {\n\t\t\t\tnewHeight = gridY - outerDimensions.height;\n\t\t\t\tthat.size.height = newHeight;\n\t\t\t\tthat.position.top = op.top + os.height - newHeight;\n\t\t\t}\n\t\t\tif ( newWidth - gridX > 0 ) {\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left - ox;\n\t\t\t} else {\n\t\t\t\tnewWidth = gridX - outerDimensions.width;\n\t\t\t\tthat.size.width = newWidth;\n\t\t\t\tthat.position.left = op.left + os.width - newWidth;\n\t\t\t}\n\t\t}\n\t}\n\n} );\n\nvar widgetsResizable = $.ui.resizable;\n\n\n/*!\n * jQuery UI Dialog 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Dialog\n//>>group: Widgets\n//>>description: Displays customizable dialog windows.\n//>>docs: http://api.jqueryui.com/dialog/\n//>>demos: http://jqueryui.com/dialog/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/dialog.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.dialog\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoOpen: true,\n\t\tbuttons: [],\n\t\tclasses: {\n\t\t\t\"ui-dialog\": \"ui-corner-all\",\n\t\t\t\"ui-dialog-titlebar\": \"ui-corner-all\"\n\t\t},\n\t\tcloseOnEscape: true,\n\t\tcloseText: \"Close\",\n\t\tdraggable: true,\n\t\thide: null,\n\t\theight: \"auto\",\n\t\tmaxHeight: null,\n\t\tmaxWidth: null,\n\t\tminHeight: 150,\n\t\tminWidth: 150,\n\t\tmodal: false,\n\t\tposition: {\n\t\t\tmy: \"center\",\n\t\t\tat: \"center\",\n\t\t\tof: window,\n\t\t\tcollision: \"fit\",\n\n\t\t\t// Ensure the titlebar is always visible\n\t\t\tusing: function( pos ) {\n\t\t\t\tvar topOffset = $( this ).css( pos ).offset().top;\n\t\t\t\tif ( topOffset < 0 ) {\n\t\t\t\t\t$( this ).css( \"top\", pos.top - topOffset );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tresizable: true,\n\t\tshow: null,\n\t\ttitle: null,\n\t\twidth: 300,\n\n\t\t// Callbacks\n\t\tbeforeClose: null,\n\t\tclose: null,\n\t\tdrag: null,\n\t\tdragStart: null,\n\t\tdragStop: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tresize: null,\n\t\tresizeStart: null,\n\t\tresizeStop: null\n\t},\n\n\tsizeRelatedOptions: {\n\t\tbuttons: true,\n\t\theight: true,\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true,\n\t\twidth: true\n\t},\n\n\tresizableRelatedOptions: {\n\t\tmaxHeight: true,\n\t\tmaxWidth: true,\n\t\tminHeight: true,\n\t\tminWidth: true\n\t},\n\n\t_create: function() {\n\t\tthis.originalCss = {\n\t\t\tdisplay: this.element[ 0 ].style.display,\n\t\t\twidth: this.element[ 0 ].style.width,\n\t\t\tminHeight: this.element[ 0 ].style.minHeight,\n\t\t\tmaxHeight: this.element[ 0 ].style.maxHeight,\n\t\t\theight: this.element[ 0 ].style.height\n\t\t};\n\t\tthis.originalPosition = {\n\t\t\tparent: this.element.parent(),\n\t\t\tindex: this.element.parent().children().index( this.element )\n\t\t};\n\t\tthis.originalTitle = this.element.attr( \"title\" );\n\t\tif ( this.options.title == null && this.originalTitle != null ) {\n\t\t\tthis.options.title = this.originalTitle;\n\t\t}\n\n\t\t// Dialogs can't be disabled\n\t\tif ( this.options.disabled ) {\n\t\t\tthis.options.disabled = false;\n\t\t}\n\n\t\tthis._createWrapper();\n\n\t\tthis.element\n\t\t\t.show()\n\t\t\t.removeAttr( \"title\" )\n\t\t\t.appendTo( this.uiDialog );\n\n\t\tthis._addClass( \"ui-dialog-content\", \"ui-widget-content\" );\n\n\t\tthis._createTitlebar();\n\t\tthis._createButtonPane();\n\n\t\tif ( this.options.draggable && $.fn.draggable ) {\n\t\t\tthis._makeDraggable();\n\t\t}\n\t\tif ( this.options.resizable && $.fn.resizable ) {\n\t\t\tthis._makeResizable();\n\t\t}\n\n\t\tthis._isOpen = false;\n\n\t\tthis._trackFocus();\n\t},\n\n\t_init: function() {\n\t\tif ( this.options.autoOpen ) {\n\t\t\tthis.open();\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\t\tif ( element && ( element.jquery || element.nodeType ) ) {\n\t\t\treturn $( element );\n\t\t}\n\t\treturn this.document.find( element || \"body\" ).eq( 0 );\n\t},\n\n\t_destroy: function() {\n\t\tvar next,\n\t\t\toriginalPosition = this.originalPosition;\n\n\t\tthis._untrackInstance();\n\t\tthis._destroyOverlay();\n\n\t\tthis.element\n\t\t\t.removeUniqueId()\n\t\t\t.css( this.originalCss )\n\n\t\t\t// Without detaching first, the following becomes really slow\n\t\t\t.detach();\n\n\t\tthis.uiDialog.remove();\n\n\t\tif ( this.originalTitle ) {\n\t\t\tthis.element.attr( \"title\", this.originalTitle );\n\t\t}\n\n\t\tnext = originalPosition.parent.children().eq( originalPosition.index );\n\n\t\t// Don't try to place the dialog next to itself (#8613)\n\t\tif ( next.length && next[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tnext.before( this.element );\n\t\t} else {\n\t\t\toriginalPosition.parent.append( this.element );\n\t\t}\n\t},\n\n\twidget: function() {\n\t\treturn this.uiDialog;\n\t},\n\n\tdisable: $.noop,\n\tenable: $.noop,\n\n\tclose: function( event ) {\n\t\tvar that = this;\n\n\t\tif ( !this._isOpen || this._trigger( \"beforeClose\", event ) === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = false;\n\t\tthis._focusedElement = null;\n\t\tthis._destroyOverlay();\n\t\tthis._untrackInstance();\n\n\t\tif ( !this.opener.filter( \":focusable\" ).trigger( \"focus\" ).length ) {\n\n\t\t\t// Hiding a focused element doesn't trigger blur in WebKit\n\t\t\t// so in case we have nothing to focus on, explicitly blur the active element\n\t\t\t// https://bugs.webkit.org/show_bug.cgi?id=47182\n\t\t\t$.ui.safeBlur( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\t\t}\n\n\t\tthis._hide( this.uiDialog, this.options.hide, function() {\n\t\t\tthat._trigger( \"close\", event );\n\t\t} );\n\t},\n\n\tisOpen: function() {\n\t\treturn this._isOpen;\n\t},\n\n\tmoveToTop: function() {\n\t\tthis._moveToTop();\n\t},\n\n\t_moveToTop: function( event, silent ) {\n\t\tvar moved = false,\n\t\t\tzIndices = this.uiDialog.siblings( \".ui-front:visible\" ).map( function() {\n\t\t\t\treturn +$( this ).css( \"z-index\" );\n\t\t\t} ).get(),\n\t\t\tzIndexMax = Math.max.apply( null, zIndices );\n\n\t\tif ( zIndexMax >= +this.uiDialog.css( \"z-index\" ) ) {\n\t\t\tthis.uiDialog.css( \"z-index\", zIndexMax + 1 );\n\t\t\tmoved = true;\n\t\t}\n\n\t\tif ( moved && !silent ) {\n\t\t\tthis._trigger( \"focus\", event );\n\t\t}\n\t\treturn moved;\n\t},\n\n\topen: function() {\n\t\tvar that = this;\n\t\tif ( this._isOpen ) {\n\t\t\tif ( this._moveToTop() ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tthis._isOpen = true;\n\t\tthis.opener = $( $.ui.safeActiveElement( this.document[ 0 ] ) );\n\n\t\tthis._size();\n\t\tthis._position();\n\t\tthis._createOverlay();\n\t\tthis._moveToTop( null, true );\n\n\t\t// Ensure the overlay is moved to the top with the dialog, but only when\n\t\t// opening. The overlay shouldn't move after the dialog is open so that\n\t\t// modeless dialogs opened after the modal dialog stack properly.\n\t\tif ( this.overlay ) {\n\t\t\tthis.overlay.css( \"z-index\", this.uiDialog.css( \"z-index\" ) - 1 );\n\t\t}\n\n\t\tthis._show( this.uiDialog, this.options.show, function() {\n\t\t\tthat._focusTabbable();\n\t\t\tthat._trigger( \"focus\" );\n\t\t} );\n\n\t\t// Track the dialog immediately upon openening in case a focus event\n\t\t// somehow occurs outside of the dialog before an element inside the\n\t\t// dialog is focused (#10152)\n\t\tthis._makeFocusTarget();\n\n\t\tthis._trigger( \"open\" );\n\t},\n\n\t_focusTabbable: function() {\n\n\t\t// Set focus to the first match:\n\t\t// 1. An element that was focused previously\n\t\t// 2. First element inside the dialog matching [autofocus]\n\t\t// 3. Tabbable element inside the content element\n\t\t// 4. Tabbable element inside the buttonpane\n\t\t// 5. The close button\n\t\t// 6. The dialog itself\n\t\tvar hasFocus = this._focusedElement;\n\t\tif ( !hasFocus ) {\n\t\t\thasFocus = this.element.find( \"[autofocus]\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.element.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogButtonPane.find( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialogTitlebarClose.filter( \":tabbable\" );\n\t\t}\n\t\tif ( !hasFocus.length ) {\n\t\t\thasFocus = this.uiDialog;\n\t\t}\n\t\thasFocus.eq( 0 ).trigger( \"focus\" );\n\t},\n\n\t_keepFocus: function( event ) {\n\t\tfunction checkFocus() {\n\t\t\tvar activeElement = $.ui.safeActiveElement( this.document[ 0 ] ),\n\t\t\t\tisActive = this.uiDialog[ 0 ] === activeElement ||\n\t\t\t\t\t$.contains( this.uiDialog[ 0 ], activeElement );\n\t\t\tif ( !isActive ) {\n\t\t\t\tthis._focusTabbable();\n\t\t\t}\n\t\t}\n\t\tevent.preventDefault();\n\t\tcheckFocus.call( this );\n\n\t\t// support: IE\n\t\t// IE <= 8 doesn't prevent moving focus even with event.preventDefault()\n\t\t// so we check again later\n\t\tthis._delay( checkFocus );\n\t},\n\n\t_createWrapper: function() {\n\t\tthis.uiDialog = $( \"<div>\" )\n\t\t\t.hide()\n\t\t\t.attr( {\n\n\t\t\t\t// Setting tabIndex makes the div focusable\n\t\t\t\ttabIndex: -1,\n\t\t\t\trole: \"dialog\"\n\t\t\t} )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.uiDialog, \"ui-dialog\", \"ui-widget ui-widget-content ui-front\" );\n\t\tthis._on( this.uiDialog, {\n\t\t\tkeydown: function( event ) {\n\t\t\t\tif ( this.options.closeOnEscape && !event.isDefaultPrevented() && event.keyCode &&\n\t\t\t\t\t\tevent.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tthis.close( event );\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// Prevent tabbing out of dialogs\n\t\t\t\tif ( event.keyCode !== $.ui.keyCode.TAB || event.isDefaultPrevented() ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tvar tabbables = this.uiDialog.find( \":tabbable\" ),\n\t\t\t\t\tfirst = tabbables.filter( \":first\" ),\n\t\t\t\t\tlast = tabbables.filter( \":last\" );\n\n\t\t\t\tif ( ( event.target === last[ 0 ] || event.target === this.uiDialog[ 0 ] ) &&\n\t\t\t\t\t\t!event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tfirst.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t} else if ( ( event.target === first[ 0 ] ||\n\t\t\t\t\t\tevent.target === this.uiDialog[ 0 ] ) && event.shiftKey ) {\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tlast.trigger( \"focus\" );\n\t\t\t\t\t} );\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t},\n\t\t\tmousedown: function( event ) {\n\t\t\t\tif ( this._moveToTop( event ) ) {\n\t\t\t\t\tthis._focusTabbable();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// We assume that any existing aria-describedby attribute means\n\t\t// that the dialog content is marked up properly\n\t\t// otherwise we brute force the content as the description\n\t\tif ( !this.element.find( \"[aria-describedby]\" ).length ) {\n\t\t\tthis.uiDialog.attr( {\n\t\t\t\t\"aria-describedby\": this.element.uniqueId().attr( \"id\" )\n\t\t\t} );\n\t\t}\n\t},\n\n\t_createTitlebar: function() {\n\t\tvar uiDialogTitle;\n\n\t\tthis.uiDialogTitlebar = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogTitlebar,\n\t\t\t\"ui-dialog-titlebar\", \"ui-widget-header ui-helper-clearfix\" );\n\t\tthis._on( this.uiDialogTitlebar, {\n\t\t\tmousedown: function( event ) {\n\n\t\t\t\t// Don't prevent click on close button (#8838)\n\t\t\t\t// Focusing a dialog that is partially scrolled out of view\n\t\t\t\t// causes the browser to scroll it into view, preventing the click event\n\t\t\t\tif ( !$( event.target ).closest( \".ui-dialog-titlebar-close\" ) ) {\n\n\t\t\t\t\t// Dialog isn't getting focus when dragging (#8063)\n\t\t\t\t\tthis.uiDialog.trigger( \"focus\" );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\t// Support: IE\n\t\t// Use type=\"button\" to prevent enter keypresses in textboxes from closing the\n\t\t// dialog in IE (#9312)\n\t\tthis.uiDialogTitlebarClose = $( \"<button type='button'></button>\" )\n\t\t\t.button( {\n\t\t\t\tlabel: $( \"<a>\" ).text( this.options.closeText ).html(),\n\t\t\t\ticon: \"ui-icon-closethick\",\n\t\t\t\tshowLabel: false\n\t\t\t} )\n\t\t\t.appendTo( this.uiDialogTitlebar );\n\n\t\tthis._addClass( this.uiDialogTitlebarClose, \"ui-dialog-titlebar-close\" );\n\t\tthis._on( this.uiDialogTitlebarClose, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t} );\n\n\t\tuiDialogTitle = $( \"<span>\" ).uniqueId().prependTo( this.uiDialogTitlebar );\n\t\tthis._addClass( uiDialogTitle, \"ui-dialog-title\" );\n\t\tthis._title( uiDialogTitle );\n\n\t\tthis.uiDialogTitlebar.prependTo( this.uiDialog );\n\n\t\tthis.uiDialog.attr( {\n\t\t\t\"aria-labelledby\": uiDialogTitle.attr( \"id\" )\n\t\t} );\n\t},\n\n\t_title: function( title ) {\n\t\tif ( this.options.title ) {\n\t\t\ttitle.text( this.options.title );\n\t\t} else {\n\t\t\ttitle.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_createButtonPane: function() {\n\t\tthis.uiDialogButtonPane = $( \"<div>\" );\n\t\tthis._addClass( this.uiDialogButtonPane, \"ui-dialog-buttonpane\",\n\t\t\t\"ui-widget-content ui-helper-clearfix\" );\n\n\t\tthis.uiButtonSet = $( \"<div>\" )\n\t\t\t.appendTo( this.uiDialogButtonPane );\n\t\tthis._addClass( this.uiButtonSet, \"ui-dialog-buttonset\" );\n\n\t\tthis._createButtons();\n\t},\n\n\t_createButtons: function() {\n\t\tvar that = this,\n\t\t\tbuttons = this.options.buttons;\n\n\t\t// If we already have a button pane, remove it\n\t\tthis.uiDialogButtonPane.remove();\n\t\tthis.uiButtonSet.empty();\n\n\t\tif ( $.isEmptyObject( buttons ) || ( $.isArray( buttons ) && !buttons.length ) ) {\n\t\t\tthis._removeClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\t\treturn;\n\t\t}\n\n\t\t$.each( buttons, function( name, props ) {\n\t\t\tvar click, buttonOptions;\n\t\t\tprops = $.isFunction( props ) ?\n\t\t\t\t{ click: props, text: name } :\n\t\t\t\tprops;\n\n\t\t\t// Default to a non-submitting button\n\t\t\tprops = $.extend( { type: \"button\" }, props );\n\n\t\t\t// Change the context for the click callback to be the main element\n\t\t\tclick = props.click;\n\t\t\tbuttonOptions = {\n\t\t\t\ticon: props.icon,\n\t\t\t\ticonPosition: props.iconPosition,\n\t\t\t\tshowLabel: props.showLabel,\n\n\t\t\t\t// Deprecated options\n\t\t\t\ticons: props.icons,\n\t\t\t\ttext: props.text\n\t\t\t};\n\n\t\t\tdelete props.click;\n\t\t\tdelete props.icon;\n\t\t\tdelete props.iconPosition;\n\t\t\tdelete props.showLabel;\n\n\t\t\t// Deprecated options\n\t\t\tdelete props.icons;\n\t\t\tif ( typeof props.text === \"boolean\" ) {\n\t\t\t\tdelete props.text;\n\t\t\t}\n\n\t\t\t$( \"<button></button>\", props )\n\t\t\t\t.button( buttonOptions )\n\t\t\t\t.appendTo( that.uiButtonSet )\n\t\t\t\t.on( \"click\", function() {\n\t\t\t\t\tclick.apply( that.element[ 0 ], arguments );\n\t\t\t\t} );\n\t\t} );\n\t\tthis._addClass( this.uiDialog, \"ui-dialog-buttons\" );\n\t\tthis.uiDialogButtonPane.appendTo( this.uiDialog );\n\t},\n\n\t_makeDraggable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\tposition: ui.position,\n\t\t\t\toffset: ui.offset\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.draggable( {\n\t\t\tcancel: \".ui-dialog-content, .ui-dialog-titlebar-close\",\n\t\t\thandle: \".ui-dialog-titlebar\",\n\t\t\tcontainment: \"document\",\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"dragStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tdrag: function( event, ui ) {\n\t\t\t\tthat._trigger( \"drag\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar left = ui.offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = ui.offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-dragging\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"dragStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeResizable: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options,\n\t\t\thandles = options.resizable,\n\n\t\t\t// .ui-resizable has position: relative defined in the stylesheet\n\t\t\t// but dialogs have to use absolute or fixed positioning\n\t\t\tposition = this.uiDialog.css( \"position\" ),\n\t\t\tresizeHandles = typeof handles === \"string\" ?\n\t\t\t\thandles :\n\t\t\t\t\"n,e,s,w,se,sw,ne,nw\";\n\n\t\tfunction filteredUi( ui ) {\n\t\t\treturn {\n\t\t\t\toriginalPosition: ui.originalPosition,\n\t\t\t\toriginalSize: ui.originalSize,\n\t\t\t\tposition: ui.position,\n\t\t\t\tsize: ui.size\n\t\t\t};\n\t\t}\n\n\t\tthis.uiDialog.resizable( {\n\t\t\tcancel: \".ui-dialog-content\",\n\t\t\tcontainment: \"document\",\n\t\t\talsoResize: this.element,\n\t\t\tmaxWidth: options.maxWidth,\n\t\t\tmaxHeight: options.maxHeight,\n\t\t\tminWidth: options.minWidth,\n\t\t\tminHeight: this._minHeight(),\n\t\t\thandles: resizeHandles,\n\t\t\tstart: function( event, ui ) {\n\t\t\t\tthat._addClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._blockFrames();\n\t\t\t\tthat._trigger( \"resizeStart\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tresize: function( event, ui ) {\n\t\t\t\tthat._trigger( \"resize\", event, filteredUi( ui ) );\n\t\t\t},\n\t\t\tstop: function( event, ui ) {\n\t\t\t\tvar offset = that.uiDialog.offset(),\n\t\t\t\t\tleft = offset.left - that.document.scrollLeft(),\n\t\t\t\t\ttop = offset.top - that.document.scrollTop();\n\n\t\t\t\toptions.height = that.uiDialog.height();\n\t\t\t\toptions.width = that.uiDialog.width();\n\t\t\t\toptions.position = {\n\t\t\t\t\tmy: \"left top\",\n\t\t\t\t\tat: \"left\" + ( left >= 0 ? \"+\" : \"\" ) + left + \" \" +\n\t\t\t\t\t\t\"top\" + ( top >= 0 ? \"+\" : \"\" ) + top,\n\t\t\t\t\tof: that.window\n\t\t\t\t};\n\t\t\t\tthat._removeClass( $( this ), \"ui-dialog-resizing\" );\n\t\t\t\tthat._unblockFrames();\n\t\t\t\tthat._trigger( \"resizeStop\", event, filteredUi( ui ) );\n\t\t\t}\n\t\t} )\n\t\t\t.css( \"position\", position );\n\t},\n\n\t_trackFocus: function() {\n\t\tthis._on( this.widget(), {\n\t\t\tfocusin: function( event ) {\n\t\t\t\tthis._makeFocusTarget();\n\t\t\t\tthis._focusedElement = $( event.target );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_makeFocusTarget: function() {\n\t\tthis._untrackInstance();\n\t\tthis._trackingInstances().unshift( this );\n\t},\n\n\t_untrackInstance: function() {\n\t\tvar instances = this._trackingInstances(),\n\t\t\texists = $.inArray( this, instances );\n\t\tif ( exists !== -1 ) {\n\t\t\tinstances.splice( exists, 1 );\n\t\t}\n\t},\n\n\t_trackingInstances: function() {\n\t\tvar instances = this.document.data( \"ui-dialog-instances\" );\n\t\tif ( !instances ) {\n\t\t\tinstances = [];\n\t\t\tthis.document.data( \"ui-dialog-instances\", instances );\n\t\t}\n\t\treturn instances;\n\t},\n\n\t_minHeight: function() {\n\t\tvar options = this.options;\n\n\t\treturn options.height === \"auto\" ?\n\t\t\toptions.minHeight :\n\t\t\tMath.min( options.minHeight, options.height );\n\t},\n\n\t_position: function() {\n\n\t\t// Need to show the dialog to get the actual offset in the position plugin\n\t\tvar isVisible = this.uiDialog.is( \":visible\" );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.show();\n\t\t}\n\t\tthis.uiDialog.position( this.options.position );\n\t\tif ( !isVisible ) {\n\t\t\tthis.uiDialog.hide();\n\t\t}\n\t},\n\n\t_setOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tresize = false,\n\t\t\tresizableOptions = {};\n\n\t\t$.each( options, function( key, value ) {\n\t\t\tthat._setOption( key, value );\n\n\t\t\tif ( key in that.sizeRelatedOptions ) {\n\t\t\t\tresize = true;\n\t\t\t}\n\t\t\tif ( key in that.resizableRelatedOptions ) {\n\t\t\t\tresizableOptions[ key ] = value;\n\t\t\t}\n\t\t} );\n\n\t\tif ( resize ) {\n\t\t\tthis._size();\n\t\t\tthis._position();\n\t\t}\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", resizableOptions );\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar isDraggable, isResizable,\n\t\t\tuiDialog = this.uiDialog;\n\n\t\tif ( key === \"disabled\" ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.uiDialog.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"buttons\" ) {\n\t\t\tthis._createButtons();\n\t\t}\n\n\t\tif ( key === \"closeText\" ) {\n\t\t\tthis.uiDialogTitlebarClose.button( {\n\n\t\t\t\t// Ensure that we always pass a string\n\t\t\t\tlabel: $( \"<a>\" ).text( \"\" + this.options.closeText ).html()\n\t\t\t} );\n\t\t}\n\n\t\tif ( key === \"draggable\" ) {\n\t\t\tisDraggable = uiDialog.is( \":data(ui-draggable)\" );\n\t\t\tif ( isDraggable && !value ) {\n\t\t\t\tuiDialog.draggable( \"destroy\" );\n\t\t\t}\n\n\t\t\tif ( !isDraggable && value ) {\n\t\t\t\tthis._makeDraggable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"position\" ) {\n\t\t\tthis._position();\n\t\t}\n\n\t\tif ( key === \"resizable\" ) {\n\n\t\t\t// currently resizable, becoming non-resizable\n\t\t\tisResizable = uiDialog.is( \":data(ui-resizable)\" );\n\t\t\tif ( isResizable && !value ) {\n\t\t\t\tuiDialog.resizable( \"destroy\" );\n\t\t\t}\n\n\t\t\t// Currently resizable, changing handles\n\t\t\tif ( isResizable && typeof value === \"string\" ) {\n\t\t\t\tuiDialog.resizable( \"option\", \"handles\", value );\n\t\t\t}\n\n\t\t\t// Currently non-resizable, becoming resizable\n\t\t\tif ( !isResizable && value !== false ) {\n\t\t\t\tthis._makeResizable();\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"title\" ) {\n\t\t\tthis._title( this.uiDialogTitlebar.find( \".ui-dialog-title\" ) );\n\t\t}\n\t},\n\n\t_size: function() {\n\n\t\t// If the user has resized the dialog, the .ui-dialog and .ui-dialog-content\n\t\t// divs will both have width and height set, so we need to reset them\n\t\tvar nonContentHeight, minContentHeight, maxContentHeight,\n\t\t\toptions = this.options;\n\n\t\t// Reset content sizing\n\t\tthis.element.show().css( {\n\t\t\twidth: \"auto\",\n\t\t\tminHeight: 0,\n\t\t\tmaxHeight: \"none\",\n\t\t\theight: 0\n\t\t} );\n\n\t\tif ( options.minWidth > options.width ) {\n\t\t\toptions.width = options.minWidth;\n\t\t}\n\n\t\t// Reset wrapper sizing\n\t\t// determine the height of all the non-content elements\n\t\tnonContentHeight = this.uiDialog.css( {\n\t\t\theight: \"auto\",\n\t\t\twidth: options.width\n\t\t} )\n\t\t\t.outerHeight();\n\t\tminContentHeight = Math.max( 0, options.minHeight - nonContentHeight );\n\t\tmaxContentHeight = typeof options.maxHeight === \"number\" ?\n\t\t\tMath.max( 0, options.maxHeight - nonContentHeight ) :\n\t\t\t\"none\";\n\n\t\tif ( options.height === \"auto\" ) {\n\t\t\tthis.element.css( {\n\t\t\t\tminHeight: minContentHeight,\n\t\t\t\tmaxHeight: maxContentHeight,\n\t\t\t\theight: \"auto\"\n\t\t\t} );\n\t\t} else {\n\t\t\tthis.element.height( Math.max( 0, options.height - nonContentHeight ) );\n\t\t}\n\n\t\tif ( this.uiDialog.is( \":data(ui-resizable)\" ) ) {\n\t\t\tthis.uiDialog.resizable( \"option\", \"minHeight\", this._minHeight() );\n\t\t}\n\t},\n\n\t_blockFrames: function() {\n\t\tthis.iframeBlocks = this.document.find( \"iframe\" ).map( function() {\n\t\t\tvar iframe = $( this );\n\n\t\t\treturn $( \"<div>\" )\n\t\t\t\t.css( {\n\t\t\t\t\tposition: \"absolute\",\n\t\t\t\t\twidth: iframe.outerWidth(),\n\t\t\t\t\theight: iframe.outerHeight()\n\t\t\t\t} )\n\t\t\t\t.appendTo( iframe.parent() )\n\t\t\t\t.offset( iframe.offset() )[ 0 ];\n\t\t} );\n\t},\n\n\t_unblockFrames: function() {\n\t\tif ( this.iframeBlocks ) {\n\t\t\tthis.iframeBlocks.remove();\n\t\t\tdelete this.iframeBlocks;\n\t\t}\n\t},\n\n\t_allowInteraction: function( event ) {\n\t\tif ( $( event.target ).closest( \".ui-dialog\" ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\t// TODO: Remove hack when datepicker implements\n\t\t// the .ui-front logic (#8989)\n\t\treturn !!$( event.target ).closest( \".ui-datepicker\" ).length;\n\t},\n\n\t_createOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// We use a delay in case the overlay is created from an\n\t\t// event that we're going to be cancelling (#2804)\n\t\tvar isOpening = true;\n\t\tthis._delay( function() {\n\t\t\tisOpening = false;\n\t\t} );\n\n\t\tif ( !this.document.data( \"ui-dialog-overlays\" ) ) {\n\n\t\t\t// Prevent use of anchors and inputs\n\t\t\t// Using _on() for an event handler shared across many instances is\n\t\t\t// safe because the dialogs stack and must be closed in reverse order\n\t\t\tthis._on( this.document, {\n\t\t\t\tfocusin: function( event ) {\n\t\t\t\t\tif ( isOpening ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !this._allowInteraction( event ) ) {\n\t\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\t\tthis._trackingInstances()[ 0 ]._focusTabbable();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis.overlay = $( \"<div>\" )\n\t\t\t.appendTo( this._appendTo() );\n\n\t\tthis._addClass( this.overlay, null, \"ui-widget-overlay ui-front\" );\n\t\tthis._on( this.overlay, {\n\t\t\tmousedown: \"_keepFocus\"\n\t\t} );\n\t\tthis.document.data( \"ui-dialog-overlays\",\n\t\t\t( this.document.data( \"ui-dialog-overlays\" ) || 0 ) + 1 );\n\t},\n\n\t_destroyOverlay: function() {\n\t\tif ( !this.options.modal ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.overlay ) {\n\t\t\tvar overlays = this.document.data( \"ui-dialog-overlays\" ) - 1;\n\n\t\t\tif ( !overlays ) {\n\t\t\t\tthis._off( this.document, \"focusin\" );\n\t\t\t\tthis.document.removeData( \"ui-dialog-overlays\" );\n\t\t\t} else {\n\t\t\t\tthis.document.data( \"ui-dialog-overlays\", overlays );\n\t\t\t}\n\n\t\t\tthis.overlay.remove();\n\t\t\tthis.overlay = null;\n\t\t}\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for dialogClass option\n\t$.widget( \"ui.dialog\", $.ui.dialog, {\n\t\toptions: {\n\t\t\tdialogClass: \"\"\n\t\t},\n\t\t_createWrapper: function() {\n\t\t\tthis._super();\n\t\t\tthis.uiDialog.addClass( this.options.dialogClass );\n\t\t},\n\t\t_setOption: function( key, value ) {\n\t\t\tif ( key === \"dialogClass\" ) {\n\t\t\t\tthis.uiDialog\n\t\t\t\t\t.removeClass( this.options.dialogClass )\n\t\t\t\t\t.addClass( value );\n\t\t\t}\n\t\t\tthis._superApply( arguments );\n\t\t}\n\t} );\n}\n\nvar widgetsDialog = $.ui.dialog;\n\n\n/*!\n * jQuery UI Droppable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Droppable\n//>>group: Interactions\n//>>description: Enables drop targets for draggable elements.\n//>>docs: http://api.jqueryui.com/droppable/\n//>>demos: http://jqueryui.com/droppable/\n\n\n\n$.widget( \"ui.droppable\", {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"drop\",\n\toptions: {\n\t\taccept: \"*\",\n\t\taddClasses: true,\n\t\tgreedy: false,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tdeactivate: null,\n\t\tdrop: null,\n\t\tout: null,\n\t\tover: null\n\t},\n\t_create: function() {\n\n\t\tvar proportions,\n\t\t\to = this.options,\n\t\t\taccept = o.accept;\n\n\t\tthis.isover = false;\n\t\tthis.isout = true;\n\n\t\tthis.accept = $.isFunction( accept ) ? accept : function( d ) {\n\t\t\treturn d.is( accept );\n\t\t};\n\n\t\tthis.proportions = function( /* valueToWrite */ ) {\n\t\t\tif ( arguments.length ) {\n\n\t\t\t\t// Store the droppable's proportions\n\t\t\t\tproportions = arguments[ 0 ];\n\t\t\t} else {\n\n\t\t\t\t// Retrieve or derive the droppable's proportions\n\t\t\t\treturn proportions ?\n\t\t\t\t\tproportions :\n\t\t\t\t\tproportions = {\n\t\t\t\t\t\twidth: this.element[ 0 ].offsetWidth,\n\t\t\t\t\t\theight: this.element[ 0 ].offsetHeight\n\t\t\t\t\t};\n\t\t\t}\n\t\t};\n\n\t\tthis._addToManager( o.scope );\n\n\t\to.addClasses && this._addClass( \"ui-droppable\" );\n\n\t},\n\n\t_addToManager: function( scope ) {\n\n\t\t// Add the reference and positions to the manager\n\t\t$.ui.ddmanager.droppables[ scope ] = $.ui.ddmanager.droppables[ scope ] || [];\n\t\t$.ui.ddmanager.droppables[ scope ].push( this );\n\t},\n\n\t_splice: function( drop ) {\n\t\tvar i = 0;\n\t\tfor ( ; i < drop.length; i++ ) {\n\t\t\tif ( drop[ i ] === this ) {\n\t\t\t\tdrop.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t},\n\n\t_destroy: function() {\n\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\tthis._splice( drop );\n\t},\n\n\t_setOption: function( key, value ) {\n\n\t\tif ( key === \"accept\" ) {\n\t\t\tthis.accept = $.isFunction( value ) ? value : function( d ) {\n\t\t\t\treturn d.is( value );\n\t\t\t};\n\t\t} else if ( key === \"scope\" ) {\n\t\t\tvar drop = $.ui.ddmanager.droppables[ this.options.scope ];\n\n\t\t\tthis._splice( drop );\n\t\t\tthis._addToManager( value );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_activate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._addActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"activate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_deactivate: function( event ) {\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\tthis._removeActiveClass();\n\t\tif ( draggable ) {\n\t\t\tthis._trigger( \"deactivate\", event, this.ui( draggable ) );\n\t\t}\n\t},\n\n\t_over: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._addHoverClass();\n\t\t\tthis._trigger( \"over\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_out: function( event ) {\n\n\t\tvar draggable = $.ui.ddmanager.current;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ], ( draggable.currentItem ||\n\t\t\t\tdraggable.element ) ) ) {\n\t\t\tthis._removeHoverClass();\n\t\t\tthis._trigger( \"out\", event, this.ui( draggable ) );\n\t\t}\n\n\t},\n\n\t_drop: function( event, custom ) {\n\n\t\tvar draggable = custom || $.ui.ddmanager.current,\n\t\t\tchildrenIntersection = false;\n\n\t\t// Bail if draggable and droppable are same element\n\t\tif ( !draggable || ( draggable.currentItem ||\n\t\t\t\tdraggable.element )[ 0 ] === this.element[ 0 ] ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.element\n\t\t\t.find( \":data(ui-droppable)\" )\n\t\t\t.not( \".ui-draggable-dragging\" )\n\t\t\t.each( function() {\n\t\t\t\tvar inst = $( this ).droppable( \"instance\" );\n\t\t\t\tif (\n\t\t\t\t\tinst.options.greedy &&\n\t\t\t\t\t!inst.options.disabled &&\n\t\t\t\t\tinst.options.scope === draggable.options.scope &&\n\t\t\t\t\tinst.accept.call(\n\t\t\t\t\t\tinst.element[ 0 ], ( draggable.currentItem || draggable.element )\n\t\t\t\t\t) &&\n\t\t\t\t\tintersect(\n\t\t\t\t\t\tdraggable,\n\t\t\t\t\t\t$.extend( inst, { offset: inst.element.offset() } ),\n\t\t\t\t\t\tinst.options.tolerance, event\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tchildrenIntersection = true;\n\t\t\t\t\treturn false; }\n\t\t\t} );\n\t\tif ( childrenIntersection ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.accept.call( this.element[ 0 ],\n\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\tthis._removeActiveClass();\n\t\t\tthis._removeHoverClass();\n\n\t\t\tthis._trigger( \"drop\", event, this.ui( draggable ) );\n\t\t\treturn this.element;\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tui: function( c ) {\n\t\treturn {\n\t\t\tdraggable: ( c.currentItem || c.element ),\n\t\t\thelper: c.helper,\n\t\t\tposition: c.position,\n\t\t\toffset: c.positionAbs\n\t\t};\n\t},\n\n\t// Extension points just to make backcompat sane and avoid duplicating logic\n\t// TODO: Remove in 1.13 along with call to it below\n\t_addHoverClass: function() {\n\t\tthis._addClass( \"ui-droppable-hover\" );\n\t},\n\n\t_removeHoverClass: function() {\n\t\tthis._removeClass( \"ui-droppable-hover\" );\n\t},\n\n\t_addActiveClass: function() {\n\t\tthis._addClass( \"ui-droppable-active\" );\n\t},\n\n\t_removeActiveClass: function() {\n\t\tthis._removeClass( \"ui-droppable-active\" );\n\t}\n} );\n\nvar intersect = $.ui.intersect = ( function() {\n\tfunction isOverAxis( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t}\n\n\treturn function( draggable, droppable, toleranceMode, event ) {\n\n\t\tif ( !droppable.offset ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar x1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).left + draggable.margins.left,\n\t\t\ty1 = ( draggable.positionAbs ||\n\t\t\t\tdraggable.position.absolute ).top + draggable.margins.top,\n\t\t\tx2 = x1 + draggable.helperProportions.width,\n\t\t\ty2 = y1 + draggable.helperProportions.height,\n\t\t\tl = droppable.offset.left,\n\t\t\tt = droppable.offset.top,\n\t\t\tr = l + droppable.proportions().width,\n\t\t\tb = t + droppable.proportions().height;\n\n\t\tswitch ( toleranceMode ) {\n\t\tcase \"fit\":\n\t\t\treturn ( l <= x1 && x2 <= r && t <= y1 && y2 <= b );\n\t\tcase \"intersect\":\n\t\t\treturn ( l < x1 + ( draggable.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( draggable.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( draggable.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( draggable.helperProportions.height / 2 ) < b ); // Top Half\n\t\tcase \"pointer\":\n\t\t\treturn isOverAxis( event.pageY, t, droppable.proportions().height ) &&\n\t\t\t\tisOverAxis( event.pageX, l, droppable.proportions().width );\n\t\tcase \"touch\":\n\t\t\treturn (\n\t\t\t\t( y1 >= t && y1 <= b ) || // Top edge touching\n\t\t\t\t( y2 >= t && y2 <= b ) || // Bottom edge touching\n\t\t\t\t( y1 < t && y2 > b ) // Surrounded vertically\n\t\t\t) && (\n\t\t\t\t( x1 >= l && x1 <= r ) || // Left edge touching\n\t\t\t\t( x2 >= l && x2 <= r ) || // Right edge touching\n\t\t\t\t( x1 < l && x2 > r ) // Surrounded horizontally\n\t\t\t);\n\t\tdefault:\n\t\t\treturn false;\n\t\t}\n\t};\n} )();\n\n/*\n\tThis manager tracks offsets of draggables and droppables\n*/\n$.ui.ddmanager = {\n\tcurrent: null,\n\tdroppables: { \"default\": [] },\n\tprepareOffsets: function( t, event ) {\n\n\t\tvar i, j,\n\t\t\tm = $.ui.ddmanager.droppables[ t.options.scope ] || [],\n\t\t\ttype = event ? event.type : null, // workaround for #2317\n\t\t\tlist = ( t.currentItem || t.element ).find( \":data(ui-droppable)\" ).addBack();\n\n\t\tdroppablesLoop: for ( i = 0; i < m.length; i++ ) {\n\n\t\t\t// No disabled and non-accepted\n\t\t\tif ( m[ i ].options.disabled || ( t && !m[ i ].accept.call( m[ i ].element[ 0 ],\n\t\t\t\t\t( t.currentItem || t.element ) ) ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Filter out elements in the current dragged item\n\t\t\tfor ( j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === m[ i ].element[ 0 ] ) {\n\t\t\t\t\tm[ i ].proportions().height = 0;\n\t\t\t\t\tcontinue droppablesLoop;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tm[ i ].visible = m[ i ].element.css( \"display\" ) !== \"none\";\n\t\t\tif ( !m[ i ].visible ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Activate the droppable if used directly from draggables\n\t\t\tif ( type === \"mousedown\" ) {\n\t\t\t\tm[ i ]._activate.call( m[ i ], event );\n\t\t\t}\n\n\t\t\tm[ i ].offset = m[ i ].element.offset();\n\t\t\tm[ i ].proportions( {\n\t\t\t\twidth: m[ i ].element[ 0 ].offsetWidth,\n\t\t\t\theight: m[ i ].element[ 0 ].offsetHeight\n\t\t\t} );\n\n\t\t}\n\n\t},\n\tdrop: function( draggable, event ) {\n\n\t\tvar dropped = false;\n\n\t\t// Create a copy of the droppables in case the list changes during the drop (#9116)\n\t\t$.each( ( $.ui.ddmanager.droppables[ draggable.options.scope ] || [] ).slice(), function() {\n\n\t\t\tif ( !this.options ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.options.disabled && this.visible &&\n\t\t\t\t\tintersect( draggable, this, this.options.tolerance, event ) ) {\n\t\t\t\tdropped = this._drop.call( this, event ) || dropped;\n\t\t\t}\n\n\t\t\tif ( !this.options.disabled && this.visible && this.accept.call( this.element[ 0 ],\n\t\t\t\t\t( draggable.currentItem || draggable.element ) ) ) {\n\t\t\t\tthis.isout = true;\n\t\t\t\tthis.isover = false;\n\t\t\t\tthis._deactivate.call( this, event );\n\t\t\t}\n\n\t\t} );\n\t\treturn dropped;\n\n\t},\n\tdragStart: function( draggable, event ) {\n\n\t\t// Listen for scrolling so that if the dragging causes scrolling the position of the\n\t\t// droppables can be recalculated (see #5003)\n\t\tdraggable.element.parentsUntil( \"body\" ).on( \"scroll.droppable\", function() {\n\t\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t\t}\n\t\t} );\n\t},\n\tdrag: function( draggable, event ) {\n\n\t\t// If you have a highly dynamic page, you might try this option. It renders positions\n\t\t// every time you move the mouse.\n\t\tif ( draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\n\t\t// Run through all droppables and check their positions based on specific tolerance options\n\t\t$.each( $.ui.ddmanager.droppables[ draggable.options.scope ] || [], function() {\n\n\t\t\tif ( this.options.disabled || this.greedyChild || !this.visible ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvar parentInstance, scope, parent,\n\t\t\t\tintersects = intersect( draggable, this, this.options.tolerance, event ),\n\t\t\t\tc = !intersects && this.isover ?\n\t\t\t\t\t\"isout\" :\n\t\t\t\t\t( intersects && !this.isover ? \"isover\" : null );\n\t\t\tif ( !c ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.options.greedy ) {\n\n\t\t\t\t// find droppable parents with same scope\n\t\t\t\tscope = this.options.scope;\n\t\t\t\tparent = this.element.parents( \":data(ui-droppable)\" ).filter( function() {\n\t\t\t\t\treturn $( this ).droppable( \"instance\" ).options.scope === scope;\n\t\t\t\t} );\n\n\t\t\t\tif ( parent.length ) {\n\t\t\t\t\tparentInstance = $( parent[ 0 ] ).droppable( \"instance\" );\n\t\t\t\t\tparentInstance.greedyChild = ( c === \"isover\" );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// We just moved into a greedy child\n\t\t\tif ( parentInstance && c === \"isover\" ) {\n\t\t\t\tparentInstance.isover = false;\n\t\t\t\tparentInstance.isout = true;\n\t\t\t\tparentInstance._out.call( parentInstance, event );\n\t\t\t}\n\n\t\t\tthis[ c ] = true;\n\t\t\tthis[ c === \"isout\" ? \"isover\" : \"isout\" ] = false;\n\t\t\tthis[ c === \"isover\" ? \"_over\" : \"_out\" ].call( this, event );\n\n\t\t\t// We just moved out of a greedy child\n\t\t\tif ( parentInstance && c === \"isout\" ) {\n\t\t\t\tparentInstance.isout = false;\n\t\t\t\tparentInstance.isover = true;\n\t\t\t\tparentInstance._over.call( parentInstance, event );\n\t\t\t}\n\t\t} );\n\n\t},\n\tdragStop: function( draggable, event ) {\n\t\tdraggable.element.parentsUntil( \"body\" ).off( \"scroll.droppable\" );\n\n\t\t// Call prepareOffsets one final time since IE does not fire return scroll events when\n\t\t// overflow was caused by drag (see #5003)\n\t\tif ( !draggable.options.refreshPositions ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( draggable, event );\n\t\t}\n\t}\n};\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for activeClass and hoverClass options\n\t$.widget( \"ui.droppable\", $.ui.droppable, {\n\t\toptions: {\n\t\t\thoverClass: false,\n\t\t\tactiveClass: false\n\t\t},\n\t\t_addActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.addClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_removeActiveClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.activeClass ) {\n\t\t\t\tthis.element.removeClass( this.options.activeClass );\n\t\t\t}\n\t\t},\n\t\t_addHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.addClass( this.options.hoverClass );\n\t\t\t}\n\t\t},\n\t\t_removeHoverClass: function() {\n\t\t\tthis._super();\n\t\t\tif ( this.options.hoverClass ) {\n\t\t\t\tthis.element.removeClass( this.options.hoverClass );\n\t\t\t}\n\t\t}\n\t} );\n}\n\nvar widgetsDroppable = $.ui.droppable;\n\n\n/*!\n * jQuery UI Progressbar 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Progressbar\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Displays a status indicator for loading state, standard percentage, and other progress indicators.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/progressbar/\n//>>demos: http://jqueryui.com/progressbar/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/progressbar.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsProgressbar = $.widget( \"ui.progressbar\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-progressbar\": \"ui-corner-all\",\n\t\t\t\"ui-progressbar-value\": \"ui-corner-left\",\n\t\t\t\"ui-progressbar-complete\": \"ui-corner-right\"\n\t\t},\n\t\tmax: 100,\n\t\tvalue: 0,\n\n\t\tchange: null,\n\t\tcomplete: null\n\t},\n\n\tmin: 0,\n\n\t_create: function() {\n\n\t\t// Constrain initial value\n\t\tthis.oldValue = this.options.value = this._constrainedValue();\n\n\t\tthis.element.attr( {\n\n\t\t\t// Only set static values; aria-valuenow and aria-valuemax are\n\t\t\t// set inside _refreshValue()\n\t\t\trole: \"progressbar\",\n\t\t\t\"aria-valuemin\": this.min\n\t\t} );\n\t\tthis._addClass( \"ui-progressbar\", \"ui-widget ui-widget-content\" );\n\n\t\tthis.valueDiv = $( \"<div>\" ).appendTo( this.element );\n\t\tthis._addClass( this.valueDiv, \"ui-progressbar-value\", \"ui-widget-header\" );\n\t\tthis._refreshValue();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element.removeAttr( \"role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.valueDiv.remove();\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\treturn this.options.value;\n\t\t}\n\n\t\tthis.options.value = this._constrainedValue( newValue );\n\t\tthis._refreshValue();\n\t},\n\n\t_constrainedValue: function( newValue ) {\n\t\tif ( newValue === undefined ) {\n\t\t\tnewValue = this.options.value;\n\t\t}\n\n\t\tthis.indeterminate = newValue === false;\n\n\t\t// Sanitize value\n\t\tif ( typeof newValue !== \"number\" ) {\n\t\t\tnewValue = 0;\n\t\t}\n\n\t\treturn this.indeterminate ? false :\n\t\t\tMath.min( this.options.max, Math.max( this.min, newValue ) );\n\t},\n\n\t_setOptions: function( options ) {\n\n\t\t// Ensure \"value\" option is set after other values (like max)\n\t\tvar value = options.value;\n\t\tdelete options.value;\n\n\t\tthis._super( options );\n\n\t\tthis.options.value = this._constrainedValue( value );\n\t\tthis._refreshValue();\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"max\" ) {\n\n\t\t\t// Don't allow a max less than min\n\t\t\tvalue = Math.max( this.min, value );\n\t\t}\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.element.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t_percentage: function() {\n\t\treturn this.indeterminate ?\n\t\t\t100 :\n\t\t\t100 * ( this.options.value - this.min ) / ( this.options.max - this.min );\n\t},\n\n\t_refreshValue: function() {\n\t\tvar value = this.options.value,\n\t\t\tpercentage = this._percentage();\n\n\t\tthis.valueDiv\n\t\t\t.toggle( this.indeterminate || value > this.min )\n\t\t\t.width( percentage.toFixed( 0 ) + \"%\" );\n\n\t\tthis\n\t\t\t._toggleClass( this.valueDiv, \"ui-progressbar-complete\", null,\n\t\t\t\tvalue === this.options.max )\n\t\t\t._toggleClass( \"ui-progressbar-indeterminate\", null, this.indeterminate );\n\n\t\tif ( this.indeterminate ) {\n\t\t\tthis.element.removeAttr( \"aria-valuenow\" );\n\t\t\tif ( !this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv = $( \"<div>\" ).appendTo( this.valueDiv );\n\t\t\t\tthis._addClass( this.overlayDiv, \"ui-progressbar-overlay\" );\n\t\t\t}\n\t\t} else {\n\t\t\tthis.element.attr( {\n\t\t\t\t\"aria-valuemax\": this.options.max,\n\t\t\t\t\"aria-valuenow\": value\n\t\t\t} );\n\t\t\tif ( this.overlayDiv ) {\n\t\t\t\tthis.overlayDiv.remove();\n\t\t\t\tthis.overlayDiv = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( this.oldValue !== value ) {\n\t\t\tthis.oldValue = value;\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t\tif ( value === this.options.max ) {\n\t\t\tthis._trigger( \"complete\" );\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Selectable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectable\n//>>group: Interactions\n//>>description: Allows groups of elements to be selected with the mouse.\n//>>docs: http://api.jqueryui.com/selectable/\n//>>demos: http://jqueryui.com/selectable/\n//>>css.structure: ../../themes/base/selectable.css\n\n\n\nvar widgetsSelectable = $.widget( \"ui.selectable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tappendTo: \"body\",\n\t\tautoRefresh: true,\n\t\tdistance: 0,\n\t\tfilter: \"*\",\n\t\ttolerance: \"touch\",\n\n\t\t// Callbacks\n\t\tselected: null,\n\t\tselecting: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tunselected: null,\n\t\tunselecting: null\n\t},\n\t_create: function() {\n\t\tvar that = this;\n\n\t\tthis._addClass( \"ui-selectable\" );\n\n\t\tthis.dragged = false;\n\n\t\t// Cache selectee children based on filter\n\t\tthis.refresh = function() {\n\t\t\tthat.elementPos = $( that.element[ 0 ] ).offset();\n\t\t\tthat.selectees = $( that.options.filter, that.element[ 0 ] );\n\t\t\tthat._addClass( that.selectees, \"ui-selectee\" );\n\t\t\tthat.selectees.each( function() {\n\t\t\t\tvar $this = $( this ),\n\t\t\t\t\tselecteeOffset = $this.offset(),\n\t\t\t\t\tpos = {\n\t\t\t\t\t\tleft: selecteeOffset.left - that.elementPos.left,\n\t\t\t\t\t\ttop: selecteeOffset.top - that.elementPos.top\n\t\t\t\t\t};\n\t\t\t\t$.data( this, \"selectable-item\", {\n\t\t\t\t\telement: this,\n\t\t\t\t\t$element: $this,\n\t\t\t\t\tleft: pos.left,\n\t\t\t\t\ttop: pos.top,\n\t\t\t\t\tright: pos.left + $this.outerWidth(),\n\t\t\t\t\tbottom: pos.top + $this.outerHeight(),\n\t\t\t\t\tstartselected: false,\n\t\t\t\t\tselected: $this.hasClass( \"ui-selected\" ),\n\t\t\t\t\tselecting: $this.hasClass( \"ui-selecting\" ),\n\t\t\t\t\tunselecting: $this.hasClass( \"ui-unselecting\" )\n\t\t\t\t} );\n\t\t\t} );\n\t\t};\n\t\tthis.refresh();\n\n\t\tthis._mouseInit();\n\n\t\tthis.helper = $( \"<div>\" );\n\t\tthis._addClass( this.helper, \"ui-selectable-helper\" );\n\t},\n\n\t_destroy: function() {\n\t\tthis.selectees.removeData( \"selectable-item\" );\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseStart: function( event ) {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.opos = [ event.pageX, event.pageY ];\n\t\tthis.elementPos = $( this.element[ 0 ] ).offset();\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.selectees = $( options.filter, this.element[ 0 ] );\n\n\t\tthis._trigger( \"start\", event );\n\n\t\t$( options.appendTo ).append( this.helper );\n\n\t\t// position helper (lasso)\n\t\tthis.helper.css( {\n\t\t\t\"left\": event.pageX,\n\t\t\t\"top\": event.pageY,\n\t\t\t\"width\": 0,\n\t\t\t\"height\": 0\n\t\t} );\n\n\t\tif ( options.autoRefresh ) {\n\t\t\tthis.refresh();\n\t\t}\n\n\t\tthis.selectees.filter( \".ui-selected\" ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tselectee.startselected = true;\n\t\t\tif ( !event.metaKey && !event.ctrlKey ) {\n\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\tselectee.selected = false;\n\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t} );\n\t\t\t}\n\t\t} );\n\n\t\t$( event.target ).parents().addBack().each( function() {\n\t\t\tvar doSelect,\n\t\t\t\tselectee = $.data( this, \"selectable-item\" );\n\t\t\tif ( selectee ) {\n\t\t\t\tdoSelect = ( !event.metaKey && !event.ctrlKey ) ||\n\t\t\t\t\t!selectee.$element.hasClass( \"ui-selected\" );\n\t\t\t\tthat._removeClass( selectee.$element, doSelect ? \"ui-unselecting\" : \"ui-selected\" )\n\t\t\t\t\t._addClass( selectee.$element, doSelect ? \"ui-selecting\" : \"ui-unselecting\" );\n\t\t\t\tselectee.unselecting = !doSelect;\n\t\t\t\tselectee.selecting = doSelect;\n\t\t\t\tselectee.selected = doSelect;\n\n\t\t\t\t// selectable (UN)SELECTING callback\n\t\t\t\tif ( doSelect ) {\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\n\t\tthis.dragged = true;\n\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar tmp,\n\t\t\tthat = this,\n\t\t\toptions = this.options,\n\t\t\tx1 = this.opos[ 0 ],\n\t\t\ty1 = this.opos[ 1 ],\n\t\t\tx2 = event.pageX,\n\t\t\ty2 = event.pageY;\n\n\t\tif ( x1 > x2 ) { tmp = x2; x2 = x1; x1 = tmp; }\n\t\tif ( y1 > y2 ) { tmp = y2; y2 = y1; y1 = tmp; }\n\t\tthis.helper.css( { left: x1, top: y1, width: x2 - x1, height: y2 - y1 } );\n\n\t\tthis.selectees.each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" ),\n\t\t\t\thit = false,\n\t\t\t\toffset = {};\n\n\t\t\t//prevent helper from being selected if appendTo: selectable\n\t\t\tif ( !selectee || selectee.element === that.element[ 0 ] ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\toffset.left   = selectee.left   + that.elementPos.left;\n\t\t\toffset.right  = selectee.right  + that.elementPos.left;\n\t\t\toffset.top    = selectee.top    + that.elementPos.top;\n\t\t\toffset.bottom = selectee.bottom + that.elementPos.top;\n\n\t\t\tif ( options.tolerance === \"touch\" ) {\n\t\t\t\thit = ( !( offset.left > x2 || offset.right < x1 || offset.top > y2 ||\n                    offset.bottom < y1 ) );\n\t\t\t} else if ( options.tolerance === \"fit\" ) {\n\t\t\t\thit = ( offset.left > x1 && offset.right < x2 && offset.top > y1 &&\n                    offset.bottom < y2 );\n\t\t\t}\n\n\t\t\tif ( hit ) {\n\n\t\t\t\t// SELECT\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\tselectee.selected = false;\n\t\t\t\t}\n\t\t\t\tif ( selectee.unselecting ) {\n\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\tselectee.unselecting = false;\n\t\t\t\t}\n\t\t\t\tif ( !selectee.selecting ) {\n\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\tselectee.selecting = true;\n\n\t\t\t\t\t// selectable SELECTING callback\n\t\t\t\t\tthat._trigger( \"selecting\", event, {\n\t\t\t\t\t\tselecting: selectee.element\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} else {\n\n\t\t\t\t// UNSELECT\n\t\t\t\tif ( selectee.selecting ) {\n\t\t\t\t\tif ( ( event.metaKey || event.ctrlKey ) && selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = true;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" );\n\t\t\t\t\t\tselectee.selecting = false;\n\t\t\t\t\t\tif ( selectee.startselected ) {\n\t\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\t\tselectee.unselecting = true;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif ( selectee.selected ) {\n\t\t\t\t\tif ( !event.metaKey && !event.ctrlKey && !selectee.startselected ) {\n\t\t\t\t\t\tthat._removeClass( selectee.$element, \"ui-selected\" );\n\t\t\t\t\t\tselectee.selected = false;\n\n\t\t\t\t\t\tthat._addClass( selectee.$element, \"ui-unselecting\" );\n\t\t\t\t\t\tselectee.unselecting = true;\n\n\t\t\t\t\t\t// selectable UNSELECTING callback\n\t\t\t\t\t\tthat._trigger( \"unselecting\", event, {\n\t\t\t\t\t\t\tunselecting: selectee.element\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\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tvar that = this;\n\n\t\tthis.dragged = false;\n\n\t\t$( \".ui-unselecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-unselecting\" );\n\t\t\tselectee.unselecting = false;\n\t\t\tselectee.startselected = false;\n\t\t\tthat._trigger( \"unselected\", event, {\n\t\t\t\tunselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\t$( \".ui-selecting\", this.element[ 0 ] ).each( function() {\n\t\t\tvar selectee = $.data( this, \"selectable-item\" );\n\t\t\tthat._removeClass( selectee.$element, \"ui-selecting\" )\n\t\t\t\t._addClass( selectee.$element, \"ui-selected\" );\n\t\t\tselectee.selecting = false;\n\t\t\tselectee.selected = true;\n\t\t\tselectee.startselected = true;\n\t\t\tthat._trigger( \"selected\", event, {\n\t\t\t\tselected: selectee.element\n\t\t\t} );\n\t\t} );\n\t\tthis._trigger( \"stop\", event );\n\n\t\tthis.helper.remove();\n\n\t\treturn false;\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Selectmenu 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Selectmenu\n//>>group: Widgets\n// jscs:disable maximumLineLength\n//>>description: Duplicates and extends the functionality of a native HTML select element, allowing it to be customizable in behavior and appearance far beyond the limitations of a native select.\n// jscs:enable maximumLineLength\n//>>docs: http://api.jqueryui.com/selectmenu/\n//>>demos: http://jqueryui.com/selectmenu/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/selectmenu.css, ../../themes/base/button.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsSelectmenu = $.widget( \"ui.selectmenu\", [ $.ui.formResetMixin, {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<select>\",\n\toptions: {\n\t\tappendTo: null,\n\t\tclasses: {\n\t\t\t\"ui-selectmenu-button-open\": \"ui-corner-top\",\n\t\t\t\"ui-selectmenu-button-closed\": \"ui-corner-all\"\n\t\t},\n\t\tdisabled: null,\n\t\ticons: {\n\t\t\tbutton: \"ui-icon-triangle-1-s\"\n\t\t},\n\t\tposition: {\n\t\t\tmy: \"left top\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"none\"\n\t\t},\n\t\twidth: false,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tclose: null,\n\t\tfocus: null,\n\t\topen: null,\n\t\tselect: null\n\t},\n\n\t_create: function() {\n\t\tvar selectmenuId = this.element.uniqueId().attr( \"id\" );\n\t\tthis.ids = {\n\t\t\telement: selectmenuId,\n\t\t\tbutton: selectmenuId + \"-button\",\n\t\t\tmenu: selectmenuId + \"-menu\"\n\t\t};\n\n\t\tthis._drawButton();\n\t\tthis._drawMenu();\n\t\tthis._bindFormResetHandler();\n\n\t\tthis._rendered = false;\n\t\tthis.menuItems = $();\n\t},\n\n\t_drawButton: function() {\n\t\tvar icon,\n\t\t\tthat = this,\n\t\t\titem = this._parseOption(\n\t\t\t\tthis.element.find( \"option:selected\" ),\n\t\t\t\tthis.element[ 0 ].selectedIndex\n\t\t\t);\n\n\t\t// Associate existing label with the new button\n\t\tthis.labels = this.element.labels().attr( \"for\", this.ids.button );\n\t\tthis._on( this.labels, {\n\t\t\tclick: function( event ) {\n\t\t\t\tthis.button.focus();\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\n\t\t// Hide original select element\n\t\tthis.element.hide();\n\n\t\t// Create button\n\t\tthis.button = $( \"<span>\", {\n\t\t\ttabindex: this.options.disabled ? -1 : 0,\n\t\t\tid: this.ids.button,\n\t\t\trole: \"combobox\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\t\"aria-autocomplete\": \"list\",\n\t\t\t\"aria-owns\": this.ids.menu,\n\t\t\t\"aria-haspopup\": \"true\",\n\t\t\ttitle: this.element.attr( \"title\" )\n\t\t} )\n\t\t\t.insertAfter( this.element );\n\n\t\tthis._addClass( this.button, \"ui-selectmenu-button ui-selectmenu-button-closed\",\n\t\t\t\"ui-button ui-widget\" );\n\n\t\ticon = $( \"<span>\" ).appendTo( this.button );\n\t\tthis._addClass( icon, \"ui-selectmenu-icon\", \"ui-icon \" + this.options.icons.button );\n\t\tthis.buttonItem = this._renderButtonItem( item )\n\t\t\t.appendTo( this.button );\n\n\t\tif ( this.options.width !== false ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\n\t\tthis._on( this.button, this._buttonEvents );\n\t\tthis.button.one( \"focusin\", function() {\n\n\t\t\t// Delay rendering the menu items until the button receives focus.\n\t\t\t// The menu may have already been rendered via a programmatic open.\n\t\t\tif ( !that._rendered ) {\n\t\t\t\tthat._refreshMenu();\n\t\t\t}\n\t\t} );\n\t},\n\n\t_drawMenu: function() {\n\t\tvar that = this;\n\n\t\t// Create menu\n\t\tthis.menu = $( \"<ul>\", {\n\t\t\t\"aria-hidden\": \"true\",\n\t\t\t\"aria-labelledby\": this.ids.button,\n\t\t\tid: this.ids.menu\n\t\t} );\n\n\t\t// Wrap menu\n\t\tthis.menuWrap = $( \"<div>\" ).append( this.menu );\n\t\tthis._addClass( this.menuWrap, \"ui-selectmenu-menu\", \"ui-front\" );\n\t\tthis.menuWrap.appendTo( this._appendTo() );\n\n\t\t// Initialize menu widget\n\t\tthis.menuInstance = this.menu\n\t\t\t.menu( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-menu\": \"ui-corner-bottom\"\n\t\t\t\t},\n\t\t\t\trole: \"listbox\",\n\t\t\t\tselect: function( event, ui ) {\n\t\t\t\t\tevent.preventDefault();\n\n\t\t\t\t\t// Support: IE8\n\t\t\t\t\t// If the item was selected via a click, the text selection\n\t\t\t\t\t// will be destroyed in IE\n\t\t\t\t\tthat._setSelection();\n\n\t\t\t\t\tthat._select( ui.item.data( \"ui-selectmenu-item\" ), event );\n\t\t\t\t},\n\t\t\t\tfocus: function( event, ui ) {\n\t\t\t\t\tvar item = ui.item.data( \"ui-selectmenu-item\" );\n\n\t\t\t\t\t// Prevent inital focus from firing and check if its a newly focused item\n\t\t\t\t\tif ( that.focusIndex != null && item.index !== that.focusIndex ) {\n\t\t\t\t\t\tthat._trigger( \"focus\", event, { item: item } );\n\t\t\t\t\t\tif ( !that.isOpen ) {\n\t\t\t\t\t\t\tthat._select( item, event );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthat.focusIndex = item.index;\n\n\t\t\t\t\tthat.button.attr( \"aria-activedescendant\",\n\t\t\t\t\t\tthat.menuItems.eq( item.index ).attr( \"id\" ) );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.menu( \"instance\" );\n\n\t\t// Don't close the menu on mouseleave\n\t\tthis.menuInstance._off( this.menu, \"mouseleave\" );\n\n\t\t// Cancel the menu's collapseAll on document click\n\t\tthis.menuInstance._closeOnDocumentClick = function() {\n\t\t\treturn false;\n\t\t};\n\n\t\t// Selects often contain empty items, but never contain dividers\n\t\tthis.menuInstance._isDivider = function() {\n\t\t\treturn false;\n\t\t};\n\t},\n\n\trefresh: function() {\n\t\tthis._refreshMenu();\n\t\tthis.buttonItem.replaceWith(\n\t\t\tthis.buttonItem = this._renderButtonItem(\n\n\t\t\t\t// Fall back to an empty object in case there are no options\n\t\t\t\tthis._getSelectedItem().data( \"ui-selectmenu-item\" ) || {}\n\t\t\t)\n\t\t);\n\t\tif ( this.options.width === null ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_refreshMenu: function() {\n\t\tvar item,\n\t\t\toptions = this.element.find( \"option\" );\n\n\t\tthis.menu.empty();\n\n\t\tthis._parseOptions( options );\n\t\tthis._renderMenu( this.menu, this.items );\n\n\t\tthis.menuInstance.refresh();\n\t\tthis.menuItems = this.menu.find( \"li\" )\n\t\t\t.not( \".ui-selectmenu-optgroup\" )\n\t\t\t\t.find( \".ui-menu-item-wrapper\" );\n\n\t\tthis._rendered = true;\n\n\t\tif ( !options.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\titem = this._getSelectedItem();\n\n\t\t// Update the menu to have the correct item focused\n\t\tthis.menuInstance.focus( null, item );\n\t\tthis._setAria( item.data( \"ui-selectmenu-item\" ) );\n\n\t\t// Set disabled state\n\t\tthis._setOption( \"disabled\", this.element.prop( \"disabled\" ) );\n\t},\n\n\topen: function( event ) {\n\t\tif ( this.options.disabled ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If this is the first time the menu is being opened, render the items\n\t\tif ( !this._rendered ) {\n\t\t\tthis._refreshMenu();\n\t\t} else {\n\n\t\t\t// Menu clears focus on close, reset focus to selected item\n\t\t\tthis._removeClass( this.menu.find( \".ui-state-active\" ), null, \"ui-state-active\" );\n\t\t\tthis.menuInstance.focus( null, this._getSelectedItem() );\n\t\t}\n\n\t\t// If there are no options, don't open the menu\n\t\tif ( !this.menuItems.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = true;\n\t\tthis._toggleAttr();\n\t\tthis._resizeMenu();\n\t\tthis._position();\n\n\t\tthis._on( this.document, this._documentClick );\n\n\t\tthis._trigger( \"open\", event );\n\t},\n\n\t_position: function() {\n\t\tthis.menuWrap.position( $.extend( { of: this.button }, this.options.position ) );\n\t},\n\n\tclose: function( event ) {\n\t\tif ( !this.isOpen ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.isOpen = false;\n\t\tthis._toggleAttr();\n\n\t\tthis.range = null;\n\t\tthis._off( this.document );\n\n\t\tthis._trigger( \"close\", event );\n\t},\n\n\twidget: function() {\n\t\treturn this.button;\n\t},\n\n\tmenuWidget: function() {\n\t\treturn this.menu;\n\t},\n\n\t_renderButtonItem: function( item ) {\n\t\tvar buttonItem = $( \"<span>\" );\n\n\t\tthis._setText( buttonItem, item.label );\n\t\tthis._addClass( buttonItem, \"ui-selectmenu-text\" );\n\n\t\treturn buttonItem;\n\t},\n\n\t_renderMenu: function( ul, items ) {\n\t\tvar that = this,\n\t\t\tcurrentOptgroup = \"\";\n\n\t\t$.each( items, function( index, item ) {\n\t\t\tvar li;\n\n\t\t\tif ( item.optgroup !== currentOptgroup ) {\n\t\t\t\tli = $( \"<li>\", {\n\t\t\t\t\ttext: item.optgroup\n\t\t\t\t} );\n\t\t\t\tthat._addClass( li, \"ui-selectmenu-optgroup\", \"ui-menu-divider\" +\n\t\t\t\t\t( item.element.parent( \"optgroup\" ).prop( \"disabled\" ) ?\n\t\t\t\t\t\t\" ui-state-disabled\" :\n\t\t\t\t\t\t\"\" ) );\n\n\t\t\t\tli.appendTo( ul );\n\n\t\t\t\tcurrentOptgroup = item.optgroup;\n\t\t\t}\n\n\t\t\tthat._renderItemData( ul, item );\n\t\t} );\n\t},\n\n\t_renderItemData: function( ul, item ) {\n\t\treturn this._renderItem( ul, item ).data( \"ui-selectmenu-item\", item );\n\t},\n\n\t_renderItem: function( ul, item ) {\n\t\tvar li = $( \"<li>\" ),\n\t\t\twrapper = $( \"<div>\", {\n\t\t\t\ttitle: item.element.attr( \"title\" )\n\t\t\t} );\n\n\t\tif ( item.disabled ) {\n\t\t\tthis._addClass( li, null, \"ui-state-disabled\" );\n\t\t}\n\t\tthis._setText( wrapper, item.label );\n\n\t\treturn li.append( wrapper ).appendTo( ul );\n\t},\n\n\t_setText: function( element, value ) {\n\t\tif ( value ) {\n\t\t\telement.text( value );\n\t\t} else {\n\t\t\telement.html( \"&#160;\" );\n\t\t}\n\t},\n\n\t_move: function( direction, event ) {\n\t\tvar item, next,\n\t\t\tfilter = \".ui-menu-item\";\n\n\t\tif ( this.isOpen ) {\n\t\t\titem = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\t} else {\n\t\t\titem = this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t\t\tfilter += \":not(.ui-state-disabled)\";\n\t\t}\n\n\t\tif ( direction === \"first\" || direction === \"last\" ) {\n\t\t\tnext = item[ direction === \"first\" ? \"prevAll\" : \"nextAll\" ]( filter ).eq( -1 );\n\t\t} else {\n\t\t\tnext = item[ direction + \"All\" ]( filter ).eq( 0 );\n\t\t}\n\n\t\tif ( next.length ) {\n\t\t\tthis.menuInstance.focus( event, next );\n\t\t}\n\t},\n\n\t_getSelectedItem: function() {\n\t\treturn this.menuItems.eq( this.element[ 0 ].selectedIndex ).parent( \"li\" );\n\t},\n\n\t_toggle: function( event ) {\n\t\tthis[ this.isOpen ? \"close\" : \"open\" ]( event );\n\t},\n\n\t_setSelection: function() {\n\t\tvar selection;\n\n\t\tif ( !this.range ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( window.getSelection ) {\n\t\t\tselection = window.getSelection();\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange( this.range );\n\n\t\t// Support: IE8\n\t\t} else {\n\t\t\tthis.range.select();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Setting the text selection kills the button focus in IE, but\n\t\t// restoring the focus doesn't kill the selection.\n\t\tthis.button.focus();\n\t},\n\n\t_documentClick: {\n\t\tmousedown: function( event ) {\n\t\t\tif ( !this.isOpen ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( !$( event.target ).closest( \".ui-selectmenu-menu, #\" +\n\t\t\t\t\t$.ui.escapeSelector( this.ids.button ) ).length ) {\n\t\t\t\tthis.close( event );\n\t\t\t}\n\t\t}\n\t},\n\n\t_buttonEvents: {\n\n\t\t// Prevent text selection from being reset when interacting with the selectmenu (#10144)\n\t\tmousedown: function() {\n\t\t\tvar selection;\n\n\t\t\tif ( window.getSelection ) {\n\t\t\t\tselection = window.getSelection();\n\t\t\t\tif ( selection.rangeCount ) {\n\t\t\t\t\tthis.range = selection.getRangeAt( 0 );\n\t\t\t\t}\n\n\t\t\t// Support: IE8\n\t\t\t} else {\n\t\t\t\tthis.range = document.selection.createRange();\n\t\t\t}\n\t\t},\n\n\t\tclick: function( event ) {\n\t\t\tthis._setSelection();\n\t\t\tthis._toggle( event );\n\t\t},\n\n\t\tkeydown: function( event ) {\n\t\t\tvar preventDefault = true;\n\t\t\tswitch ( event.keyCode ) {\n\t\t\tcase $.ui.keyCode.TAB:\n\t\t\tcase $.ui.keyCode.ESCAPE:\n\t\t\t\tthis.close( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.ENTER:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tif ( event.altKey ) {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._move( \"next\", event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.SPACE:\n\t\t\t\tif ( this.isOpen ) {\n\t\t\t\t\tthis._selectFocusedItem( event );\n\t\t\t\t} else {\n\t\t\t\t\tthis._toggle( event );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\tthis._move( \"prev\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tthis._move( \"next\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.HOME:\n\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tthis._move( \"first\", event );\n\t\t\t\tbreak;\n\t\t\tcase $.ui.keyCode.END:\n\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tthis._move( \"last\", event );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthis.menu.trigger( event );\n\t\t\t\tpreventDefault = false;\n\t\t\t}\n\n\t\t\tif ( preventDefault ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t}\n\t},\n\n\t_selectFocusedItem: function( event ) {\n\t\tvar item = this.menuItems.eq( this.focusIndex ).parent( \"li\" );\n\t\tif ( !item.hasClass( \"ui-state-disabled\" ) ) {\n\t\t\tthis._select( item.data( \"ui-selectmenu-item\" ), event );\n\t\t}\n\t},\n\n\t_select: function( item, event ) {\n\t\tvar oldIndex = this.element[ 0 ].selectedIndex;\n\n\t\t// Change native select element\n\t\tthis.element[ 0 ].selectedIndex = item.index;\n\t\tthis.buttonItem.replaceWith( this.buttonItem = this._renderButtonItem( item ) );\n\t\tthis._setAria( item );\n\t\tthis._trigger( \"select\", event, { item: item } );\n\n\t\tif ( item.index !== oldIndex ) {\n\t\t\tthis._trigger( \"change\", event, { item: item } );\n\t\t}\n\n\t\tthis.close( event );\n\t},\n\n\t_setAria: function( item ) {\n\t\tvar id = this.menuItems.eq( item.index ).attr( \"id\" );\n\n\t\tthis.button.attr( {\n\t\t\t\"aria-labelledby\": id,\n\t\t\t\"aria-activedescendant\": id\n\t\t} );\n\t\tthis.menu.attr( \"aria-activedescendant\", id );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"icons\" ) {\n\t\t\tvar icon = this.button.find( \"span.ui-icon\" );\n\t\t\tthis._removeClass( icon, null, this.options.icons.button )\n\t\t\t\t._addClass( icon, null, value.button );\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"appendTo\" ) {\n\t\t\tthis.menuWrap.appendTo( this._appendTo() );\n\t\t}\n\n\t\tif ( key === \"width\" ) {\n\t\t\tthis._resizeButton();\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis.menuInstance.option( \"disabled\", value );\n\t\tthis.button.attr( \"aria-disabled\", value );\n\t\tthis._toggleClass( this.button, null, \"ui-state-disabled\", value );\n\n\t\tthis.element.prop( \"disabled\", value );\n\t\tif ( value ) {\n\t\t\tthis.button.attr( \"tabindex\", -1 );\n\t\t\tthis.close();\n\t\t} else {\n\t\t\tthis.button.attr( \"tabindex\", 0 );\n\t\t}\n\t},\n\n\t_appendTo: function() {\n\t\tvar element = this.options.appendTo;\n\n\t\tif ( element ) {\n\t\t\telement = element.jquery || element.nodeType ?\n\t\t\t\t$( element ) :\n\t\t\t\tthis.document.find( element ).eq( 0 );\n\t\t}\n\n\t\tif ( !element || !element[ 0 ] ) {\n\t\t\telement = this.element.closest( \".ui-front, dialog\" );\n\t\t}\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_toggleAttr: function() {\n\t\tthis.button.attr( \"aria-expanded\", this.isOpen );\n\n\t\t// We can't use two _toggleClass() calls here, because we need to make sure\n\t\t// we always remove classes first and add them second, otherwise if both classes have the\n\t\t// same theme class, it will be removed after we add it.\n\t\tthis._removeClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t( this.isOpen ? \"closed\" : \"open\" ) )\n\t\t\t._addClass( this.button, \"ui-selectmenu-button-\" +\n\t\t\t\t( this.isOpen ? \"open\" : \"closed\" ) )\n\t\t\t._toggleClass( this.menuWrap, \"ui-selectmenu-open\", null, this.isOpen );\n\n\t\tthis.menu.attr( \"aria-hidden\", !this.isOpen );\n\t},\n\n\t_resizeButton: function() {\n\t\tvar width = this.options.width;\n\n\t\t// For `width: false`, just remove inline style and stop\n\t\tif ( width === false ) {\n\t\t\tthis.button.css( \"width\", \"\" );\n\t\t\treturn;\n\t\t}\n\n\t\t// For `width: null`, match the width of the original element\n\t\tif ( width === null ) {\n\t\t\twidth = this.element.show().outerWidth();\n\t\t\tthis.element.hide();\n\t\t}\n\n\t\tthis.button.outerWidth( width );\n\t},\n\n\t_resizeMenu: function() {\n\t\tthis.menu.outerWidth( Math.max(\n\t\t\tthis.button.outerWidth(),\n\n\t\t\t// Support: IE10\n\t\t\t// IE10 wraps long text (possibly a rounding bug)\n\t\t\t// so we add 1px to avoid the wrapping\n\t\t\tthis.menu.width( \"\" ).outerWidth() + 1\n\t\t) );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\n\t\toptions.disabled = this.element.prop( \"disabled\" );\n\n\t\treturn options;\n\t},\n\n\t_parseOptions: function( options ) {\n\t\tvar that = this,\n\t\t\tdata = [];\n\t\toptions.each( function( index, item ) {\n\t\t\tdata.push( that._parseOption( $( item ), index ) );\n\t\t} );\n\t\tthis.items = data;\n\t},\n\n\t_parseOption: function( option, index ) {\n\t\tvar optgroup = option.parent( \"optgroup\" );\n\n\t\treturn {\n\t\t\telement: option,\n\t\t\tindex: index,\n\t\t\tvalue: option.val(),\n\t\t\tlabel: option.text(),\n\t\t\toptgroup: optgroup.attr( \"label\" ) || \"\",\n\t\t\tdisabled: optgroup.prop( \"disabled\" ) || option.prop( \"disabled\" )\n\t\t};\n\t},\n\n\t_destroy: function() {\n\t\tthis._unbindFormResetHandler();\n\t\tthis.menuWrap.remove();\n\t\tthis.button.remove();\n\t\tthis.element.show();\n\t\tthis.element.removeUniqueId();\n\t\tthis.labels.attr( \"for\", this.ids.element );\n\t}\n} ] );\n\n\n/*!\n * jQuery UI Slider 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Slider\n//>>group: Widgets\n//>>description: Displays a flexible slider with ranges and accessibility via keyboard.\n//>>docs: http://api.jqueryui.com/slider/\n//>>demos: http://jqueryui.com/slider/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/slider.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nvar widgetsSlider = $.widget( \"ui.slider\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"slide\",\n\n\toptions: {\n\t\tanimate: false,\n\t\tclasses: {\n\t\t\t\"ui-slider\": \"ui-corner-all\",\n\t\t\t\"ui-slider-handle\": \"ui-corner-all\",\n\n\t\t\t// Note: ui-widget-header isn't the most fittingly semantic framework class for this\n\t\t\t// element, but worked best visually with a variety of themes\n\t\t\t\"ui-slider-range\": \"ui-corner-all ui-widget-header\"\n\t\t},\n\t\tdistance: 0,\n\t\tmax: 100,\n\t\tmin: 0,\n\t\torientation: \"horizontal\",\n\t\trange: false,\n\t\tstep: 1,\n\t\tvalue: 0,\n\t\tvalues: null,\n\n\t\t// Callbacks\n\t\tchange: null,\n\t\tslide: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t// Number of pages in a slider\n\t// (how many times can you page up/down to go through the whole range)\n\tnumPages: 5,\n\n\t_create: function() {\n\t\tthis._keySliding = false;\n\t\tthis._mouseSliding = false;\n\t\tthis._animateOff = true;\n\t\tthis._handleIndex = null;\n\t\tthis._detectOrientation();\n\t\tthis._mouseInit();\n\t\tthis._calculateNewMax();\n\n\t\tthis._addClass( \"ui-slider ui-slider-\" + this.orientation,\n\t\t\t\"ui-widget ui-widget-content\" );\n\n\t\tthis._refresh();\n\n\t\tthis._animateOff = false;\n\t},\n\n\t_refresh: function() {\n\t\tthis._createRange();\n\t\tthis._createHandles();\n\t\tthis._setupEvents();\n\t\tthis._refreshValue();\n\t},\n\n\t_createHandles: function() {\n\t\tvar i, handleCount,\n\t\t\toptions = this.options,\n\t\t\texistingHandles = this.element.find( \".ui-slider-handle\" ),\n\t\t\thandle = \"<span tabindex='0'></span>\",\n\t\t\thandles = [];\n\n\t\thandleCount = ( options.values && options.values.length ) || 1;\n\n\t\tif ( existingHandles.length > handleCount ) {\n\t\t\texistingHandles.slice( handleCount ).remove();\n\t\t\texistingHandles = existingHandles.slice( 0, handleCount );\n\t\t}\n\n\t\tfor ( i = existingHandles.length; i < handleCount; i++ ) {\n\t\t\thandles.push( handle );\n\t\t}\n\n\t\tthis.handles = existingHandles.add( $( handles.join( \"\" ) ).appendTo( this.element ) );\n\n\t\tthis._addClass( this.handles, \"ui-slider-handle\", \"ui-state-default\" );\n\n\t\tthis.handle = this.handles.eq( 0 );\n\n\t\tthis.handles.each( function( i ) {\n\t\t\t$( this )\n\t\t\t\t.data( \"ui-slider-handle-index\", i )\n\t\t\t\t.attr( \"tabIndex\", 0 );\n\t\t} );\n\t},\n\n\t_createRange: function() {\n\t\tvar options = this.options;\n\n\t\tif ( options.range ) {\n\t\t\tif ( options.range === true ) {\n\t\t\t\tif ( !options.values ) {\n\t\t\t\t\toptions.values = [ this._valueMin(), this._valueMin() ];\n\t\t\t\t} else if ( options.values.length && options.values.length !== 2 ) {\n\t\t\t\t\toptions.values = [ options.values[ 0 ], options.values[ 0 ] ];\n\t\t\t\t} else if ( $.isArray( options.values ) ) {\n\t\t\t\t\toptions.values = options.values.slice( 0 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( !this.range || !this.range.length ) {\n\t\t\t\tthis.range = $( \"<div>\" )\n\t\t\t\t\t.appendTo( this.element );\n\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range\" );\n\t\t\t} else {\n\t\t\t\tthis._removeClass( this.range, \"ui-slider-range-min ui-slider-range-max\" );\n\n\t\t\t\t// Handle range switching from true to min/max\n\t\t\t\tthis.range.css( {\n\t\t\t\t\t\"left\": \"\",\n\t\t\t\t\t\"bottom\": \"\"\n\t\t\t\t} );\n\t\t\t}\n\t\t\tif ( options.range === \"min\" || options.range === \"max\" ) {\n\t\t\t\tthis._addClass( this.range, \"ui-slider-range-\" + options.range );\n\t\t\t}\n\t\t} else {\n\t\t\tif ( this.range ) {\n\t\t\t\tthis.range.remove();\n\t\t\t}\n\t\t\tthis.range = null;\n\t\t}\n\t},\n\n\t_setupEvents: function() {\n\t\tthis._off( this.handles );\n\t\tthis._on( this.handles, this._handleEvents );\n\t\tthis._hoverable( this.handles );\n\t\tthis._focusable( this.handles );\n\t},\n\n\t_destroy: function() {\n\t\tthis.handles.remove();\n\t\tif ( this.range ) {\n\t\t\tthis.range.remove();\n\t\t}\n\n\t\tthis._mouseDestroy();\n\t},\n\n\t_mouseCapture: function( event ) {\n\t\tvar position, normValue, distance, closestHandle, index, allowed, offset, mouseOverHandle,\n\t\t\tthat = this,\n\t\t\to = this.options;\n\n\t\tif ( o.disabled ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tthis.elementSize = {\n\t\t\twidth: this.element.outerWidth(),\n\t\t\theight: this.element.outerHeight()\n\t\t};\n\t\tthis.elementOffset = this.element.offset();\n\n\t\tposition = { x: event.pageX, y: event.pageY };\n\t\tnormValue = this._normValueFromMouse( position );\n\t\tdistance = this._valueMax() - this._valueMin() + 1;\n\t\tthis.handles.each( function( i ) {\n\t\t\tvar thisDistance = Math.abs( normValue - that.values( i ) );\n\t\t\tif ( ( distance > thisDistance ) ||\n\t\t\t\t( distance === thisDistance &&\n\t\t\t\t\t( i === that._lastChangedValue || that.values( i ) === o.min ) ) ) {\n\t\t\t\tdistance = thisDistance;\n\t\t\t\tclosestHandle = $( this );\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t} );\n\n\t\tallowed = this._start( event, index );\n\t\tif ( allowed === false ) {\n\t\t\treturn false;\n\t\t}\n\t\tthis._mouseSliding = true;\n\n\t\tthis._handleIndex = index;\n\n\t\tthis._addClass( closestHandle, null, \"ui-state-active\" );\n\t\tclosestHandle.trigger( \"focus\" );\n\n\t\toffset = closestHandle.offset();\n\t\tmouseOverHandle = !$( event.target ).parents().addBack().is( \".ui-slider-handle\" );\n\t\tthis._clickOffset = mouseOverHandle ? { left: 0, top: 0 } : {\n\t\t\tleft: event.pageX - offset.left - ( closestHandle.width() / 2 ),\n\t\t\ttop: event.pageY - offset.top -\n\t\t\t\t( closestHandle.height() / 2 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t( parseInt( closestHandle.css( \"borderBottomWidth\" ), 10 ) || 0 ) +\n\t\t\t\t( parseInt( closestHandle.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\n\t\tif ( !this.handles.hasClass( \"ui-state-hover\" ) ) {\n\t\t\tthis._slide( event, index, normValue );\n\t\t}\n\t\tthis._animateOff = true;\n\t\treturn true;\n\t},\n\n\t_mouseStart: function() {\n\t\treturn true;\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar position = { x: event.pageX, y: event.pageY },\n\t\t\tnormValue = this._normValueFromMouse( position );\n\n\t\tthis._slide( event, this._handleIndex, normValue );\n\n\t\treturn false;\n\t},\n\n\t_mouseStop: function( event ) {\n\t\tthis._removeClass( this.handles, null, \"ui-state-active\" );\n\t\tthis._mouseSliding = false;\n\n\t\tthis._stop( event, this._handleIndex );\n\t\tthis._change( event, this._handleIndex );\n\n\t\tthis._handleIndex = null;\n\t\tthis._clickOffset = null;\n\t\tthis._animateOff = false;\n\n\t\treturn false;\n\t},\n\n\t_detectOrientation: function() {\n\t\tthis.orientation = ( this.options.orientation === \"vertical\" ) ? \"vertical\" : \"horizontal\";\n\t},\n\n\t_normValueFromMouse: function( position ) {\n\t\tvar pixelTotal,\n\t\t\tpixelMouse,\n\t\t\tpercentMouse,\n\t\t\tvalueTotal,\n\t\t\tvalueMouse;\n\n\t\tif ( this.orientation === \"horizontal\" ) {\n\t\t\tpixelTotal = this.elementSize.width;\n\t\t\tpixelMouse = position.x - this.elementOffset.left -\n\t\t\t\t( this._clickOffset ? this._clickOffset.left : 0 );\n\t\t} else {\n\t\t\tpixelTotal = this.elementSize.height;\n\t\t\tpixelMouse = position.y - this.elementOffset.top -\n\t\t\t\t( this._clickOffset ? this._clickOffset.top : 0 );\n\t\t}\n\n\t\tpercentMouse = ( pixelMouse / pixelTotal );\n\t\tif ( percentMouse > 1 ) {\n\t\t\tpercentMouse = 1;\n\t\t}\n\t\tif ( percentMouse < 0 ) {\n\t\t\tpercentMouse = 0;\n\t\t}\n\t\tif ( this.orientation === \"vertical\" ) {\n\t\t\tpercentMouse = 1 - percentMouse;\n\t\t}\n\n\t\tvalueTotal = this._valueMax() - this._valueMin();\n\t\tvalueMouse = this._valueMin() + percentMouse * valueTotal;\n\n\t\treturn this._trimAlignValue( valueMouse );\n\t},\n\n\t_uiHash: function( index, value, values ) {\n\t\tvar uiHash = {\n\t\t\thandle: this.handles[ index ],\n\t\t\thandleIndex: index,\n\t\t\tvalue: value !== undefined ? value : this.value()\n\t\t};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tuiHash.value = value !== undefined ? value : this.values( index );\n\t\t\tuiHash.values = values || this.values();\n\t\t}\n\n\t\treturn uiHash;\n\t},\n\n\t_hasMultipleValues: function() {\n\t\treturn this.options.values && this.options.values.length;\n\t},\n\n\t_start: function( event, index ) {\n\t\treturn this._trigger( \"start\", event, this._uiHash( index ) );\n\t},\n\n\t_slide: function( event, index, newVal ) {\n\t\tvar allowed, otherVal,\n\t\t\tcurrentValue = this.value(),\n\t\t\tnewValues = this.values();\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\totherVal = this.values( index ? 0 : 1 );\n\t\t\tcurrentValue = this.values( index );\n\n\t\t\tif ( this.options.values.length === 2 && this.options.range === true ) {\n\t\t\t\tnewVal =  index === 0 ? Math.min( otherVal, newVal ) : Math.max( otherVal, newVal );\n\t\t\t}\n\n\t\t\tnewValues[ index ] = newVal;\n\t\t}\n\n\t\tif ( newVal === currentValue ) {\n\t\t\treturn;\n\t\t}\n\n\t\tallowed = this._trigger( \"slide\", event, this._uiHash( index, newVal, newValues ) );\n\n\t\t// A slide can be canceled by returning false from the slide callback\n\t\tif ( allowed === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.values( index, newVal );\n\t\t} else {\n\t\t\tthis.value( newVal );\n\t\t}\n\t},\n\n\t_stop: function( event, index ) {\n\t\tthis._trigger( \"stop\", event, this._uiHash( index ) );\n\t},\n\n\t_change: function( event, index ) {\n\t\tif ( !this._keySliding && !this._mouseSliding ) {\n\n\t\t\t//store the last changed value index for reference when handles overlap\n\t\t\tthis._lastChangedValue = index;\n\t\t\tthis._trigger( \"change\", event, this._uiHash( index ) );\n\t\t}\n\t},\n\n\tvalue: function( newValue ) {\n\t\tif ( arguments.length ) {\n\t\t\tthis.options.value = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, 0 );\n\t\t\treturn;\n\t\t}\n\n\t\treturn this._value();\n\t},\n\n\tvalues: function( index, newValue ) {\n\t\tvar vals,\n\t\t\tnewValues,\n\t\t\ti;\n\n\t\tif ( arguments.length > 1 ) {\n\t\t\tthis.options.values[ index ] = this._trimAlignValue( newValue );\n\t\t\tthis._refreshValue();\n\t\t\tthis._change( null, index );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( arguments.length ) {\n\t\t\tif ( $.isArray( arguments[ 0 ] ) ) {\n\t\t\t\tvals = this.options.values;\n\t\t\t\tnewValues = arguments[ 0 ];\n\t\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\t\tvals[ i ] = this._trimAlignValue( newValues[ i ] );\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._refreshValue();\n\t\t\t} else {\n\t\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\t\treturn this._values( index );\n\t\t\t\t} else {\n\t\t\t\t\treturn this.value();\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn this._values();\n\t\t}\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar i,\n\t\t\tvalsLength = 0;\n\n\t\tif ( key === \"range\" && this.options.range === true ) {\n\t\t\tif ( value === \"min\" ) {\n\t\t\t\tthis.options.value = this._values( 0 );\n\t\t\t\tthis.options.values = null;\n\t\t\t} else if ( value === \"max\" ) {\n\t\t\t\tthis.options.value = this._values( this.options.values.length - 1 );\n\t\t\t\tthis.options.values = null;\n\t\t\t}\n\t\t}\n\n\t\tif ( $.isArray( this.options.values ) ) {\n\t\t\tvalsLength = this.options.values.length;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tswitch ( key ) {\n\t\t\tcase \"orientation\":\n\t\t\t\tthis._detectOrientation();\n\t\t\t\tthis._removeClass( \"ui-slider-horizontal ui-slider-vertical\" )\n\t\t\t\t\t._addClass( \"ui-slider-\" + this.orientation );\n\t\t\t\tthis._refreshValue();\n\t\t\t\tif ( this.options.range ) {\n\t\t\t\t\tthis._refreshRange( value );\n\t\t\t\t}\n\n\t\t\t\t// Reset positioning from previous orientation\n\t\t\t\tthis.handles.css( value === \"horizontal\" ? \"bottom\" : \"left\", \"\" );\n\t\t\t\tbreak;\n\t\t\tcase \"value\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._change( null, 0 );\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"values\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refreshValue();\n\n\t\t\t\t// Start from the last handle to prevent unreachable handles (#9046)\n\t\t\t\tfor ( i = valsLength - 1; i >= 0; i-- ) {\n\t\t\t\t\tthis._change( null, i );\n\t\t\t\t}\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"step\":\n\t\t\tcase \"min\":\n\t\t\tcase \"max\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._calculateNewMax();\n\t\t\t\tthis._refreshValue();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t\tcase \"range\":\n\t\t\t\tthis._animateOff = true;\n\t\t\t\tthis._refresh();\n\t\t\t\tthis._animateOff = false;\n\t\t\t\tbreak;\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( null, \"ui-state-disabled\", !!value );\n\t},\n\n\t//internal value getter\n\t// _value() returns value trimmed by min and max, aligned by step\n\t_value: function() {\n\t\tvar val = this.options.value;\n\t\tval = this._trimAlignValue( val );\n\n\t\treturn val;\n\t},\n\n\t//internal values getter\n\t// _values() returns array of values trimmed by min and max, aligned by step\n\t// _values( index ) returns single value trimmed by min and max, aligned by step\n\t_values: function( index ) {\n\t\tvar val,\n\t\t\tvals,\n\t\t\ti;\n\n\t\tif ( arguments.length ) {\n\t\t\tval = this.options.values[ index ];\n\t\t\tval = this._trimAlignValue( val );\n\n\t\t\treturn val;\n\t\t} else if ( this._hasMultipleValues() ) {\n\n\t\t\t// .slice() creates a copy of the array\n\t\t\t// this copy gets trimmed by min and max and then returned\n\t\t\tvals = this.options.values.slice();\n\t\t\tfor ( i = 0; i < vals.length; i += 1 ) {\n\t\t\t\tvals[ i ] = this._trimAlignValue( vals[ i ] );\n\t\t\t}\n\n\t\t\treturn vals;\n\t\t} else {\n\t\t\treturn [];\n\t\t}\n\t},\n\n\t// Returns the step-aligned value that val is closest to, between (inclusive) min and max\n\t_trimAlignValue: function( val ) {\n\t\tif ( val <= this._valueMin() ) {\n\t\t\treturn this._valueMin();\n\t\t}\n\t\tif ( val >= this._valueMax() ) {\n\t\t\treturn this._valueMax();\n\t\t}\n\t\tvar step = ( this.options.step > 0 ) ? this.options.step : 1,\n\t\t\tvalModStep = ( val - this._valueMin() ) % step,\n\t\t\talignValue = val - valModStep;\n\n\t\tif ( Math.abs( valModStep ) * 2 >= step ) {\n\t\t\talignValue += ( valModStep > 0 ) ? step : ( -step );\n\t\t}\n\n\t\t// Since JavaScript has problems with large floats, round\n\t\t// the final value to 5 digits after the decimal point (see #4124)\n\t\treturn parseFloat( alignValue.toFixed( 5 ) );\n\t},\n\n\t_calculateNewMax: function() {\n\t\tvar max = this.options.max,\n\t\t\tmin = this._valueMin(),\n\t\t\tstep = this.options.step,\n\t\t\taboveMin = Math.round( ( max - min ) / step ) * step;\n\t\tmax = aboveMin + min;\n\t\tif ( max > this.options.max ) {\n\n\t\t\t//If max is not divisible by step, rounding off may increase its value\n\t\t\tmax -= step;\n\t\t}\n\t\tthis.max = parseFloat( max.toFixed( this._precision() ) );\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_valueMin: function() {\n\t\treturn this.options.min;\n\t},\n\n\t_valueMax: function() {\n\t\treturn this.max;\n\t},\n\n\t_refreshRange: function( orientation ) {\n\t\tif ( orientation === \"vertical\" ) {\n\t\t\tthis.range.css( { \"width\": \"\", \"left\": \"\" } );\n\t\t}\n\t\tif ( orientation === \"horizontal\" ) {\n\t\t\tthis.range.css( { \"height\": \"\", \"bottom\": \"\" } );\n\t\t}\n\t},\n\n\t_refreshValue: function() {\n\t\tvar lastValPercent, valPercent, value, valueMin, valueMax,\n\t\t\toRange = this.options.range,\n\t\t\to = this.options,\n\t\t\tthat = this,\n\t\t\tanimate = ( !this._animateOff ) ? o.animate : false,\n\t\t\t_set = {};\n\n\t\tif ( this._hasMultipleValues() ) {\n\t\t\tthis.handles.each( function( i ) {\n\t\t\t\tvalPercent = ( that.values( i ) - that._valueMin() ) / ( that._valueMax() -\n\t\t\t\t\tthat._valueMin() ) * 100;\n\t\t\t\t_set[ that.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\t\t$( this ).stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\t\t\t\tif ( that.options.range === true ) {\n\t\t\t\t\tif ( that.orientation === \"horizontal\" ) {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tleft: valPercent + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\twidth: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif ( i === 0 ) {\n\t\t\t\t\t\t\tthat.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\tbottom: ( valPercent ) + \"%\"\n\t\t\t\t\t\t\t}, o.animate );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( i === 1 ) {\n\t\t\t\t\t\t\tthat.range[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\t\t\t\theight: ( valPercent - lastValPercent ) + \"%\"\n\t\t\t\t\t\t\t}, {\n\t\t\t\t\t\t\t\tqueue: false,\n\t\t\t\t\t\t\t\tduration: o.animate\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\tlastValPercent = valPercent;\n\t\t\t} );\n\t\t} else {\n\t\t\tvalue = this.value();\n\t\t\tvalueMin = this._valueMin();\n\t\t\tvalueMax = this._valueMax();\n\t\t\tvalPercent = ( valueMax !== valueMin ) ?\n\t\t\t\t\t( value - valueMin ) / ( valueMax - valueMin ) * 100 :\n\t\t\t\t\t0;\n\t\t\t_set[ this.orientation === \"horizontal\" ? \"left\" : \"bottom\" ] = valPercent + \"%\";\n\t\t\tthis.handle.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( _set, o.animate );\n\n\t\t\tif ( oRange === \"min\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"horizontal\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\twidth: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"min\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: valPercent + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t\tif ( oRange === \"max\" && this.orientation === \"vertical\" ) {\n\t\t\t\tthis.range.stop( 1, 1 )[ animate ? \"animate\" : \"css\" ]( {\n\t\t\t\t\theight: ( 100 - valPercent ) + \"%\"\n\t\t\t\t}, o.animate );\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleEvents: {\n\t\tkeydown: function( event ) {\n\t\t\tvar allowed, curVal, newVal, step,\n\t\t\t\tindex = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t\tif ( !this._keySliding ) {\n\t\t\t\t\t\tthis._keySliding = true;\n\t\t\t\t\t\tthis._addClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t\t\t\tallowed = this._start( event, index );\n\t\t\t\t\t\tif ( allowed === false ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tstep = this.options.step;\n\t\t\tif ( this._hasMultipleValues() ) {\n\t\t\t\tcurVal = newVal = this.values( index );\n\t\t\t} else {\n\t\t\t\tcurVal = newVal = this.value();\n\t\t\t}\n\n\t\t\tswitch ( event.keyCode ) {\n\t\t\t\tcase $.ui.keyCode.HOME:\n\t\t\t\t\tnewVal = this._valueMin();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.END:\n\t\t\t\t\tnewVal = this._valueMax();\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_UP:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal + ( ( this._valueMax() - this._valueMin() ) / this.numPages )\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.PAGE_DOWN:\n\t\t\t\t\tnewVal = this._trimAlignValue(\n\t\t\t\t\t\tcurVal - ( ( this._valueMax() - this._valueMin() ) / this.numPages ) );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.UP:\n\t\t\t\tcase $.ui.keyCode.RIGHT:\n\t\t\t\t\tif ( curVal === this._valueMax() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal + step );\n\t\t\t\t\tbreak;\n\t\t\t\tcase $.ui.keyCode.DOWN:\n\t\t\t\tcase $.ui.keyCode.LEFT:\n\t\t\t\t\tif ( curVal === this._valueMin() ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tnewVal = this._trimAlignValue( curVal - step );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis._slide( event, index, newVal );\n\t\t},\n\t\tkeyup: function( event ) {\n\t\t\tvar index = $( event.target ).data( \"ui-slider-handle-index\" );\n\n\t\t\tif ( this._keySliding ) {\n\t\t\t\tthis._keySliding = false;\n\t\t\t\tthis._stop( event, index );\n\t\t\t\tthis._change( event, index );\n\t\t\t\tthis._removeClass( $( event.target ), null, \"ui-state-active\" );\n\t\t\t}\n\t\t}\n\t}\n} );\n\n\n/*!\n * jQuery UI Sortable 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Sortable\n//>>group: Interactions\n//>>description: Enables items in a list to be sorted using the mouse.\n//>>docs: http://api.jqueryui.com/sortable/\n//>>demos: http://jqueryui.com/sortable/\n//>>css.structure: ../../themes/base/sortable.css\n\n\n\nvar widgetsSortable = $.widget( \"ui.sortable\", $.ui.mouse, {\n\tversion: \"1.12.1\",\n\twidgetEventPrefix: \"sort\",\n\tready: false,\n\toptions: {\n\t\tappendTo: \"parent\",\n\t\taxis: false,\n\t\tconnectWith: false,\n\t\tcontainment: false,\n\t\tcursor: \"auto\",\n\t\tcursorAt: false,\n\t\tdropOnEmpty: true,\n\t\tforcePlaceholderSize: false,\n\t\tforceHelperSize: false,\n\t\tgrid: false,\n\t\thandle: false,\n\t\thelper: \"original\",\n\t\titems: \"> *\",\n\t\topacity: false,\n\t\tplaceholder: false,\n\t\trevert: false,\n\t\tscroll: true,\n\t\tscrollSensitivity: 20,\n\t\tscrollSpeed: 20,\n\t\tscope: \"default\",\n\t\ttolerance: \"intersect\",\n\t\tzIndex: 1000,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeStop: null,\n\t\tchange: null,\n\t\tdeactivate: null,\n\t\tout: null,\n\t\tover: null,\n\t\treceive: null,\n\t\tremove: null,\n\t\tsort: null,\n\t\tstart: null,\n\t\tstop: null,\n\t\tupdate: null\n\t},\n\n\t_isOverAxis: function( x, reference, size ) {\n\t\treturn ( x >= reference ) && ( x < ( reference + size ) );\n\t},\n\n\t_isFloating: function( item ) {\n\t\treturn ( /left|right/ ).test( item.css( \"float\" ) ) ||\n\t\t\t( /inline|table-cell/ ).test( item.css( \"display\" ) );\n\t},\n\n\t_create: function() {\n\t\tthis.containerCache = {};\n\t\tthis._addClass( \"ui-sortable\" );\n\n\t\t//Get the items\n\t\tthis.refresh();\n\n\t\t//Let's determine the parent's offset\n\t\tthis.offset = this.element.offset();\n\n\t\t//Initialize mouse events for interaction\n\t\tthis._mouseInit();\n\n\t\tthis._setHandleClassName();\n\n\t\t//We're ready to go\n\t\tthis.ready = true;\n\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"handle\" ) {\n\t\t\tthis._setHandleClassName();\n\t\t}\n\t},\n\n\t_setHandleClassName: function() {\n\t\tvar that = this;\n\t\tthis._removeClass( this.element.find( \".ui-sortable-handle\" ), \"ui-sortable-handle\" );\n\t\t$.each( this.items, function() {\n\t\t\tthat._addClass(\n\t\t\t\tthis.instance.options.handle ?\n\t\t\t\t\tthis.item.find( this.instance.options.handle ) :\n\t\t\t\t\tthis.item,\n\t\t\t\t\"ui-sortable-handle\"\n\t\t\t);\n\t\t} );\n\t},\n\n\t_destroy: function() {\n\t\tthis._mouseDestroy();\n\n\t\tfor ( var i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\tthis.items[ i ].item.removeData( this.widgetName + \"-item\" );\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_mouseCapture: function( event, overrideHandle ) {\n\t\tvar currentItem = null,\n\t\t\tvalidHandle = false,\n\t\t\tthat = this;\n\n\t\tif ( this.reverting ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( this.options.disabled || this.options.type === \"static\" ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t//We have to refresh the items data once first\n\t\tthis._refreshItems( event );\n\n\t\t//Find out if the clicked node (or one of its parents) is a actual item in this.items\n\t\t$( event.target ).parents().each( function() {\n\t\t\tif ( $.data( this, that.widgetName + \"-item\" ) === that ) {\n\t\t\t\tcurrentItem = $( this );\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} );\n\t\tif ( $.data( event.target, that.widgetName + \"-item\" ) === that ) {\n\t\t\tcurrentItem = $( event.target );\n\t\t}\n\n\t\tif ( !currentItem ) {\n\t\t\treturn false;\n\t\t}\n\t\tif ( this.options.handle && !overrideHandle ) {\n\t\t\t$( this.options.handle, currentItem ).find( \"*\" ).addBack().each( function() {\n\t\t\t\tif ( this === event.target ) {\n\t\t\t\t\tvalidHandle = true;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tif ( !validHandle ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\n\t\tthis.currentItem = currentItem;\n\t\tthis._removeCurrentsFromItems();\n\t\treturn true;\n\n\t},\n\n\t_mouseStart: function( event, overrideHandle, noActivation ) {\n\n\t\tvar i, body,\n\t\t\to = this.options;\n\n\t\tthis.currentContainer = this;\n\n\t\t//We only need to call refreshPositions, because the refreshItems call has been moved to\n\t\t// mouseCapture\n\t\tthis.refreshPositions();\n\n\t\t//Create and append the visible helper\n\t\tthis.helper = this._createHelper( event );\n\n\t\t//Cache the helper size\n\t\tthis._cacheHelperProportions();\n\n\t\t/*\n\t\t * - Position generation -\n\t\t * This block generates everything position related - it's the core of draggables.\n\t\t */\n\n\t\t//Cache the margins of the original element\n\t\tthis._cacheMargins();\n\n\t\t//Get the next scrolling parent\n\t\tthis.scrollParent = this.helper.scrollParent();\n\n\t\t//The element's absolute position on the page minus margins\n\t\tthis.offset = this.currentItem.offset();\n\t\tthis.offset = {\n\t\t\ttop: this.offset.top - this.margins.top,\n\t\t\tleft: this.offset.left - this.margins.left\n\t\t};\n\n\t\t$.extend( this.offset, {\n\t\t\tclick: { //Where the click happened, relative to the element\n\t\t\t\tleft: event.pageX - this.offset.left,\n\t\t\t\ttop: event.pageY - this.offset.top\n\t\t\t},\n\t\t\tparent: this._getParentOffset(),\n\n\t\t\t// This is a relative to absolute position minus the actual position calculation -\n\t\t\t// only used for relative positioned helper\n\t\t\trelative: this._getRelativeOffset()\n\t\t} );\n\n\t\t// Only after we got the offset, we can change the helper's position to absolute\n\t\t// TODO: Still need to figure out a way to make relative sorting possible\n\t\tthis.helper.css( \"position\", \"absolute\" );\n\t\tthis.cssPosition = this.helper.css( \"position\" );\n\n\t\t//Generate the original position\n\t\tthis.originalPosition = this._generatePosition( event );\n\t\tthis.originalPageX = event.pageX;\n\t\tthis.originalPageY = event.pageY;\n\n\t\t//Adjust the mouse offset relative to the helper if \"cursorAt\" is supplied\n\t\t( o.cursorAt && this._adjustOffsetFromHelper( o.cursorAt ) );\n\n\t\t//Cache the former DOM position\n\t\tthis.domPosition = {\n\t\t\tprev: this.currentItem.prev()[ 0 ],\n\t\t\tparent: this.currentItem.parent()[ 0 ]\n\t\t};\n\n\t\t// If the helper is not the original, hide the original so it's not playing any role during\n\t\t// the drag, won't cause anything bad this way\n\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\tthis.currentItem.hide();\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthis._createPlaceholder();\n\n\t\t//Set a containment if given in the options\n\t\tif ( o.containment ) {\n\t\t\tthis._setContainment();\n\t\t}\n\n\t\tif ( o.cursor && o.cursor !== \"auto\" ) { // cursor option\n\t\t\tbody = this.document.find( \"body\" );\n\n\t\t\t// Support: IE\n\t\t\tthis.storedCursor = body.css( \"cursor\" );\n\t\t\tbody.css( \"cursor\", o.cursor );\n\n\t\t\tthis.storedStylesheet =\n\t\t\t\t$( \"<style>*{ cursor: \" + o.cursor + \" !important; }</style>\" ).appendTo( body );\n\t\t}\n\n\t\tif ( o.opacity ) { // opacity option\n\t\t\tif ( this.helper.css( \"opacity\" ) ) {\n\t\t\t\tthis._storedOpacity = this.helper.css( \"opacity\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"opacity\", o.opacity );\n\t\t}\n\n\t\tif ( o.zIndex ) { // zIndex option\n\t\t\tif ( this.helper.css( \"zIndex\" ) ) {\n\t\t\t\tthis._storedZIndex = this.helper.css( \"zIndex\" );\n\t\t\t}\n\t\t\tthis.helper.css( \"zIndex\", o.zIndex );\n\t\t}\n\n\t\t//Prepare scrolling\n\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\t\t\tthis.overflowOffset = this.scrollParent.offset();\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"start\", event, this._uiHash() );\n\n\t\t//Recache the helper size\n\t\tif ( !this._preserveHelperProportions ) {\n\t\t\tthis._cacheHelperProportions();\n\t\t}\n\n\t\t//Post \"activate\" events to possible containers\n\t\tif ( !noActivation ) {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"activate\", event, this._uiHash( this ) );\n\t\t\t}\n\t\t}\n\n\t\t//Prepare possible droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.current = this;\n\t\t}\n\n\t\tif ( $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t}\n\n\t\tthis.dragging = true;\n\n\t\tthis._addClass( this.helper, \"ui-sortable-helper\" );\n\n\t\t// Execute the drag once - this causes the helper not to be visiblebefore getting its\n\t\t// correct position\n\t\tthis._mouseDrag( event );\n\t\treturn true;\n\n\t},\n\n\t_mouseDrag: function( event ) {\n\t\tvar i, item, itemElement, intersection,\n\t\t\to = this.options,\n\t\t\tscrolled = false;\n\n\t\t//Compute the helpers position\n\t\tthis.position = this._generatePosition( event );\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\tif ( !this.lastPositionAbs ) {\n\t\t\tthis.lastPositionAbs = this.positionAbs;\n\t\t}\n\n\t\t//Do scrolling\n\t\tif ( this.options.scroll ) {\n\t\t\tif ( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t\tthis.scrollParent[ 0 ].tagName !== \"HTML\" ) {\n\n\t\t\t\tif ( ( this.overflowOffset.top + this.scrollParent[ 0 ].offsetHeight ) -\n\t\t\t\t\t\tevent.pageY < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageY - this.overflowOffset.top < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollTop =\n\t\t\t\t\t\tscrolled = this.scrollParent[ 0 ].scrollTop - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t\tif ( ( this.overflowOffset.left + this.scrollParent[ 0 ].offsetWidth ) -\n\t\t\t\t\t\tevent.pageX < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft + o.scrollSpeed;\n\t\t\t\t} else if ( event.pageX - this.overflowOffset.left < o.scrollSensitivity ) {\n\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft = scrolled =\n\t\t\t\t\t\tthis.scrollParent[ 0 ].scrollLeft - o.scrollSpeed;\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tif ( event.pageY - this.document.scrollTop() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() - o.scrollSpeed );\n\t\t\t\t} else if ( this.window.height() - ( event.pageY - this.document.scrollTop() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollTop( this.document.scrollTop() + o.scrollSpeed );\n\t\t\t\t}\n\n\t\t\t\tif ( event.pageX - this.document.scrollLeft() < o.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() - o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t} else if ( this.window.width() - ( event.pageX - this.document.scrollLeft() ) <\n\t\t\t\t\t\to.scrollSensitivity ) {\n\t\t\t\t\tscrolled = this.document.scrollLeft(\n\t\t\t\t\t\tthis.document.scrollLeft() + o.scrollSpeed\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( scrolled !== false && $.ui.ddmanager && !o.dropBehaviour ) {\n\t\t\t\t$.ui.ddmanager.prepareOffsets( this, event );\n\t\t\t}\n\t\t}\n\n\t\t//Regenerate the absolute position used for position checks\n\t\tthis.positionAbs = this._convertPositionTo( \"absolute\" );\n\n\t\t//Set the helper position\n\t\tif ( !this.options.axis || this.options.axis !== \"y\" ) {\n\t\t\tthis.helper[ 0 ].style.left = this.position.left + \"px\";\n\t\t}\n\t\tif ( !this.options.axis || this.options.axis !== \"x\" ) {\n\t\t\tthis.helper[ 0 ].style.top = this.position.top + \"px\";\n\t\t}\n\n\t\t//Rearrange\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\n\t\t\t//Cache variables and intersection, continue if no intersection\n\t\t\titem = this.items[ i ];\n\t\t\titemElement = item.item[ 0 ];\n\t\t\tintersection = this._intersectsWithPointer( item );\n\t\t\tif ( !intersection ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Only put the placeholder inside the current Container, skip all\n\t\t\t// items from other containers. This works because when moving\n\t\t\t// an item from one container to another the\n\t\t\t// currentContainer is switched before the placeholder is moved.\n\t\t\t//\n\t\t\t// Without this, moving items in \"sub-sortables\" can cause\n\t\t\t// the placeholder to jitter between the outer and inner container.\n\t\t\tif ( item.instance !== this.currentContainer ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Cannot intersect with itself\n\t\t\t// no useless actions that have been done before\n\t\t\t// no action if the item moved is the parent of the item checked\n\t\t\tif ( itemElement !== this.currentItem[ 0 ] &&\n\t\t\t\tthis.placeholder[ intersection === 1 ? \"next\" : \"prev\" ]()[ 0 ] !== itemElement &&\n\t\t\t\t!$.contains( this.placeholder[ 0 ], itemElement ) &&\n\t\t\t\t( this.options.type === \"semi-dynamic\" ?\n\t\t\t\t\t!$.contains( this.element[ 0 ], itemElement ) :\n\t\t\t\t\ttrue\n\t\t\t\t)\n\t\t\t) {\n\n\t\t\t\tthis.direction = intersection === 1 ? \"down\" : \"up\";\n\n\t\t\t\tif ( this.options.tolerance === \"pointer\" || this._intersectsWithSides( item ) ) {\n\t\t\t\t\tthis._rearrange( event, item );\n\t\t\t\t} else {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tthis._contactContainers( event );\n\n\t\t//Interconnect with droppables\n\t\tif ( $.ui.ddmanager ) {\n\t\t\t$.ui.ddmanager.drag( this, event );\n\t\t}\n\n\t\t//Call callbacks\n\t\tthis._trigger( \"sort\", event, this._uiHash() );\n\n\t\tthis.lastPositionAbs = this.positionAbs;\n\t\treturn false;\n\n\t},\n\n\t_mouseStop: function( event, noPropagation ) {\n\n\t\tif ( !event ) {\n\t\t\treturn;\n\t\t}\n\n\t\t//If we are using droppables, inform the manager about the drop\n\t\tif ( $.ui.ddmanager && !this.options.dropBehaviour ) {\n\t\t\t$.ui.ddmanager.drop( this, event );\n\t\t}\n\n\t\tif ( this.options.revert ) {\n\t\t\tvar that = this,\n\t\t\t\tcur = this.placeholder.offset(),\n\t\t\t\taxis = this.options.axis,\n\t\t\t\tanimation = {};\n\n\t\t\tif ( !axis || axis === \"x\" ) {\n\t\t\t\tanimation.left = cur.left - this.offset.parent.left - this.margins.left +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollLeft\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tif ( !axis || axis === \"y\" ) {\n\t\t\t\tanimation.top = cur.top - this.offset.parent.top - this.margins.top +\n\t\t\t\t\t( this.offsetParent[ 0 ] === this.document[ 0 ].body ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tthis.offsetParent[ 0 ].scrollTop\n\t\t\t\t\t);\n\t\t\t}\n\t\t\tthis.reverting = true;\n\t\t\t$( this.helper ).animate(\n\t\t\t\tanimation,\n\t\t\t\tparseInt( this.options.revert, 10 ) || 500,\n\t\t\t\tfunction() {\n\t\t\t\t\tthat._clear( event );\n\t\t\t\t}\n\t\t\t);\n\t\t} else {\n\t\t\tthis._clear( event, noPropagation );\n\t\t}\n\n\t\treturn false;\n\n\t},\n\n\tcancel: function() {\n\n\t\tif ( this.dragging ) {\n\n\t\t\tthis._mouseUp( new $.Event( \"mouseup\", { target: null } ) );\n\n\t\t\tif ( this.options.helper === \"original\" ) {\n\t\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t\t} else {\n\t\t\t\tthis.currentItem.show();\n\t\t\t}\n\n\t\t\t//Post deactivating events to containers\n\t\t\tfor ( var i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tthis.containers[ i ]._trigger( \"deactivate\", null, this._uiHash( this ) );\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", null, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\tif ( this.placeholder ) {\n\n\t\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t\t// it unbinds ALL events from the original node!\n\t\t\tif ( this.placeholder[ 0 ].parentNode ) {\n\t\t\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\t\t\t}\n\t\t\tif ( this.options.helper !== \"original\" && this.helper &&\n\t\t\t\t\tthis.helper[ 0 ].parentNode ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\n\t\t\t$.extend( this, {\n\t\t\t\thelper: null,\n\t\t\t\tdragging: false,\n\t\t\t\treverting: false,\n\t\t\t\t_noFinalSort: null\n\t\t\t} );\n\n\t\t\tif ( this.domPosition.prev ) {\n\t\t\t\t$( this.domPosition.prev ).after( this.currentItem );\n\t\t\t} else {\n\t\t\t\t$( this.domPosition.parent ).prepend( this.currentItem );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\n\t},\n\n\tserialize: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tstr = [];\n\t\to = o || {};\n\n\t\t$( items ).each( function() {\n\t\t\tvar res = ( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" )\n\t\t\t\t.match( o.expression || ( /(.+)[\\-=_](.+)/ ) );\n\t\t\tif ( res ) {\n\t\t\t\tstr.push(\n\t\t\t\t\t( o.key || res[ 1 ] + \"[]\" ) +\n\t\t\t\t\t\"=\" + ( o.key && o.expression ? res[ 1 ] : res[ 2 ] ) );\n\t\t\t}\n\t\t} );\n\n\t\tif ( !str.length && o.key ) {\n\t\t\tstr.push( o.key + \"=\" );\n\t\t}\n\n\t\treturn str.join( \"&\" );\n\n\t},\n\n\ttoArray: function( o ) {\n\n\t\tvar items = this._getItemsAsjQuery( o && o.connected ),\n\t\t\tret = [];\n\n\t\to = o || {};\n\n\t\titems.each( function() {\n\t\t\tret.push( $( o.item || this ).attr( o.attribute || \"id\" ) || \"\" );\n\t\t} );\n\t\treturn ret;\n\n\t},\n\n\t/* Be careful with the following core functions */\n\t_intersectsWith: function( item ) {\n\n\t\tvar x1 = this.positionAbs.left,\n\t\t\tx2 = x1 + this.helperProportions.width,\n\t\t\ty1 = this.positionAbs.top,\n\t\t\ty2 = y1 + this.helperProportions.height,\n\t\t\tl = item.left,\n\t\t\tr = l + item.width,\n\t\t\tt = item.top,\n\t\t\tb = t + item.height,\n\t\t\tdyClick = this.offset.click.top,\n\t\t\tdxClick = this.offset.click.left,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) || ( ( y1 + dyClick ) > t &&\n\t\t\t\t( y1 + dyClick ) < b ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) || ( ( x1 + dxClick ) > l &&\n\t\t\t\t( x1 + dxClick ) < r ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( this.options.tolerance === \"pointer\" ||\n\t\t\tthis.options.forcePointerForContainers ||\n\t\t\t( this.options.tolerance !== \"pointer\" &&\n\t\t\t\tthis.helperProportions[ this.floating ? \"width\" : \"height\" ] >\n\t\t\t\titem[ this.floating ? \"width\" : \"height\" ] )\n\t\t) {\n\t\t\treturn isOverElement;\n\t\t} else {\n\n\t\t\treturn ( l < x1 + ( this.helperProportions.width / 2 ) && // Right Half\n\t\t\t\tx2 - ( this.helperProportions.width / 2 ) < r && // Left Half\n\t\t\t\tt < y1 + ( this.helperProportions.height / 2 ) && // Bottom Half\n\t\t\t\ty2 - ( this.helperProportions.height / 2 ) < b ); // Top Half\n\n\t\t}\n\t},\n\n\t_intersectsWithPointer: function( item ) {\n\t\tvar verticalDirection, horizontalDirection,\n\t\t\tisOverElementHeight = ( this.options.axis === \"x\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.top + this.offset.click.top, item.top, item.height ),\n\t\t\tisOverElementWidth = ( this.options.axis === \"y\" ) ||\n\t\t\t\tthis._isOverAxis(\n\t\t\t\t\tthis.positionAbs.left + this.offset.click.left, item.left, item.width ),\n\t\t\tisOverElement = isOverElementHeight && isOverElementWidth;\n\n\t\tif ( !isOverElement ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tverticalDirection = this._getDragVerticalDirection();\n\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\treturn this.floating ?\n\t\t\t( ( horizontalDirection === \"right\" || verticalDirection === \"down\" ) ? 2 : 1 )\n\t\t\t: ( verticalDirection && ( verticalDirection === \"down\" ? 2 : 1 ) );\n\n\t},\n\n\t_intersectsWithSides: function( item ) {\n\n\t\tvar isOverBottomHalf = this._isOverAxis( this.positionAbs.top +\n\t\t\t\tthis.offset.click.top, item.top + ( item.height / 2 ), item.height ),\n\t\t\tisOverRightHalf = this._isOverAxis( this.positionAbs.left +\n\t\t\t\tthis.offset.click.left, item.left + ( item.width / 2 ), item.width ),\n\t\t\tverticalDirection = this._getDragVerticalDirection(),\n\t\t\thorizontalDirection = this._getDragHorizontalDirection();\n\n\t\tif ( this.floating && horizontalDirection ) {\n\t\t\treturn ( ( horizontalDirection === \"right\" && isOverRightHalf ) ||\n\t\t\t\t( horizontalDirection === \"left\" && !isOverRightHalf ) );\n\t\t} else {\n\t\t\treturn verticalDirection && ( ( verticalDirection === \"down\" && isOverBottomHalf ) ||\n\t\t\t\t( verticalDirection === \"up\" && !isOverBottomHalf ) );\n\t\t}\n\n\t},\n\n\t_getDragVerticalDirection: function() {\n\t\tvar delta = this.positionAbs.top - this.lastPositionAbs.top;\n\t\treturn delta !== 0 && ( delta > 0 ? \"down\" : \"up\" );\n\t},\n\n\t_getDragHorizontalDirection: function() {\n\t\tvar delta = this.positionAbs.left - this.lastPositionAbs.left;\n\t\treturn delta !== 0 && ( delta > 0 ? \"right\" : \"left\" );\n\t},\n\n\trefresh: function( event ) {\n\t\tthis._refreshItems( event );\n\t\tthis._setHandleClassName();\n\t\tthis.refreshPositions();\n\t\treturn this;\n\t},\n\n\t_connectWith: function() {\n\t\tvar options = this.options;\n\t\treturn options.connectWith.constructor === String ?\n\t\t\t[ options.connectWith ] :\n\t\t\toptions.connectWith;\n\t},\n\n\t_getItemsAsjQuery: function( connected ) {\n\n\t\tvar i, j, cur, inst,\n\t\t\titems = [],\n\t\t\tqueries = [],\n\t\t\tconnectWith = this._connectWith();\n\n\t\tif ( connectWith && connected ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items.call( inst.element ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t\t\t\t\t.not( \".ui-sortable-placeholder\" ), inst ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tqueries.push( [ $.isFunction( this.options.items ) ?\n\t\t\tthis.options.items\n\t\t\t\t.call( this.element, null, { options: this.options, item: this.currentItem } ) :\n\t\t\t$( this.options.items, this.element )\n\t\t\t\t.not( \".ui-sortable-helper\" )\n\t\t\t\t.not( \".ui-sortable-placeholder\" ), this ] );\n\n\t\tfunction addItems() {\n\t\t\titems.push( this );\n\t\t}\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\tqueries[ i ][ 0 ].each( addItems );\n\t\t}\n\n\t\treturn $( items );\n\n\t},\n\n\t_removeCurrentsFromItems: function() {\n\n\t\tvar list = this.currentItem.find( \":data(\" + this.widgetName + \"-item)\" );\n\n\t\tthis.items = $.grep( this.items, function( item ) {\n\t\t\tfor ( var j = 0; j < list.length; j++ ) {\n\t\t\t\tif ( list[ j ] === item.item[ 0 ] ) {\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\n\t},\n\n\t_refreshItems: function( event ) {\n\n\t\tthis.items = [];\n\t\tthis.containers = [ this ];\n\n\t\tvar i, j, cur, inst, targetData, _queries, item, queriesLength,\n\t\t\titems = this.items,\n\t\t\tqueries = [ [ $.isFunction( this.options.items ) ?\n\t\t\t\tthis.options.items.call( this.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t$( this.options.items, this.element ), this ] ],\n\t\t\tconnectWith = this._connectWith();\n\n\t\t//Shouldn't be run the first time through due to massive slow-down\n\t\tif ( connectWith && this.ready ) {\n\t\t\tfor ( i = connectWith.length - 1; i >= 0; i-- ) {\n\t\t\t\tcur = $( connectWith[ i ], this.document[ 0 ] );\n\t\t\t\tfor ( j = cur.length - 1; j >= 0; j-- ) {\n\t\t\t\t\tinst = $.data( cur[ j ], this.widgetFullName );\n\t\t\t\t\tif ( inst && inst !== this && !inst.options.disabled ) {\n\t\t\t\t\t\tqueries.push( [ $.isFunction( inst.options.items ) ?\n\t\t\t\t\t\t\tinst.options.items\n\t\t\t\t\t\t\t\t.call( inst.element[ 0 ], event, { item: this.currentItem } ) :\n\t\t\t\t\t\t\t$( inst.options.items, inst.element ), inst ] );\n\t\t\t\t\t\tthis.containers.push( inst );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor ( i = queries.length - 1; i >= 0; i-- ) {\n\t\t\ttargetData = queries[ i ][ 1 ];\n\t\t\t_queries = queries[ i ][ 0 ];\n\n\t\t\tfor ( j = 0, queriesLength = _queries.length; j < queriesLength; j++ ) {\n\t\t\t\titem = $( _queries[ j ] );\n\n\t\t\t\t// Data for target checking (mouse manager)\n\t\t\t\titem.data( this.widgetName + \"-item\", targetData );\n\n\t\t\t\titems.push( {\n\t\t\t\t\titem: item,\n\t\t\t\t\tinstance: targetData,\n\t\t\t\t\twidth: 0, height: 0,\n\t\t\t\t\tleft: 0, top: 0\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t},\n\n\trefreshPositions: function( fast ) {\n\n\t\t// Determine whether items are being displayed horizontally\n\t\tthis.floating = this.items.length ?\n\t\t\tthis.options.axis === \"x\" || this._isFloating( this.items[ 0 ].item ) :\n\t\t\tfalse;\n\n\t\t//This has to be redone because due to the item being moved out/into the offsetParent,\n\t\t// the offsetParent's position will change\n\t\tif ( this.offsetParent && this.helper ) {\n\t\t\tthis.offset.parent = this._getParentOffset();\n\t\t}\n\n\t\tvar i, item, t, p;\n\n\t\tfor ( i = this.items.length - 1; i >= 0; i-- ) {\n\t\t\titem = this.items[ i ];\n\n\t\t\t//We ignore calculating positions of all connected containers when we're not over them\n\t\t\tif ( item.instance !== this.currentContainer && this.currentContainer &&\n\t\t\t\t\titem.item[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tt = this.options.toleranceElement ?\n\t\t\t\t$( this.options.toleranceElement, item.item ) :\n\t\t\t\titem.item;\n\n\t\t\tif ( !fast ) {\n\t\t\t\titem.width = t.outerWidth();\n\t\t\t\titem.height = t.outerHeight();\n\t\t\t}\n\n\t\t\tp = t.offset();\n\t\t\titem.left = p.left;\n\t\t\titem.top = p.top;\n\t\t}\n\n\t\tif ( this.options.custom && this.options.custom.refreshContainers ) {\n\t\t\tthis.options.custom.refreshContainers.call( this );\n\t\t} else {\n\t\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\t\tp = this.containers[ i ].element.offset();\n\t\t\t\tthis.containers[ i ].containerCache.left = p.left;\n\t\t\t\tthis.containers[ i ].containerCache.top = p.top;\n\t\t\t\tthis.containers[ i ].containerCache.width =\n\t\t\t\t\tthis.containers[ i ].element.outerWidth();\n\t\t\t\tthis.containers[ i ].containerCache.height =\n\t\t\t\t\tthis.containers[ i ].element.outerHeight();\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t},\n\n\t_createPlaceholder: function( that ) {\n\t\tthat = that || this;\n\t\tvar className,\n\t\t\to = that.options;\n\n\t\tif ( !o.placeholder || o.placeholder.constructor === String ) {\n\t\t\tclassName = o.placeholder;\n\t\t\to.placeholder = {\n\t\t\t\telement: function() {\n\n\t\t\t\t\tvar nodeName = that.currentItem[ 0 ].nodeName.toLowerCase(),\n\t\t\t\t\t\telement = $( \"<\" + nodeName + \">\", that.document[ 0 ] );\n\n\t\t\t\t\t\tthat._addClass( element, \"ui-sortable-placeholder\",\n\t\t\t\t\t\t\t\tclassName || that.currentItem[ 0 ].className )\n\t\t\t\t\t\t\t._removeClass( element, \"ui-sortable-helper\" );\n\n\t\t\t\t\tif ( nodeName === \"tbody\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder(\n\t\t\t\t\t\t\tthat.currentItem.find( \"tr\" ).eq( 0 ),\n\t\t\t\t\t\t\t$( \"<tr>\", that.document[ 0 ] ).appendTo( element )\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if ( nodeName === \"tr\" ) {\n\t\t\t\t\t\tthat._createTrPlaceholder( that.currentItem, element );\n\t\t\t\t\t} else if ( nodeName === \"img\" ) {\n\t\t\t\t\t\telement.attr( \"src\", that.currentItem.attr( \"src\" ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( !className ) {\n\t\t\t\t\t\telement.css( \"visibility\", \"hidden\" );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn element;\n\t\t\t\t},\n\t\t\t\tupdate: function( container, p ) {\n\n\t\t\t\t\t// 1. If a className is set as 'placeholder option, we don't force sizes -\n\t\t\t\t\t// the class is responsible for that\n\t\t\t\t\t// 2. The option 'forcePlaceholderSize can be enabled to force it even if a\n\t\t\t\t\t// class name is specified\n\t\t\t\t\tif ( className && !o.forcePlaceholderSize ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t//If the element doesn't have a actual height by itself (without styles coming\n\t\t\t\t\t// from a stylesheet), it receives the inline height from the dragged item\n\t\t\t\t\tif ( !p.height() ) {\n\t\t\t\t\t\tp.height(\n\t\t\t\t\t\t\tthat.currentItem.innerHeight() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingTop\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingBottom\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t\tif ( !p.width() ) {\n\t\t\t\t\t\tp.width(\n\t\t\t\t\t\t\tthat.currentItem.innerWidth() -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingLeft\" ) || 0, 10 ) -\n\t\t\t\t\t\t\tparseInt( that.currentItem.css( \"paddingRight\" ) || 0, 10 ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\n\t\t//Create the placeholder\n\t\tthat.placeholder = $( o.placeholder.element.call( that.element, that.currentItem ) );\n\n\t\t//Append it after the actual current item\n\t\tthat.currentItem.after( that.placeholder );\n\n\t\t//Update the size of the placeholder (TODO: Logic to fuzzy, see line 316/317)\n\t\to.placeholder.update( that, that.placeholder );\n\n\t},\n\n\t_createTrPlaceholder: function( sourceTr, targetTr ) {\n\t\tvar that = this;\n\n\t\tsourceTr.children().each( function() {\n\t\t\t$( \"<td>&#160;</td>\", that.document[ 0 ] )\n\t\t\t\t.attr( \"colspan\", $( this ).attr( \"colspan\" ) || 1 )\n\t\t\t\t.appendTo( targetTr );\n\t\t} );\n\t},\n\n\t_contactContainers: function( event ) {\n\t\tvar i, j, dist, itemWithLeastDistance, posProperty, sizeProperty, cur, nearBottom,\n\t\t\tfloating, axis,\n\t\t\tinnermostContainer = null,\n\t\t\tinnermostIndex = null;\n\n\t\t// Get innermost container that intersects with item\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\n\t\t\t// Never consider a container that's located within the item itself\n\t\t\tif ( $.contains( this.currentItem[ 0 ], this.containers[ i ].element[ 0 ] ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( this._intersectsWith( this.containers[ i ].containerCache ) ) {\n\n\t\t\t\t// If we've already found a container and it's more \"inner\" than this, then continue\n\t\t\t\tif ( innermostContainer &&\n\t\t\t\t\t\t$.contains(\n\t\t\t\t\t\t\tthis.containers[ i ].element[ 0 ],\n\t\t\t\t\t\t\tinnermostContainer.element[ 0 ] ) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tinnermostContainer = this.containers[ i ];\n\t\t\t\tinnermostIndex = i;\n\n\t\t\t} else {\n\n\t\t\t\t// container doesn't intersect. trigger \"out\" event if necessary\n\t\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\t\tthis.containers[ i ]._trigger( \"out\", event, this._uiHash( this ) );\n\t\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\n\t\t// If no intersecting containers found, return\n\t\tif ( !innermostContainer ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Move the item into the container if it's not there already\n\t\tif ( this.containers.length === 1 ) {\n\t\t\tif ( !this.containers[ innermostIndex ].containerCache.over ) {\n\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t\t}\n\t\t} else {\n\n\t\t\t// When entering a new container, we will find the item with the least distance and\n\t\t\t// append our item near it\n\t\t\tdist = 10000;\n\t\t\titemWithLeastDistance = null;\n\t\t\tfloating = innermostContainer.floating || this._isFloating( this.currentItem );\n\t\t\tposProperty = floating ? \"left\" : \"top\";\n\t\t\tsizeProperty = floating ? \"width\" : \"height\";\n\t\t\taxis = floating ? \"pageX\" : \"pageY\";\n\n\t\t\tfor ( j = this.items.length - 1; j >= 0; j-- ) {\n\t\t\t\tif ( !$.contains(\n\t\t\t\t\t\tthis.containers[ innermostIndex ].element[ 0 ], this.items[ j ].item[ 0 ] )\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif ( this.items[ j ].item[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tcur = this.items[ j ].item.offset()[ posProperty ];\n\t\t\t\tnearBottom = false;\n\t\t\t\tif ( event[ axis ] - cur > this.items[ j ][ sizeProperty ] / 2 ) {\n\t\t\t\t\tnearBottom = true;\n\t\t\t\t}\n\n\t\t\t\tif ( Math.abs( event[ axis ] - cur ) < dist ) {\n\t\t\t\t\tdist = Math.abs( event[ axis ] - cur );\n\t\t\t\t\titemWithLeastDistance = this.items[ j ];\n\t\t\t\t\tthis.direction = nearBottom ? \"up\" : \"down\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//Check if dropOnEmpty is enabled\n\t\t\tif ( !itemWithLeastDistance && !this.options.dropOnEmpty ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this.currentContainer === this.containers[ innermostIndex ] ) {\n\t\t\t\tif ( !this.currentContainer.containerCache.over ) {\n\t\t\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash() );\n\t\t\t\t\tthis.currentContainer.containerCache.over = 1;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\titemWithLeastDistance ?\n\t\t\t\tthis._rearrange( event, itemWithLeastDistance, null, true ) :\n\t\t\t\tthis._rearrange( event, null, this.containers[ innermostIndex ].element, true );\n\t\t\tthis._trigger( \"change\", event, this._uiHash() );\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"change\", event, this._uiHash( this ) );\n\t\t\tthis.currentContainer = this.containers[ innermostIndex ];\n\n\t\t\t//Update the placeholder\n\t\t\tthis.options.placeholder.update( this.currentContainer, this.placeholder );\n\n\t\t\tthis.containers[ innermostIndex ]._trigger( \"over\", event, this._uiHash( this ) );\n\t\t\tthis.containers[ innermostIndex ].containerCache.over = 1;\n\t\t}\n\n\t},\n\n\t_createHelper: function( event ) {\n\n\t\tvar o = this.options,\n\t\t\thelper = $.isFunction( o.helper ) ?\n\t\t\t\t$( o.helper.apply( this.element[ 0 ], [ event, this.currentItem ] ) ) :\n\t\t\t\t( o.helper === \"clone\" ? this.currentItem.clone() : this.currentItem );\n\n\t\t//Add the helper to the DOM if that didn't happen already\n\t\tif ( !helper.parents( \"body\" ).length ) {\n\t\t\t$( o.appendTo !== \"parent\" ?\n\t\t\t\to.appendTo :\n\t\t\t\tthis.currentItem[ 0 ].parentNode )[ 0 ].appendChild( helper[ 0 ] );\n\t\t}\n\n\t\tif ( helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tthis._storedCSS = {\n\t\t\t\twidth: this.currentItem[ 0 ].style.width,\n\t\t\t\theight: this.currentItem[ 0 ].style.height,\n\t\t\t\tposition: this.currentItem.css( \"position\" ),\n\t\t\t\ttop: this.currentItem.css( \"top\" ),\n\t\t\t\tleft: this.currentItem.css( \"left\" )\n\t\t\t};\n\t\t}\n\n\t\tif ( !helper[ 0 ].style.width || o.forceHelperSize ) {\n\t\t\thelper.width( this.currentItem.width() );\n\t\t}\n\t\tif ( !helper[ 0 ].style.height || o.forceHelperSize ) {\n\t\t\thelper.height( this.currentItem.height() );\n\t\t}\n\n\t\treturn helper;\n\n\t},\n\n\t_adjustOffsetFromHelper: function( obj ) {\n\t\tif ( typeof obj === \"string\" ) {\n\t\t\tobj = obj.split( \" \" );\n\t\t}\n\t\tif ( $.isArray( obj ) ) {\n\t\t\tobj = { left: +obj[ 0 ], top: +obj[ 1 ] || 0 };\n\t\t}\n\t\tif ( \"left\" in obj ) {\n\t\t\tthis.offset.click.left = obj.left + this.margins.left;\n\t\t}\n\t\tif ( \"right\" in obj ) {\n\t\t\tthis.offset.click.left = this.helperProportions.width - obj.right + this.margins.left;\n\t\t}\n\t\tif ( \"top\" in obj ) {\n\t\t\tthis.offset.click.top = obj.top + this.margins.top;\n\t\t}\n\t\tif ( \"bottom\" in obj ) {\n\t\t\tthis.offset.click.top = this.helperProportions.height - obj.bottom + this.margins.top;\n\t\t}\n\t},\n\n\t_getParentOffset: function() {\n\n\t\t//Get the offsetParent and cache its position\n\t\tthis.offsetParent = this.helper.offsetParent();\n\t\tvar po = this.offsetParent.offset();\n\n\t\t// This is a special case where we need to modify a offset calculated on start, since the\n\t\t// following happened:\n\t\t// 1. The position of the helper is absolute, so it's position is calculated based on the\n\t\t// next positioned parent\n\t\t// 2. The actual offset parent is a child of the scroll parent, and the scroll parent isn't\n\t\t// the document, which means that the scroll is included in the initial calculation of the\n\t\t// offset of the parent, and never recalculated upon drag\n\t\tif ( this.cssPosition === \"absolute\" && this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) {\n\t\t\tpo.left += this.scrollParent.scrollLeft();\n\t\t\tpo.top += this.scrollParent.scrollTop();\n\t\t}\n\n\t\t// This needs to be actually done for all browsers, since pageX/pageY includes this\n\t\t// information with an ugly IE fix\n\t\tif ( this.offsetParent[ 0 ] === this.document[ 0 ].body ||\n\t\t\t\t( this.offsetParent[ 0 ].tagName &&\n\t\t\t\tthis.offsetParent[ 0 ].tagName.toLowerCase() === \"html\" && $.ui.ie ) ) {\n\t\t\tpo = { top: 0, left: 0 };\n\t\t}\n\n\t\treturn {\n\t\t\ttop: po.top + ( parseInt( this.offsetParent.css( \"borderTopWidth\" ), 10 ) || 0 ),\n\t\t\tleft: po.left + ( parseInt( this.offsetParent.css( \"borderLeftWidth\" ), 10 ) || 0 )\n\t\t};\n\n\t},\n\n\t_getRelativeOffset: function() {\n\n\t\tif ( this.cssPosition === \"relative\" ) {\n\t\t\tvar p = this.currentItem.position();\n\t\t\treturn {\n\t\t\t\ttop: p.top - ( parseInt( this.helper.css( \"top\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollTop(),\n\t\t\t\tleft: p.left - ( parseInt( this.helper.css( \"left\" ), 10 ) || 0 ) +\n\t\t\t\t\tthis.scrollParent.scrollLeft()\n\t\t\t};\n\t\t} else {\n\t\t\treturn { top: 0, left: 0 };\n\t\t}\n\n\t},\n\n\t_cacheMargins: function() {\n\t\tthis.margins = {\n\t\t\tleft: ( parseInt( this.currentItem.css( \"marginLeft\" ), 10 ) || 0 ),\n\t\t\ttop: ( parseInt( this.currentItem.css( \"marginTop\" ), 10 ) || 0 )\n\t\t};\n\t},\n\n\t_cacheHelperProportions: function() {\n\t\tthis.helperProportions = {\n\t\t\twidth: this.helper.outerWidth(),\n\t\t\theight: this.helper.outerHeight()\n\t\t};\n\t},\n\n\t_setContainment: function() {\n\n\t\tvar ce, co, over,\n\t\t\to = this.options;\n\t\tif ( o.containment === \"parent\" ) {\n\t\t\to.containment = this.helper[ 0 ].parentNode;\n\t\t}\n\t\tif ( o.containment === \"document\" || o.containment === \"window\" ) {\n\t\t\tthis.containment = [\n\t\t\t\t0 - this.offset.relative.left - this.offset.parent.left,\n\t\t\t\t0 - this.offset.relative.top - this.offset.parent.top,\n\t\t\t\to.containment === \"document\" ?\n\t\t\t\t\tthis.document.width() :\n\t\t\t\t\tthis.window.width() - this.helperProportions.width - this.margins.left,\n\t\t\t\t( o.containment === \"document\" ?\n\t\t\t\t\t( this.document.height() || document.body.parentNode.scrollHeight ) :\n\t\t\t\t\tthis.window.height() || this.document[ 0 ].body.parentNode.scrollHeight\n\t\t\t\t) - this.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t\tif ( !( /^(document|window|parent)$/ ).test( o.containment ) ) {\n\t\t\tce = $( o.containment )[ 0 ];\n\t\t\tco = $( o.containment ).offset();\n\t\t\tover = ( $( ce ).css( \"overflow\" ) !== \"hidden\" );\n\n\t\t\tthis.containment = [\n\t\t\t\tco.left + ( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingLeft\" ), 10 ) || 0 ) - this.margins.left,\n\t\t\t\tco.top + ( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) +\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingTop\" ), 10 ) || 0 ) - this.margins.top,\n\t\t\t\tco.left + ( over ? Math.max( ce.scrollWidth, ce.offsetWidth ) : ce.offsetWidth ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderLeftWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingRight\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.width - this.margins.left,\n\t\t\t\tco.top + ( over ? Math.max( ce.scrollHeight, ce.offsetHeight ) : ce.offsetHeight ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"borderTopWidth\" ), 10 ) || 0 ) -\n\t\t\t\t\t( parseInt( $( ce ).css( \"paddingBottom\" ), 10 ) || 0 ) -\n\t\t\t\t\tthis.helperProportions.height - this.margins.top\n\t\t\t];\n\t\t}\n\n\t},\n\n\t_convertPositionTo: function( d, pos ) {\n\n\t\tif ( !pos ) {\n\t\t\tpos = this.position;\n\t\t}\n\t\tvar mod = d === \"absolute\" ? 1 : -1,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.top\t+\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top * mod -\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) * mod )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpos.left +\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left * mod +\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left * mod\t-\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 :\n\t\t\t\t\tscroll.scrollLeft() ) * mod )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_generatePosition: function( event ) {\n\n\t\tvar top, left,\n\t\t\to = this.options,\n\t\t\tpageX = event.pageX,\n\t\t\tpageY = event.pageY,\n\t\t\tscroll = this.cssPosition === \"absolute\" &&\n\t\t\t\t!( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\t$.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ?\n\t\t\t\t\tthis.offsetParent :\n\t\t\t\t\tthis.scrollParent,\n\t\t\t\tscrollIsRootNode = ( /(html|body)/i ).test( scroll[ 0 ].tagName );\n\n\t\t// This is another very weird special case that only happens for relative elements:\n\t\t// 1. If the css position is relative\n\t\t// 2. and the scroll parent is the document or similar to the offset parent\n\t\t// we have to refresh the relative offset during the scroll so there are no jumps\n\t\tif ( this.cssPosition === \"relative\" && !( this.scrollParent[ 0 ] !== this.document[ 0 ] &&\n\t\t\t\tthis.scrollParent[ 0 ] !== this.offsetParent[ 0 ] ) ) {\n\t\t\tthis.offset.relative = this._getRelativeOffset();\n\t\t}\n\n\t\t/*\n\t\t * - Position constraining -\n\t\t * Constrain the position to a mix of grid, containment.\n\t\t */\n\n\t\tif ( this.originalPosition ) { //If we are not dragging yet, we won't check for options\n\n\t\t\tif ( this.containment ) {\n\t\t\t\tif ( event.pageX - this.offset.click.left < this.containment[ 0 ] ) {\n\t\t\t\t\tpageX = this.containment[ 0 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top < this.containment[ 1 ] ) {\n\t\t\t\t\tpageY = this.containment[ 1 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t\tif ( event.pageX - this.offset.click.left > this.containment[ 2 ] ) {\n\t\t\t\t\tpageX = this.containment[ 2 ] + this.offset.click.left;\n\t\t\t\t}\n\t\t\t\tif ( event.pageY - this.offset.click.top > this.containment[ 3 ] ) {\n\t\t\t\t\tpageY = this.containment[ 3 ] + this.offset.click.top;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( o.grid ) {\n\t\t\t\ttop = this.originalPageY + Math.round( ( pageY - this.originalPageY ) /\n\t\t\t\t\to.grid[ 1 ] ) * o.grid[ 1 ];\n\t\t\t\tpageY = this.containment ?\n\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] &&\n\t\t\t\t\t\ttop - this.offset.click.top <= this.containment[ 3 ] ) ?\n\t\t\t\t\t\t\ttop :\n\t\t\t\t\t\t\t( ( top - this.offset.click.top >= this.containment[ 1 ] ) ?\n\t\t\t\t\t\t\t\ttop - o.grid[ 1 ] : top + o.grid[ 1 ] ) ) :\n\t\t\t\t\t\t\t\ttop;\n\n\t\t\t\tleft = this.originalPageX + Math.round( ( pageX - this.originalPageX ) /\n\t\t\t\t\to.grid[ 0 ] ) * o.grid[ 0 ];\n\t\t\t\tpageX = this.containment ?\n\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] &&\n\t\t\t\t\t\tleft - this.offset.click.left <= this.containment[ 2 ] ) ?\n\t\t\t\t\t\t\tleft :\n\t\t\t\t\t\t\t( ( left - this.offset.click.left >= this.containment[ 0 ] ) ?\n\t\t\t\t\t\t\t\tleft - o.grid[ 0 ] : left + o.grid[ 0 ] ) ) :\n\t\t\t\t\t\t\t\tleft;\n\t\t\t}\n\n\t\t}\n\n\t\treturn {\n\t\t\ttop: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageY -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.top -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.top -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.top +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollTop() :\n\t\t\t\t\t( scrollIsRootNode ? 0 : scroll.scrollTop() ) ) )\n\t\t\t),\n\t\t\tleft: (\n\n\t\t\t\t// The absolute mouse position\n\t\t\t\tpageX -\n\n\t\t\t\t// Click offset (relative to the element)\n\t\t\t\tthis.offset.click.left -\n\n\t\t\t\t// Only for relative positioned nodes: Relative offset from element to offset parent\n\t\t\t\tthis.offset.relative.left -\n\n\t\t\t\t// The offsetParent's offset without borders (offset + border)\n\t\t\t\tthis.offset.parent.left +\n\t\t\t\t( ( this.cssPosition === \"fixed\" ?\n\t\t\t\t\t-this.scrollParent.scrollLeft() :\n\t\t\t\t\tscrollIsRootNode ? 0 : scroll.scrollLeft() ) )\n\t\t\t)\n\t\t};\n\n\t},\n\n\t_rearrange: function( event, i, a, hardRefresh ) {\n\n\t\ta ? a[ 0 ].appendChild( this.placeholder[ 0 ] ) :\n\t\t\ti.item[ 0 ].parentNode.insertBefore( this.placeholder[ 0 ],\n\t\t\t\t( this.direction === \"down\" ? i.item[ 0 ] : i.item[ 0 ].nextSibling ) );\n\n\t\t//Various things done here to improve the performance:\n\t\t// 1. we create a setTimeout, that calls refreshPositions\n\t\t// 2. on the instance, we have a counter variable, that get's higher after every append\n\t\t// 3. on the local scope, we copy the counter variable, and check in the timeout,\n\t\t// if it's still the same\n\t\t// 4. this lets only the last addition to the timeout stack through\n\t\tthis.counter = this.counter ? ++this.counter : 1;\n\t\tvar counter = this.counter;\n\n\t\tthis._delay( function() {\n\t\t\tif ( counter === this.counter ) {\n\n\t\t\t\t//Precompute after each DOM insertion, NOT on mousemove\n\t\t\t\tthis.refreshPositions( !hardRefresh );\n\t\t\t}\n\t\t} );\n\n\t},\n\n\t_clear: function( event, noPropagation ) {\n\n\t\tthis.reverting = false;\n\n\t\t// We delay all events that have to be triggered to after the point where the placeholder\n\t\t// has been removed and everything else normalized again\n\t\tvar i,\n\t\t\tdelayedTriggers = [];\n\n\t\t// We first have to update the dom position of the actual currentItem\n\t\t// Note: don't do it if the current item is already removed (by a user), or it gets\n\t\t// reappended (see #4088)\n\t\tif ( !this._noFinalSort && this.currentItem.parent().length ) {\n\t\t\tthis.placeholder.before( this.currentItem );\n\t\t}\n\t\tthis._noFinalSort = null;\n\n\t\tif ( this.helper[ 0 ] === this.currentItem[ 0 ] ) {\n\t\t\tfor ( i in this._storedCSS ) {\n\t\t\t\tif ( this._storedCSS[ i ] === \"auto\" || this._storedCSS[ i ] === \"static\" ) {\n\t\t\t\t\tthis._storedCSS[ i ] = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.currentItem.css( this._storedCSS );\n\t\t\tthis._removeClass( this.currentItem, \"ui-sortable-helper\" );\n\t\t} else {\n\t\t\tthis.currentItem.show();\n\t\t}\n\n\t\tif ( this.fromOutside && !noPropagation ) {\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"receive\", event, this._uiHash( this.fromOutside ) );\n\t\t\t} );\n\t\t}\n\t\tif ( ( this.fromOutside ||\n\t\t\t\tthis.domPosition.prev !==\n\t\t\t\tthis.currentItem.prev().not( \".ui-sortable-helper\" )[ 0 ] ||\n\t\t\t\tthis.domPosition.parent !== this.currentItem.parent()[ 0 ] ) && !noPropagation ) {\n\n\t\t\t// Trigger update callback if the DOM position has changed\n\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\tthis._trigger( \"update\", event, this._uiHash() );\n\t\t\t} );\n\t\t}\n\n\t\t// Check if the items Container has Changed and trigger appropriate\n\t\t// events.\n\t\tif ( this !== this.currentContainer ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( function( event ) {\n\t\t\t\t\tthis._trigger( \"remove\", event, this._uiHash() );\n\t\t\t\t} );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"receive\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t\tdelayedTriggers.push( ( function( c ) {\n\t\t\t\t\treturn function( event ) {\n\t\t\t\t\t\tc._trigger( \"update\", event, this._uiHash( this ) );\n\t\t\t\t\t};\n\t\t\t\t} ).call( this, this.currentContainer ) );\n\t\t\t}\n\t\t}\n\n\t\t//Post events to containers\n\t\tfunction delayEvent( type, instance, container ) {\n\t\t\treturn function( event ) {\n\t\t\t\tcontainer._trigger( type, event, instance._uiHash( instance ) );\n\t\t\t};\n\t\t}\n\t\tfor ( i = this.containers.length - 1; i >= 0; i-- ) {\n\t\t\tif ( !noPropagation ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"deactivate\", this, this.containers[ i ] ) );\n\t\t\t}\n\t\t\tif ( this.containers[ i ].containerCache.over ) {\n\t\t\t\tdelayedTriggers.push( delayEvent( \"out\", this, this.containers[ i ] ) );\n\t\t\t\tthis.containers[ i ].containerCache.over = 0;\n\t\t\t}\n\t\t}\n\n\t\t//Do what was originally in plugins\n\t\tif ( this.storedCursor ) {\n\t\t\tthis.document.find( \"body\" ).css( \"cursor\", this.storedCursor );\n\t\t\tthis.storedStylesheet.remove();\n\t\t}\n\t\tif ( this._storedOpacity ) {\n\t\t\tthis.helper.css( \"opacity\", this._storedOpacity );\n\t\t}\n\t\tif ( this._storedZIndex ) {\n\t\t\tthis.helper.css( \"zIndex\", this._storedZIndex === \"auto\" ? \"\" : this._storedZIndex );\n\t\t}\n\n\t\tthis.dragging = false;\n\n\t\tif ( !noPropagation ) {\n\t\t\tthis._trigger( \"beforeStop\", event, this._uiHash() );\n\t\t}\n\n\t\t//$(this.placeholder[0]).remove(); would have been the jQuery way - unfortunately,\n\t\t// it unbinds ALL events from the original node!\n\t\tthis.placeholder[ 0 ].parentNode.removeChild( this.placeholder[ 0 ] );\n\n\t\tif ( !this.cancelHelperRemoval ) {\n\t\t\tif ( this.helper[ 0 ] !== this.currentItem[ 0 ] ) {\n\t\t\t\tthis.helper.remove();\n\t\t\t}\n\t\t\tthis.helper = null;\n\t\t}\n\n\t\tif ( !noPropagation ) {\n\t\t\tfor ( i = 0; i < delayedTriggers.length; i++ ) {\n\n\t\t\t\t// Trigger all delayed events\n\t\t\t\tdelayedTriggers[ i ].call( this, event );\n\t\t\t}\n\t\t\tthis._trigger( \"stop\", event, this._uiHash() );\n\t\t}\n\n\t\tthis.fromOutside = false;\n\t\treturn !this.cancelHelperRemoval;\n\n\t},\n\n\t_trigger: function() {\n\t\tif ( $.Widget.prototype._trigger.apply( this, arguments ) === false ) {\n\t\t\tthis.cancel();\n\t\t}\n\t},\n\n\t_uiHash: function( _inst ) {\n\t\tvar inst = _inst || this;\n\t\treturn {\n\t\t\thelper: inst.helper,\n\t\t\tplaceholder: inst.placeholder || $( [] ),\n\t\t\tposition: inst.position,\n\t\t\toriginalPosition: inst.originalPosition,\n\t\t\toffset: inst.positionAbs,\n\t\t\titem: inst.currentItem,\n\t\t\tsender: _inst ? _inst.element : null\n\t\t};\n\t}\n\n} );\n\n\n/*!\n * jQuery UI Spinner 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Spinner\n//>>group: Widgets\n//>>description: Displays buttons to easily input numbers via the keyboard or mouse.\n//>>docs: http://api.jqueryui.com/spinner/\n//>>demos: http://jqueryui.com/spinner/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/spinner.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\nfunction spinnerModifer( fn ) {\n\treturn function() {\n\t\tvar previous = this.element.val();\n\t\tfn.apply( this, arguments );\n\t\tthis._refresh();\n\t\tif ( previous !== this.element.val() ) {\n\t\t\tthis._trigger( \"change\" );\n\t\t}\n\t};\n}\n\n$.widget( \"ui.spinner\", {\n\tversion: \"1.12.1\",\n\tdefaultElement: \"<input>\",\n\twidgetEventPrefix: \"spin\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-spinner\": \"ui-corner-all\",\n\t\t\t\"ui-spinner-down\": \"ui-corner-br\",\n\t\t\t\"ui-spinner-up\": \"ui-corner-tr\"\n\t\t},\n\t\tculture: null,\n\t\ticons: {\n\t\t\tdown: \"ui-icon-triangle-1-s\",\n\t\t\tup: \"ui-icon-triangle-1-n\"\n\t\t},\n\t\tincremental: true,\n\t\tmax: null,\n\t\tmin: null,\n\t\tnumberFormat: null,\n\t\tpage: 10,\n\t\tstep: 1,\n\n\t\tchange: null,\n\t\tspin: null,\n\t\tstart: null,\n\t\tstop: null\n\t},\n\n\t_create: function() {\n\n\t\t// handle string values that need to be parsed\n\t\tthis._setOption( \"max\", this.options.max );\n\t\tthis._setOption( \"min\", this.options.min );\n\t\tthis._setOption( \"step\", this.options.step );\n\n\t\t// Only format if there is a value, prevents the field from being marked\n\t\t// as invalid in Firefox, see #9573.\n\t\tif ( this.value() !== \"\" ) {\n\n\t\t\t// Format the value, but don't constrain.\n\t\t\tthis._value( this.element.val(), true );\n\t\t}\n\n\t\tthis._draw();\n\t\tthis._on( this._events );\n\t\tthis._refresh();\n\n\t\t// Turning off autocomplete prevents the browser from remembering the\n\t\t// value when navigating through history, so we re-enable autocomplete\n\t\t// if the page is unloaded before the widget is destroyed. #7790\n\t\tthis._on( this.window, {\n\t\t\tbeforeunload: function() {\n\t\t\t\tthis.element.removeAttr( \"autocomplete\" );\n\t\t\t}\n\t\t} );\n\t},\n\n\t_getCreateOptions: function() {\n\t\tvar options = this._super();\n\t\tvar element = this.element;\n\n\t\t$.each( [ \"min\", \"max\", \"step\" ], function( i, option ) {\n\t\t\tvar value = element.attr( option );\n\t\t\tif ( value != null && value.length ) {\n\t\t\t\toptions[ option ] = value;\n\t\t\t}\n\t\t} );\n\n\t\treturn options;\n\t},\n\n\t_events: {\n\t\tkeydown: function( event ) {\n\t\t\tif ( this._start( event ) && this._keydown( event ) ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\t\tkeyup: \"_stop\",\n\t\tfocus: function() {\n\t\t\tthis.previous = this.element.val();\n\t\t},\n\t\tblur: function( event ) {\n\t\t\tif ( this.cancelBlur ) {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._stop();\n\t\t\tthis._refresh();\n\t\t\tif ( this.previous !== this.element.val() ) {\n\t\t\t\tthis._trigger( \"change\", event );\n\t\t\t}\n\t\t},\n\t\tmousewheel: function( event, delta ) {\n\t\t\tif ( !delta ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( !this.spinning && !this._start( event ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis._spin( ( delta > 0 ? 1 : -1 ) * this.options.step, event );\n\t\t\tclearTimeout( this.mousewheelTimer );\n\t\t\tthis.mousewheelTimer = this._delay( function() {\n\t\t\t\tif ( this.spinning ) {\n\t\t\t\t\tthis._stop( event );\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t\tevent.preventDefault();\n\t\t},\n\t\t\"mousedown .ui-spinner-button\": function( event ) {\n\t\t\tvar previous;\n\n\t\t\t// We never want the buttons to have focus; whenever the user is\n\t\t\t// interacting with the spinner, the focus should be on the input.\n\t\t\t// If the input is focused then this.previous is properly set from\n\t\t\t// when the input first received focus. If the input is not focused\n\t\t\t// then we need to set this.previous based on the value before spinning.\n\t\t\tprevious = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] ) ?\n\t\t\t\tthis.previous : this.element.val();\n\t\t\tfunction checkFocus() {\n\t\t\t\tvar isActive = this.element[ 0 ] === $.ui.safeActiveElement( this.document[ 0 ] );\n\t\t\t\tif ( !isActive ) {\n\t\t\t\t\tthis.element.trigger( \"focus\" );\n\t\t\t\t\tthis.previous = previous;\n\n\t\t\t\t\t// support: IE\n\t\t\t\t\t// IE sets focus asynchronously, so we need to check if focus\n\t\t\t\t\t// moved off of the input because the user clicked on the button.\n\t\t\t\t\tthis._delay( function() {\n\t\t\t\t\t\tthis.previous = previous;\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Ensure focus is on (or stays on) the text field\n\t\t\tevent.preventDefault();\n\t\t\tcheckFocus.call( this );\n\n\t\t\t// Support: IE\n\t\t\t// IE doesn't prevent moving focus even with event.preventDefault()\n\t\t\t// so we set a flag to know when we should ignore the blur event\n\t\t\t// and check (again) if focus moved off of the input.\n\t\t\tthis.cancelBlur = true;\n\t\t\tthis._delay( function() {\n\t\t\t\tdelete this.cancelBlur;\n\t\t\t\tcheckFocus.call( this );\n\t\t\t} );\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\t\t\"mouseup .ui-spinner-button\": \"_stop\",\n\t\t\"mouseenter .ui-spinner-button\": function( event ) {\n\n\t\t\t// button will add ui-state-active if mouse was down while mouseleave and kept down\n\t\t\tif ( !$( event.currentTarget ).hasClass( \"ui-state-active\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( this._start( event ) === false ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tthis._repeat( null, $( event.currentTarget )\n\t\t\t\t.hasClass( \"ui-spinner-up\" ) ? 1 : -1, event );\n\t\t},\n\n\t\t// TODO: do we really want to consider this a stop?\n\t\t// shouldn't we just stop the repeater and wait until mouseup before\n\t\t// we trigger the stop event?\n\t\t\"mouseleave .ui-spinner-button\": \"_stop\"\n\t},\n\n\t// Support mobile enhanced option and make backcompat more sane\n\t_enhance: function() {\n\t\tthis.uiSpinner = this.element\n\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t.wrap( \"<span>\" )\n\t\t\t.parent()\n\n\t\t\t\t// Add buttons\n\t\t\t\t.append(\n\t\t\t\t\t\"<a></a><a></a>\"\n\t\t\t\t);\n\t},\n\n\t_draw: function() {\n\t\tthis._enhance();\n\n\t\tthis._addClass( this.uiSpinner, \"ui-spinner\", \"ui-widget ui-widget-content\" );\n\t\tthis._addClass( \"ui-spinner-input\" );\n\n\t\tthis.element.attr( \"role\", \"spinbutton\" );\n\n\t\t// Button bindings\n\t\tthis.buttons = this.uiSpinner.children( \"a\" )\n\t\t\t.attr( \"tabIndex\", -1 )\n\t\t\t.attr( \"aria-hidden\", true )\n\t\t\t.button( {\n\t\t\t\tclasses: {\n\t\t\t\t\t\"ui-button\": \"\"\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// TODO: Right now button does not support classes this is already updated in button PR\n\t\tthis._removeClass( this.buttons, \"ui-corner-all\" );\n\n\t\tthis._addClass( this.buttons.first(), \"ui-spinner-button ui-spinner-up\" );\n\t\tthis._addClass( this.buttons.last(), \"ui-spinner-button ui-spinner-down\" );\n\t\tthis.buttons.first().button( {\n\t\t\t\"icon\": this.options.icons.up,\n\t\t\t\"showLabel\": false\n\t\t} );\n\t\tthis.buttons.last().button( {\n\t\t\t\"icon\": this.options.icons.down,\n\t\t\t\"showLabel\": false\n\t\t} );\n\n\t\t// IE 6 doesn't understand height: 50% for the buttons\n\t\t// unless the wrapper has an explicit height\n\t\tif ( this.buttons.height() > Math.ceil( this.uiSpinner.height() * 0.5 ) &&\n\t\t\t\tthis.uiSpinner.height() > 0 ) {\n\t\t\tthis.uiSpinner.height( this.uiSpinner.height() );\n\t\t}\n\t},\n\n\t_keydown: function( event ) {\n\t\tvar options = this.options,\n\t\t\tkeyCode = $.ui.keyCode;\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase keyCode.UP:\n\t\t\tthis._repeat( null, 1, event );\n\t\t\treturn true;\n\t\tcase keyCode.DOWN:\n\t\t\tthis._repeat( null, -1, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_UP:\n\t\t\tthis._repeat( null, options.page, event );\n\t\t\treturn true;\n\t\tcase keyCode.PAGE_DOWN:\n\t\t\tthis._repeat( null, -options.page, event );\n\t\t\treturn true;\n\t\t}\n\n\t\treturn false;\n\t},\n\n\t_start: function( event ) {\n\t\tif ( !this.spinning && this._trigger( \"start\", event ) === false ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\t\tthis.spinning = true;\n\t\treturn true;\n\t},\n\n\t_repeat: function( i, steps, event ) {\n\t\ti = i || 500;\n\n\t\tclearTimeout( this.timer );\n\t\tthis.timer = this._delay( function() {\n\t\t\tthis._repeat( 40, steps, event );\n\t\t}, i );\n\n\t\tthis._spin( steps * this.options.step, event );\n\t},\n\n\t_spin: function( step, event ) {\n\t\tvar value = this.value() || 0;\n\n\t\tif ( !this.counter ) {\n\t\t\tthis.counter = 1;\n\t\t}\n\n\t\tvalue = this._adjustValue( value + step * this._increment( this.counter ) );\n\n\t\tif ( !this.spinning || this._trigger( \"spin\", event, { value: value } ) !== false ) {\n\t\t\tthis._value( value );\n\t\t\tthis.counter++;\n\t\t}\n\t},\n\n\t_increment: function( i ) {\n\t\tvar incremental = this.options.incremental;\n\n\t\tif ( incremental ) {\n\t\t\treturn $.isFunction( incremental ) ?\n\t\t\t\tincremental( i ) :\n\t\t\t\tMath.floor( i * i * i / 50000 - i * i / 500 + 17 * i / 200 + 1 );\n\t\t}\n\n\t\treturn 1;\n\t},\n\n\t_precision: function() {\n\t\tvar precision = this._precisionOf( this.options.step );\n\t\tif ( this.options.min !== null ) {\n\t\t\tprecision = Math.max( precision, this._precisionOf( this.options.min ) );\n\t\t}\n\t\treturn precision;\n\t},\n\n\t_precisionOf: function( num ) {\n\t\tvar str = num.toString(),\n\t\t\tdecimal = str.indexOf( \".\" );\n\t\treturn decimal === -1 ? 0 : str.length - decimal - 1;\n\t},\n\n\t_adjustValue: function( value ) {\n\t\tvar base, aboveMin,\n\t\t\toptions = this.options;\n\n\t\t// Make sure we're at a valid step\n\t\t// - find out where we are relative to the base (min or 0)\n\t\tbase = options.min !== null ? options.min : 0;\n\t\taboveMin = value - base;\n\n\t\t// - round to the nearest step\n\t\taboveMin = Math.round( aboveMin / options.step ) * options.step;\n\n\t\t// - rounding is based on 0, so adjust back to our base\n\t\tvalue = base + aboveMin;\n\n\t\t// Fix precision from bad JS floating point math\n\t\tvalue = parseFloat( value.toFixed( this._precision() ) );\n\n\t\t// Clamp the value\n\t\tif ( options.max !== null && value > options.max ) {\n\t\t\treturn options.max;\n\t\t}\n\t\tif ( options.min !== null && value < options.min ) {\n\t\t\treturn options.min;\n\t\t}\n\n\t\treturn value;\n\t},\n\n\t_stop: function( event ) {\n\t\tif ( !this.spinning ) {\n\t\t\treturn;\n\t\t}\n\n\t\tclearTimeout( this.timer );\n\t\tclearTimeout( this.mousewheelTimer );\n\t\tthis.counter = 0;\n\t\tthis.spinning = false;\n\t\tthis._trigger( \"stop\", event );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar prevValue, first, last;\n\n\t\tif ( key === \"culture\" || key === \"numberFormat\" ) {\n\t\t\tprevValue = this._parse( this.element.val() );\n\t\t\tthis.options[ key ] = value;\n\t\t\tthis.element.val( this._format( prevValue ) );\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === \"max\" || key === \"min\" || key === \"step\" ) {\n\t\t\tif ( typeof value === \"string\" ) {\n\t\t\t\tvalue = this._parse( value );\n\t\t\t}\n\t\t}\n\t\tif ( key === \"icons\" ) {\n\t\t\tfirst = this.buttons.first().find( \".ui-icon\" );\n\t\t\tthis._removeClass( first, null, this.options.icons.up );\n\t\t\tthis._addClass( first, null, value.up );\n\t\t\tlast = this.buttons.last().find( \".ui-icon\" );\n\t\t\tthis._removeClass( last, null, this.options.icons.down );\n\t\t\tthis._addClass( last, null, value.down );\n\t\t}\n\n\t\tthis._super( key, value );\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis._super( value );\n\n\t\tthis._toggleClass( this.uiSpinner, null, \"ui-state-disabled\", !!value );\n\t\tthis.element.prop( \"disabled\", !!value );\n\t\tthis.buttons.button( value ? \"disable\" : \"enable\" );\n\t},\n\n\t_setOptions: spinnerModifer( function( options ) {\n\t\tthis._super( options );\n\t} ),\n\n\t_parse: function( val ) {\n\t\tif ( typeof val === \"string\" && val !== \"\" ) {\n\t\t\tval = window.Globalize && this.options.numberFormat ?\n\t\t\t\tGlobalize.parseFloat( val, 10, this.options.culture ) : +val;\n\t\t}\n\t\treturn val === \"\" || isNaN( val ) ? null : val;\n\t},\n\n\t_format: function( value ) {\n\t\tif ( value === \"\" ) {\n\t\t\treturn \"\";\n\t\t}\n\t\treturn window.Globalize && this.options.numberFormat ?\n\t\t\tGlobalize.format( value, this.options.numberFormat, this.options.culture ) :\n\t\t\tvalue;\n\t},\n\n\t_refresh: function() {\n\t\tthis.element.attr( {\n\t\t\t\"aria-valuemin\": this.options.min,\n\t\t\t\"aria-valuemax\": this.options.max,\n\n\t\t\t// TODO: what should we do with values that can't be parsed?\n\t\t\t\"aria-valuenow\": this._parse( this.element.val() )\n\t\t} );\n\t},\n\n\tisValid: function() {\n\t\tvar value = this.value();\n\n\t\t// Null is invalid\n\t\tif ( value === null ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// If value gets adjusted, it's invalid\n\t\treturn value === this._adjustValue( value );\n\t},\n\n\t// Update the value without triggering change\n\t_value: function( value, allowAny ) {\n\t\tvar parsed;\n\t\tif ( value !== \"\" ) {\n\t\t\tparsed = this._parse( value );\n\t\t\tif ( parsed !== null ) {\n\t\t\t\tif ( !allowAny ) {\n\t\t\t\t\tparsed = this._adjustValue( parsed );\n\t\t\t\t}\n\t\t\t\tvalue = this._format( parsed );\n\t\t\t}\n\t\t}\n\t\tthis.element.val( value );\n\t\tthis._refresh();\n\t},\n\n\t_destroy: function() {\n\t\tthis.element\n\t\t\t.prop( \"disabled\", false )\n\t\t\t.removeAttr( \"autocomplete role aria-valuemin aria-valuemax aria-valuenow\" );\n\n\t\tthis.uiSpinner.replaceWith( this.element );\n\t},\n\n\tstepUp: spinnerModifer( function( steps ) {\n\t\tthis._stepUp( steps );\n\t} ),\n\t_stepUp: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tstepDown: spinnerModifer( function( steps ) {\n\t\tthis._stepDown( steps );\n\t} ),\n\t_stepDown: function( steps ) {\n\t\tif ( this._start() ) {\n\t\t\tthis._spin( ( steps || 1 ) * -this.options.step );\n\t\t\tthis._stop();\n\t\t}\n\t},\n\n\tpageUp: spinnerModifer( function( pages ) {\n\t\tthis._stepUp( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tpageDown: spinnerModifer( function( pages ) {\n\t\tthis._stepDown( ( pages || 1 ) * this.options.page );\n\t} ),\n\n\tvalue: function( newVal ) {\n\t\tif ( !arguments.length ) {\n\t\t\treturn this._parse( this.element.val() );\n\t\t}\n\t\tspinnerModifer( this._value ).call( this, newVal );\n\t},\n\n\twidget: function() {\n\t\treturn this.uiSpinner;\n\t}\n} );\n\n// DEPRECATED\n// TODO: switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for spinner html extension points\n\t$.widget( \"ui.spinner\", $.ui.spinner, {\n\t\t_enhance: function() {\n\t\t\tthis.uiSpinner = this.element\n\t\t\t\t.attr( \"autocomplete\", \"off\" )\n\t\t\t\t.wrap( this._uiSpinnerHtml() )\n\t\t\t\t.parent()\n\n\t\t\t\t\t// Add buttons\n\t\t\t\t\t.append( this._buttonHtml() );\n\t\t},\n\t\t_uiSpinnerHtml: function() {\n\t\t\treturn \"<span>\";\n\t\t},\n\n\t\t_buttonHtml: function() {\n\t\t\treturn \"<a></a><a></a>\";\n\t\t}\n\t} );\n}\n\nvar widgetsSpinner = $.ui.spinner;\n\n\n/*!\n * jQuery UI Tabs 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Tabs\n//>>group: Widgets\n//>>description: Transforms a set of container elements into a tab structure.\n//>>docs: http://api.jqueryui.com/tabs/\n//>>demos: http://jqueryui.com/tabs/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tabs.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.tabs\", {\n\tversion: \"1.12.1\",\n\tdelay: 300,\n\toptions: {\n\t\tactive: null,\n\t\tclasses: {\n\t\t\t\"ui-tabs\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-nav\": \"ui-corner-all\",\n\t\t\t\"ui-tabs-panel\": \"ui-corner-bottom\",\n\t\t\t\"ui-tabs-tab\": \"ui-corner-top\"\n\t\t},\n\t\tcollapsible: false,\n\t\tevent: \"click\",\n\t\theightStyle: \"content\",\n\t\thide: null,\n\t\tshow: null,\n\n\t\t// Callbacks\n\t\tactivate: null,\n\t\tbeforeActivate: null,\n\t\tbeforeLoad: null,\n\t\tload: null\n\t},\n\n\t_isLocal: ( function() {\n\t\tvar rhash = /#.*$/;\n\n\t\treturn function( anchor ) {\n\t\t\tvar anchorUrl, locationUrl;\n\n\t\t\tanchorUrl = anchor.href.replace( rhash, \"\" );\n\t\t\tlocationUrl = location.href.replace( rhash, \"\" );\n\n\t\t\t// Decoding may throw an error if the URL isn't UTF-8 (#9518)\n\t\t\ttry {\n\t\t\t\tanchorUrl = decodeURIComponent( anchorUrl );\n\t\t\t} catch ( error ) {}\n\t\t\ttry {\n\t\t\t\tlocationUrl = decodeURIComponent( locationUrl );\n\t\t\t} catch ( error ) {}\n\n\t\t\treturn anchor.hash.length > 1 && anchorUrl === locationUrl;\n\t\t};\n\t} )(),\n\n\t_create: function() {\n\t\tvar that = this,\n\t\t\toptions = this.options;\n\n\t\tthis.running = false;\n\n\t\tthis._addClass( \"ui-tabs\", \"ui-widget ui-widget-content\" );\n\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, options.collapsible );\n\n\t\tthis._processTabs();\n\t\toptions.active = this._initialActive();\n\n\t\t// Take disabling tabs via class attribute from HTML\n\t\t// into account and update option properly.\n\t\tif ( $.isArray( options.disabled ) ) {\n\t\t\toptions.disabled = $.unique( options.disabled.concat(\n\t\t\t\t$.map( this.tabs.filter( \".ui-state-disabled\" ), function( li ) {\n\t\t\t\t\treturn that.tabs.index( li );\n\t\t\t\t} )\n\t\t\t) ).sort();\n\t\t}\n\n\t\t// Check for length avoids error when initializing empty list\n\t\tif ( this.options.active !== false && this.anchors.length ) {\n\t\t\tthis.active = this._findActive( options.active );\n\t\t} else {\n\t\t\tthis.active = $();\n\t\t}\n\n\t\tthis._refresh();\n\n\t\tif ( this.active.length ) {\n\t\t\tthis.load( options.active );\n\t\t}\n\t},\n\n\t_initialActive: function() {\n\t\tvar active = this.options.active,\n\t\t\tcollapsible = this.options.collapsible,\n\t\t\tlocationHash = location.hash.substring( 1 );\n\n\t\tif ( active === null ) {\n\n\t\t\t// check the fragment identifier in the URL\n\t\t\tif ( locationHash ) {\n\t\t\t\tthis.tabs.each( function( i, tab ) {\n\t\t\t\t\tif ( $( tab ).attr( \"aria-controls\" ) === locationHash ) {\n\t\t\t\t\t\tactive = i;\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check for a tab marked active via a class\n\t\t\tif ( active === null ) {\n\t\t\t\tactive = this.tabs.index( this.tabs.filter( \".ui-tabs-active\" ) );\n\t\t\t}\n\n\t\t\t// No active tab, set to false\n\t\t\tif ( active === null || active === -1 ) {\n\t\t\t\tactive = this.tabs.length ? 0 : false;\n\t\t\t}\n\t\t}\n\n\t\t// Handle numbers: negative, out of range\n\t\tif ( active !== false ) {\n\t\t\tactive = this.tabs.index( this.tabs.eq( active ) );\n\t\t\tif ( active === -1 ) {\n\t\t\t\tactive = collapsible ? false : 0;\n\t\t\t}\n\t\t}\n\n\t\t// Don't allow collapsible: false and active: false\n\t\tif ( !collapsible && active === false && this.anchors.length ) {\n\t\t\tactive = 0;\n\t\t}\n\n\t\treturn active;\n\t},\n\n\t_getCreateEventData: function() {\n\t\treturn {\n\t\t\ttab: this.active,\n\t\t\tpanel: !this.active.length ? $() : this._getPanelForTab( this.active )\n\t\t};\n\t},\n\n\t_tabKeydown: function( event ) {\n\t\tvar focusedTab = $( $.ui.safeActiveElement( this.document[ 0 ] ) ).closest( \"li\" ),\n\t\t\tselectedIndex = this.tabs.index( focusedTab ),\n\t\t\tgoingForward = true;\n\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tswitch ( event.keyCode ) {\n\t\tcase $.ui.keyCode.RIGHT:\n\t\tcase $.ui.keyCode.DOWN:\n\t\t\tselectedIndex++;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.UP:\n\t\tcase $.ui.keyCode.LEFT:\n\t\t\tgoingForward = false;\n\t\t\tselectedIndex--;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.END:\n\t\t\tselectedIndex = this.anchors.length - 1;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.HOME:\n\t\t\tselectedIndex = 0;\n\t\t\tbreak;\n\t\tcase $.ui.keyCode.SPACE:\n\n\t\t\t// Activate only, no collapsing\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\t\t\tthis._activate( selectedIndex );\n\t\t\treturn;\n\t\tcase $.ui.keyCode.ENTER:\n\n\t\t\t// Toggle (cancel delayed activation, allow collapsing)\n\t\t\tevent.preventDefault();\n\t\t\tclearTimeout( this.activating );\n\n\t\t\t// Determine if we should collapse or activate\n\t\t\tthis._activate( selectedIndex === this.options.active ? false : selectedIndex );\n\t\t\treturn;\n\t\tdefault:\n\t\t\treturn;\n\t\t}\n\n\t\t// Focus the appropriate tab, based on which key was pressed\n\t\tevent.preventDefault();\n\t\tclearTimeout( this.activating );\n\t\tselectedIndex = this._focusNextTab( selectedIndex, goingForward );\n\n\t\t// Navigating with control/command key will prevent automatic activation\n\t\tif ( !event.ctrlKey && !event.metaKey ) {\n\n\t\t\t// Update aria-selected immediately so that AT think the tab is already selected.\n\t\t\t// Otherwise AT may confuse the user by stating that they need to activate the tab,\n\t\t\t// but the tab will already be activated by the time the announcement finishes.\n\t\t\tfocusedTab.attr( \"aria-selected\", \"false\" );\n\t\t\tthis.tabs.eq( selectedIndex ).attr( \"aria-selected\", \"true\" );\n\n\t\t\tthis.activating = this._delay( function() {\n\t\t\t\tthis.option( \"active\", selectedIndex );\n\t\t\t}, this.delay );\n\t\t}\n\t},\n\n\t_panelKeydown: function( event ) {\n\t\tif ( this._handlePageNav( event ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Ctrl+up moves focus to the current tab\n\t\tif ( event.ctrlKey && event.keyCode === $.ui.keyCode.UP ) {\n\t\t\tevent.preventDefault();\n\t\t\tthis.active.trigger( \"focus\" );\n\t\t}\n\t},\n\n\t// Alt+page up/down moves focus to the previous/next tab (and activates)\n\t_handlePageNav: function( event ) {\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_UP ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active - 1, false ) );\n\t\t\treturn true;\n\t\t}\n\t\tif ( event.altKey && event.keyCode === $.ui.keyCode.PAGE_DOWN ) {\n\t\t\tthis._activate( this._focusNextTab( this.options.active + 1, true ) );\n\t\t\treturn true;\n\t\t}\n\t},\n\n\t_findNextTab: function( index, goingForward ) {\n\t\tvar lastTabIndex = this.tabs.length - 1;\n\n\t\tfunction constrain() {\n\t\t\tif ( index > lastTabIndex ) {\n\t\t\t\tindex = 0;\n\t\t\t}\n\t\t\tif ( index < 0 ) {\n\t\t\t\tindex = lastTabIndex;\n\t\t\t}\n\t\t\treturn index;\n\t\t}\n\n\t\twhile ( $.inArray( constrain(), this.options.disabled ) !== -1 ) {\n\t\t\tindex = goingForward ? index + 1 : index - 1;\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_focusNextTab: function( index, goingForward ) {\n\t\tindex = this._findNextTab( index, goingForward );\n\t\tthis.tabs.eq( index ).trigger( \"focus\" );\n\t\treturn index;\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tif ( key === \"active\" ) {\n\n\t\t\t// _activate() will handle invalid values and update this.options\n\t\t\tthis._activate( value );\n\t\t\treturn;\n\t\t}\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"collapsible\" ) {\n\t\t\tthis._toggleClass( \"ui-tabs-collapsible\", null, value );\n\n\t\t\t// Setting collapsible: false while collapsed; open first panel\n\t\t\tif ( !value && this.options.active === false ) {\n\t\t\t\tthis._activate( 0 );\n\t\t\t}\n\t\t}\n\n\t\tif ( key === \"event\" ) {\n\t\t\tthis._setupEvents( value );\n\t\t}\n\n\t\tif ( key === \"heightStyle\" ) {\n\t\t\tthis._setupHeightStyle( value );\n\t\t}\n\t},\n\n\t_sanitizeSelector: function( hash ) {\n\t\treturn hash ? hash.replace( /[!\"$%&'()*+,.\\/:;<=>?@\\[\\]\\^`{|}~]/g, \"\\\\$&\" ) : \"\";\n\t},\n\n\trefresh: function() {\n\t\tvar options = this.options,\n\t\t\tlis = this.tablist.children( \":has(a[href])\" );\n\n\t\t// Get disabled tabs from class attribute from HTML\n\t\t// this will get converted to a boolean if needed in _refresh()\n\t\toptions.disabled = $.map( lis.filter( \".ui-state-disabled\" ), function( tab ) {\n\t\t\treturn lis.index( tab );\n\t\t} );\n\n\t\tthis._processTabs();\n\n\t\t// Was collapsed or no tabs\n\t\tif ( options.active === false || !this.anchors.length ) {\n\t\t\toptions.active = false;\n\t\t\tthis.active = $();\n\n\t\t// was active, but active tab is gone\n\t\t} else if ( this.active.length && !$.contains( this.tablist[ 0 ], this.active[ 0 ] ) ) {\n\n\t\t\t// all remaining tabs are disabled\n\t\t\tif ( this.tabs.length === options.disabled.length ) {\n\t\t\t\toptions.active = false;\n\t\t\t\tthis.active = $();\n\n\t\t\t// activate previous tab\n\t\t\t} else {\n\t\t\t\tthis._activate( this._findNextTab( Math.max( 0, options.active - 1 ), false ) );\n\t\t\t}\n\n\t\t// was active, active tab still exists\n\t\t} else {\n\n\t\t\t// make sure active index is correct\n\t\t\toptions.active = this.tabs.index( this.active );\n\t\t}\n\n\t\tthis._refresh();\n\t},\n\n\t_refresh: function() {\n\t\tthis._setOptionDisabled( this.options.disabled );\n\t\tthis._setupEvents( this.options.event );\n\t\tthis._setupHeightStyle( this.options.heightStyle );\n\n\t\tthis.tabs.not( this.active ).attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\",\n\t\t\ttabIndex: -1\n\t\t} );\n\t\tthis.panels.not( this._getPanelForTab( this.active ) )\n\t\t\t.hide()\n\t\t\t.attr( {\n\t\t\t\t\"aria-hidden\": \"true\"\n\t\t\t} );\n\n\t\t// Make sure one tab is in the tab order\n\t\tif ( !this.active.length ) {\n\t\t\tthis.tabs.eq( 0 ).attr( \"tabIndex\", 0 );\n\t\t} else {\n\t\t\tthis.active\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-selected\": \"true\",\n\t\t\t\t\t\"aria-expanded\": \"true\",\n\t\t\t\t\ttabIndex: 0\n\t\t\t\t} );\n\t\t\tthis._addClass( this.active, \"ui-tabs-active\", \"ui-state-active\" );\n\t\t\tthis._getPanelForTab( this.active )\n\t\t\t\t.show()\n\t\t\t\t.attr( {\n\t\t\t\t\t\"aria-hidden\": \"false\"\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_processTabs: function() {\n\t\tvar that = this,\n\t\t\tprevTabs = this.tabs,\n\t\t\tprevAnchors = this.anchors,\n\t\t\tprevPanels = this.panels;\n\n\t\tthis.tablist = this._getList().attr( \"role\", \"tablist\" );\n\t\tthis._addClass( this.tablist, \"ui-tabs-nav\",\n\t\t\t\"ui-helper-reset ui-helper-clearfix ui-widget-header\" );\n\n\t\t// Prevent users from focusing disabled tabs via click\n\t\tthis.tablist\n\t\t\t.on( \"mousedown\" + this.eventNamespace, \"> li\", function( event ) {\n\t\t\t\tif ( $( this ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tevent.preventDefault();\n\t\t\t\t}\n\t\t\t} )\n\n\t\t\t// Support: IE <9\n\t\t\t// Preventing the default action in mousedown doesn't prevent IE\n\t\t\t// from focusing the element, so if the anchor gets focused, blur.\n\t\t\t// We don't have to worry about focusing the previously focused\n\t\t\t// element since clicking on a non-focusable element should focus\n\t\t\t// the body anyway.\n\t\t\t.on( \"focus\" + this.eventNamespace, \".ui-tabs-anchor\", function() {\n\t\t\t\tif ( $( this ).closest( \"li\" ).is( \".ui-state-disabled\" ) ) {\n\t\t\t\t\tthis.blur();\n\t\t\t\t}\n\t\t\t} );\n\n\t\tthis.tabs = this.tablist.find( \"> li:has(a[href])\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"tab\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.tabs, \"ui-tabs-tab\", \"ui-state-default\" );\n\n\t\tthis.anchors = this.tabs.map( function() {\n\t\t\treturn $( \"a\", this )[ 0 ];\n\t\t} )\n\t\t\t.attr( {\n\t\t\t\trole: \"presentation\",\n\t\t\t\ttabIndex: -1\n\t\t\t} );\n\t\tthis._addClass( this.anchors, \"ui-tabs-anchor\" );\n\n\t\tthis.panels = $();\n\n\t\tthis.anchors.each( function( i, anchor ) {\n\t\t\tvar selector, panel, panelId,\n\t\t\t\tanchorId = $( anchor ).uniqueId().attr( \"id\" ),\n\t\t\t\ttab = $( anchor ).closest( \"li\" ),\n\t\t\t\toriginalAriaControls = tab.attr( \"aria-controls\" );\n\n\t\t\t// Inline tab\n\t\t\tif ( that._isLocal( anchor ) ) {\n\t\t\t\tselector = anchor.hash;\n\t\t\t\tpanelId = selector.substring( 1 );\n\t\t\t\tpanel = that.element.find( that._sanitizeSelector( selector ) );\n\n\t\t\t// remote tab\n\t\t\t} else {\n\n\t\t\t\t// If the tab doesn't already have aria-controls,\n\t\t\t\t// generate an id by using a throw-away element\n\t\t\t\tpanelId = tab.attr( \"aria-controls\" ) || $( {} ).uniqueId()[ 0 ].id;\n\t\t\t\tselector = \"#\" + panelId;\n\t\t\t\tpanel = that.element.find( selector );\n\t\t\t\tif ( !panel.length ) {\n\t\t\t\t\tpanel = that._createPanel( panelId );\n\t\t\t\t\tpanel.insertAfter( that.panels[ i - 1 ] || that.tablist );\n\t\t\t\t}\n\t\t\t\tpanel.attr( \"aria-live\", \"polite\" );\n\t\t\t}\n\n\t\t\tif ( panel.length ) {\n\t\t\t\tthat.panels = that.panels.add( panel );\n\t\t\t}\n\t\t\tif ( originalAriaControls ) {\n\t\t\t\ttab.data( \"ui-tabs-aria-controls\", originalAriaControls );\n\t\t\t}\n\t\t\ttab.attr( {\n\t\t\t\t\"aria-controls\": panelId,\n\t\t\t\t\"aria-labelledby\": anchorId\n\t\t\t} );\n\t\t\tpanel.attr( \"aria-labelledby\", anchorId );\n\t\t} );\n\n\t\tthis.panels.attr( \"role\", \"tabpanel\" );\n\t\tthis._addClass( this.panels, \"ui-tabs-panel\", \"ui-widget-content\" );\n\n\t\t// Avoid memory leaks (#10056)\n\t\tif ( prevTabs ) {\n\t\t\tthis._off( prevTabs.not( this.tabs ) );\n\t\t\tthis._off( prevAnchors.not( this.anchors ) );\n\t\t\tthis._off( prevPanels.not( this.panels ) );\n\t\t}\n\t},\n\n\t// Allow overriding how to find the list for rare usage scenarios (#7715)\n\t_getList: function() {\n\t\treturn this.tablist || this.element.find( \"ol, ul\" ).eq( 0 );\n\t},\n\n\t_createPanel: function( id ) {\n\t\treturn $( \"<div>\" )\n\t\t\t.attr( \"id\", id )\n\t\t\t.data( \"ui-tabs-destroy\", true );\n\t},\n\n\t_setOptionDisabled: function( disabled ) {\n\t\tvar currentItem, li, i;\n\n\t\tif ( $.isArray( disabled ) ) {\n\t\t\tif ( !disabled.length ) {\n\t\t\t\tdisabled = false;\n\t\t\t} else if ( disabled.length === this.anchors.length ) {\n\t\t\t\tdisabled = true;\n\t\t\t}\n\t\t}\n\n\t\t// Disable tabs\n\t\tfor ( i = 0; ( li = this.tabs[ i ] ); i++ ) {\n\t\t\tcurrentItem = $( li );\n\t\t\tif ( disabled === true || $.inArray( i, disabled ) !== -1 ) {\n\t\t\t\tcurrentItem.attr( \"aria-disabled\", \"true\" );\n\t\t\t\tthis._addClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t} else {\n\t\t\t\tcurrentItem.removeAttr( \"aria-disabled\" );\n\t\t\t\tthis._removeClass( currentItem, null, \"ui-state-disabled\" );\n\t\t\t}\n\t\t}\n\n\t\tthis.options.disabled = disabled;\n\n\t\tthis._toggleClass( this.widget(), this.widgetFullName + \"-disabled\", null,\n\t\t\tdisabled === true );\n\t},\n\n\t_setupEvents: function( event ) {\n\t\tvar events = {};\n\t\tif ( event ) {\n\t\t\t$.each( event.split( \" \" ), function( index, eventName ) {\n\t\t\t\tevents[ eventName ] = \"_eventHandler\";\n\t\t\t} );\n\t\t}\n\n\t\tthis._off( this.anchors.add( this.tabs ).add( this.panels ) );\n\n\t\t// Always prevent the default action, even when disabled\n\t\tthis._on( true, this.anchors, {\n\t\t\tclick: function( event ) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t} );\n\t\tthis._on( this.anchors, events );\n\t\tthis._on( this.tabs, { keydown: \"_tabKeydown\" } );\n\t\tthis._on( this.panels, { keydown: \"_panelKeydown\" } );\n\n\t\tthis._focusable( this.tabs );\n\t\tthis._hoverable( this.tabs );\n\t},\n\n\t_setupHeightStyle: function( heightStyle ) {\n\t\tvar maxHeight,\n\t\t\tparent = this.element.parent();\n\n\t\tif ( heightStyle === \"fill\" ) {\n\t\t\tmaxHeight = parent.height();\n\t\t\tmaxHeight -= this.element.outerHeight() - this.element.height();\n\n\t\t\tthis.element.siblings( \":visible\" ).each( function() {\n\t\t\t\tvar elem = $( this ),\n\t\t\t\t\tposition = elem.css( \"position\" );\n\n\t\t\t\tif ( position === \"absolute\" || position === \"fixed\" ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmaxHeight -= elem.outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.element.children().not( this.panels ).each( function() {\n\t\t\t\tmaxHeight -= $( this ).outerHeight( true );\n\t\t\t} );\n\n\t\t\tthis.panels.each( function() {\n\t\t\t\t$( this ).height( Math.max( 0, maxHeight -\n\t\t\t\t\t$( this ).innerHeight() + $( this ).height() ) );\n\t\t\t} )\n\t\t\t\t.css( \"overflow\", \"auto\" );\n\t\t} else if ( heightStyle === \"auto\" ) {\n\t\t\tmaxHeight = 0;\n\t\t\tthis.panels.each( function() {\n\t\t\t\tmaxHeight = Math.max( maxHeight, $( this ).height( \"\" ).height() );\n\t\t\t} ).height( maxHeight );\n\t\t}\n\t},\n\n\t_eventHandler: function( event ) {\n\t\tvar options = this.options,\n\t\t\tactive = this.active,\n\t\t\tanchor = $( event.currentTarget ),\n\t\t\ttab = anchor.closest( \"li\" ),\n\t\t\tclickedIsActive = tab[ 0 ] === active[ 0 ],\n\t\t\tcollapsing = clickedIsActive && options.collapsible,\n\t\t\ttoShow = collapsing ? $() : this._getPanelForTab( tab ),\n\t\t\ttoHide = !active.length ? $() : this._getPanelForTab( active ),\n\t\t\teventData = {\n\t\t\t\toldTab: active,\n\t\t\t\toldPanel: toHide,\n\t\t\t\tnewTab: collapsing ? $() : tab,\n\t\t\t\tnewPanel: toShow\n\t\t\t};\n\n\t\tevent.preventDefault();\n\n\t\tif ( tab.hasClass( \"ui-state-disabled\" ) ||\n\n\t\t\t\t// tab is already loading\n\t\t\t\ttab.hasClass( \"ui-tabs-loading\" ) ||\n\n\t\t\t\t// can't switch durning an animation\n\t\t\t\tthis.running ||\n\n\t\t\t\t// click on active header, but not collapsible\n\t\t\t\t( clickedIsActive && !options.collapsible ) ||\n\n\t\t\t\t// allow canceling activation\n\t\t\t\t( this._trigger( \"beforeActivate\", event, eventData ) === false ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\toptions.active = collapsing ? false : this.tabs.index( tab );\n\n\t\tthis.active = clickedIsActive ? $() : tab;\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tif ( !toHide.length && !toShow.length ) {\n\t\t\t$.error( \"jQuery UI Tabs: Mismatching fragment identifier.\" );\n\t\t}\n\n\t\tif ( toShow.length ) {\n\t\t\tthis.load( this.tabs.index( tab ), event );\n\t\t}\n\t\tthis._toggle( event, eventData );\n\t},\n\n\t// Handles show/hide for selecting tabs\n\t_toggle: function( event, eventData ) {\n\t\tvar that = this,\n\t\t\ttoShow = eventData.newPanel,\n\t\t\ttoHide = eventData.oldPanel;\n\n\t\tthis.running = true;\n\n\t\tfunction complete() {\n\t\t\tthat.running = false;\n\t\t\tthat._trigger( \"activate\", event, eventData );\n\t\t}\n\n\t\tfunction show() {\n\t\t\tthat._addClass( eventData.newTab.closest( \"li\" ), \"ui-tabs-active\", \"ui-state-active\" );\n\n\t\t\tif ( toShow.length && that.options.show ) {\n\t\t\t\tthat._show( toShow, that.options.show, complete );\n\t\t\t} else {\n\t\t\t\ttoShow.show();\n\t\t\t\tcomplete();\n\t\t\t}\n\t\t}\n\n\t\t// Start out by hiding, then showing, then completing\n\t\tif ( toHide.length && this.options.hide ) {\n\t\t\tthis._hide( toHide, this.options.hide, function() {\n\t\t\t\tthat._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\t\tshow();\n\t\t\t} );\n\t\t} else {\n\t\t\tthis._removeClass( eventData.oldTab.closest( \"li\" ),\n\t\t\t\t\"ui-tabs-active\", \"ui-state-active\" );\n\t\t\ttoHide.hide();\n\t\t\tshow();\n\t\t}\n\n\t\ttoHide.attr( \"aria-hidden\", \"true\" );\n\t\teventData.oldTab.attr( {\n\t\t\t\"aria-selected\": \"false\",\n\t\t\t\"aria-expanded\": \"false\"\n\t\t} );\n\n\t\t// If we're switching tabs, remove the old tab from the tab order.\n\t\t// If we're opening from collapsed state, remove the previous tab from the tab order.\n\t\t// If we're collapsing, then keep the collapsing tab in the tab order.\n\t\tif ( toShow.length && toHide.length ) {\n\t\t\teventData.oldTab.attr( \"tabIndex\", -1 );\n\t\t} else if ( toShow.length ) {\n\t\t\tthis.tabs.filter( function() {\n\t\t\t\treturn $( this ).attr( \"tabIndex\" ) === 0;\n\t\t\t} )\n\t\t\t\t.attr( \"tabIndex\", -1 );\n\t\t}\n\n\t\ttoShow.attr( \"aria-hidden\", \"false\" );\n\t\teventData.newTab.attr( {\n\t\t\t\"aria-selected\": \"true\",\n\t\t\t\"aria-expanded\": \"true\",\n\t\t\ttabIndex: 0\n\t\t} );\n\t},\n\n\t_activate: function( index ) {\n\t\tvar anchor,\n\t\t\tactive = this._findActive( index );\n\n\t\t// Trying to activate the already active panel\n\t\tif ( active[ 0 ] === this.active[ 0 ] ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Trying to collapse, simulate a click on the current active header\n\t\tif ( !active.length ) {\n\t\t\tactive = this.active;\n\t\t}\n\n\t\tanchor = active.find( \".ui-tabs-anchor\" )[ 0 ];\n\t\tthis._eventHandler( {\n\t\t\ttarget: anchor,\n\t\t\tcurrentTarget: anchor,\n\t\t\tpreventDefault: $.noop\n\t\t} );\n\t},\n\n\t_findActive: function( index ) {\n\t\treturn index === false ? $() : this.tabs.eq( index );\n\t},\n\n\t_getIndex: function( index ) {\n\n\t\t// meta-function to give users option to provide a href string instead of a numerical index.\n\t\tif ( typeof index === \"string\" ) {\n\t\t\tindex = this.anchors.index( this.anchors.filter( \"[href$='\" +\n\t\t\t\t$.ui.escapeSelector( index ) + \"']\" ) );\n\t\t}\n\n\t\treturn index;\n\t},\n\n\t_destroy: function() {\n\t\tif ( this.xhr ) {\n\t\t\tthis.xhr.abort();\n\t\t}\n\n\t\tthis.tablist\n\t\t\t.removeAttr( \"role\" )\n\t\t\t.off( this.eventNamespace );\n\n\t\tthis.anchors\n\t\t\t.removeAttr( \"role tabIndex\" )\n\t\t\t.removeUniqueId();\n\n\t\tthis.tabs.add( this.panels ).each( function() {\n\t\t\tif ( $.data( this, \"ui-tabs-destroy\" ) ) {\n\t\t\t\t$( this ).remove();\n\t\t\t} else {\n\t\t\t\t$( this ).removeAttr( \"role tabIndex \" +\n\t\t\t\t\t\"aria-live aria-busy aria-selected aria-labelledby aria-hidden aria-expanded\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.tabs.each( function() {\n\t\t\tvar li = $( this ),\n\t\t\t\tprev = li.data( \"ui-tabs-aria-controls\" );\n\t\t\tif ( prev ) {\n\t\t\t\tli\n\t\t\t\t\t.attr( \"aria-controls\", prev )\n\t\t\t\t\t.removeData( \"ui-tabs-aria-controls\" );\n\t\t\t} else {\n\t\t\t\tli.removeAttr( \"aria-controls\" );\n\t\t\t}\n\t\t} );\n\n\t\tthis.panels.show();\n\n\t\tif ( this.options.heightStyle !== \"content\" ) {\n\t\t\tthis.panels.css( \"height\", \"\" );\n\t\t}\n\t},\n\n\tenable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === false ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = false;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.map( disabled, function( num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t} else {\n\t\t\t\tdisabled = $.map( this.tabs, function( li, num ) {\n\t\t\t\t\treturn num !== index ? num : null;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tdisable: function( index ) {\n\t\tvar disabled = this.options.disabled;\n\t\tif ( disabled === true ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( index === undefined ) {\n\t\t\tdisabled = true;\n\t\t} else {\n\t\t\tindex = this._getIndex( index );\n\t\t\tif ( $.inArray( index, disabled ) !== -1 ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( $.isArray( disabled ) ) {\n\t\t\t\tdisabled = $.merge( [ index ], disabled ).sort();\n\t\t\t} else {\n\t\t\t\tdisabled = [ index ];\n\t\t\t}\n\t\t}\n\t\tthis._setOptionDisabled( disabled );\n\t},\n\n\tload: function( index, event ) {\n\t\tindex = this._getIndex( index );\n\t\tvar that = this,\n\t\t\ttab = this.tabs.eq( index ),\n\t\t\tanchor = tab.find( \".ui-tabs-anchor\" ),\n\t\t\tpanel = this._getPanelForTab( tab ),\n\t\t\teventData = {\n\t\t\t\ttab: tab,\n\t\t\t\tpanel: panel\n\t\t\t},\n\t\t\tcomplete = function( jqXHR, status ) {\n\t\t\t\tif ( status === \"abort\" ) {\n\t\t\t\t\tthat.panels.stop( false, true );\n\t\t\t\t}\n\n\t\t\t\tthat._removeClass( tab, \"ui-tabs-loading\" );\n\t\t\t\tpanel.removeAttr( \"aria-busy\" );\n\n\t\t\t\tif ( jqXHR === that.xhr ) {\n\t\t\t\t\tdelete that.xhr;\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Not remote\n\t\tif ( this._isLocal( anchor[ 0 ] ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tthis.xhr = $.ajax( this._ajaxSettings( anchor, event, eventData ) );\n\n\t\t// Support: jQuery <1.8\n\t\t// jQuery <1.8 returns false if the request is canceled in beforeSend,\n\t\t// but as of 1.8, $.ajax() always returns a jqXHR object.\n\t\tif ( this.xhr && this.xhr.statusText !== \"canceled\" ) {\n\t\t\tthis._addClass( tab, \"ui-tabs-loading\" );\n\t\t\tpanel.attr( \"aria-busy\", \"true\" );\n\n\t\t\tthis.xhr\n\t\t\t\t.done( function( response, status, jqXHR ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tpanel.html( response );\n\t\t\t\t\t\tthat._trigger( \"load\", event, eventData );\n\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} )\n\t\t\t\t.fail( function( jqXHR, status ) {\n\n\t\t\t\t\t// support: jQuery <1.8\n\t\t\t\t\t// http://bugs.jquery.com/ticket/11778\n\t\t\t\t\tsetTimeout( function() {\n\t\t\t\t\t\tcomplete( jqXHR, status );\n\t\t\t\t\t}, 1 );\n\t\t\t\t} );\n\t\t}\n\t},\n\n\t_ajaxSettings: function( anchor, event, eventData ) {\n\t\tvar that = this;\n\t\treturn {\n\n\t\t\t// Support: IE <11 only\n\t\t\t// Strip any hash that exists to prevent errors with the Ajax request\n\t\t\turl: anchor.attr( \"href\" ).replace( /#.*$/, \"\" ),\n\t\t\tbeforeSend: function( jqXHR, settings ) {\n\t\t\t\treturn that._trigger( \"beforeLoad\", event,\n\t\t\t\t\t$.extend( { jqXHR: jqXHR, ajaxSettings: settings }, eventData ) );\n\t\t\t}\n\t\t};\n\t},\n\n\t_getPanelForTab: function( tab ) {\n\t\tvar id = $( tab ).attr( \"aria-controls\" );\n\t\treturn this.element.find( this._sanitizeSelector( \"#\" + id ) );\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for ui-tab class (now ui-tabs-tab)\n\t$.widget( \"ui.tabs\", $.ui.tabs, {\n\t\t_processTabs: function() {\n\t\t\tthis._superApply( arguments );\n\t\t\tthis._addClass( this.tabs, \"ui-tab\" );\n\t\t}\n\t} );\n}\n\nvar widgetsTabs = $.ui.tabs;\n\n\n/*!\n * jQuery UI Tooltip 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n */\n\n//>>label: Tooltip\n//>>group: Widgets\n//>>description: Shows additional information for any element on hover or focus.\n//>>docs: http://api.jqueryui.com/tooltip/\n//>>demos: http://jqueryui.com/tooltip/\n//>>css.structure: ../../themes/base/core.css\n//>>css.structure: ../../themes/base/tooltip.css\n//>>css.theme: ../../themes/base/theme.css\n\n\n\n$.widget( \"ui.tooltip\", {\n\tversion: \"1.12.1\",\n\toptions: {\n\t\tclasses: {\n\t\t\t\"ui-tooltip\": \"ui-corner-all ui-widget-shadow\"\n\t\t},\n\t\tcontent: function() {\n\n\t\t\t// support: IE<9, Opera in jQuery <1.7\n\t\t\t// .text() can't accept undefined, so coerce to a string\n\t\t\tvar title = $( this ).attr( \"title\" ) || \"\";\n\n\t\t\t// Escape title, since we're going from an attribute to raw HTML\n\t\t\treturn $( \"<a>\" ).text( title ).html();\n\t\t},\n\t\thide: true,\n\n\t\t// Disabled elements have inconsistent behavior across browsers (#8661)\n\t\titems: \"[title]:not([disabled])\",\n\t\tposition: {\n\t\t\tmy: \"left top+15\",\n\t\t\tat: \"left bottom\",\n\t\t\tcollision: \"flipfit flip\"\n\t\t},\n\t\tshow: true,\n\t\ttrack: false,\n\n\t\t// Callbacks\n\t\tclose: null,\n\t\topen: null\n\t},\n\n\t_addDescribedBy: function( elem, id ) {\n\t\tvar describedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ );\n\t\tdescribedby.push( id );\n\t\telem\n\t\t\t.data( \"ui-tooltip-id\", id )\n\t\t\t.attr( \"aria-describedby\", $.trim( describedby.join( \" \" ) ) );\n\t},\n\n\t_removeDescribedBy: function( elem ) {\n\t\tvar id = elem.data( \"ui-tooltip-id\" ),\n\t\t\tdescribedby = ( elem.attr( \"aria-describedby\" ) || \"\" ).split( /\\s+/ ),\n\t\t\tindex = $.inArray( id, describedby );\n\n\t\tif ( index !== -1 ) {\n\t\t\tdescribedby.splice( index, 1 );\n\t\t}\n\n\t\telem.removeData( \"ui-tooltip-id\" );\n\t\tdescribedby = $.trim( describedby.join( \" \" ) );\n\t\tif ( describedby ) {\n\t\t\telem.attr( \"aria-describedby\", describedby );\n\t\t} else {\n\t\t\telem.removeAttr( \"aria-describedby\" );\n\t\t}\n\t},\n\n\t_create: function() {\n\t\tthis._on( {\n\t\t\tmouseover: \"open\",\n\t\t\tfocusin: \"open\"\n\t\t} );\n\n\t\t// IDs of generated tooltips, needed for destroy\n\t\tthis.tooltips = {};\n\n\t\t// IDs of parent tooltips where we removed the title attribute\n\t\tthis.parents = {};\n\n\t\t// Append the aria-live region so tooltips announce correctly\n\t\tthis.liveRegion = $( \"<div>\" )\n\t\t\t.attr( {\n\t\t\t\trole: \"log\",\n\t\t\t\t\"aria-live\": \"assertive\",\n\t\t\t\t\"aria-relevant\": \"additions\"\n\t\t\t} )\n\t\t\t.appendTo( this.document[ 0 ].body );\n\t\tthis._addClass( this.liveRegion, null, \"ui-helper-hidden-accessible\" );\n\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\t_setOption: function( key, value ) {\n\t\tvar that = this;\n\n\t\tthis._super( key, value );\n\n\t\tif ( key === \"content\" ) {\n\t\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\t\tthat._updateContent( tooltipData.element );\n\t\t\t} );\n\t\t}\n\t},\n\n\t_setOptionDisabled: function( value ) {\n\t\tthis[ value ? \"_disable\" : \"_enable\" ]();\n\t},\n\n\t_disable: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\t\t\tvar event = $.Event( \"blur\" );\n\t\t\tevent.target = event.currentTarget = tooltipData.element[ 0 ];\n\t\t\tthat.close( event, true );\n\t\t} );\n\n\t\t// Remove title attributes to prevent native tooltips\n\t\tthis.disabledTitles = this.disabledTitles.add(\n\t\t\tthis.element.find( this.options.items ).addBack()\n\t\t\t\t.filter( function() {\n\t\t\t\t\tvar element = $( this );\n\t\t\t\t\tif ( element.is( \"[title]\" ) ) {\n\t\t\t\t\t\treturn element\n\t\t\t\t\t\t\t.data( \"ui-tooltip-title\", element.attr( \"title\" ) )\n\t\t\t\t\t\t\t.removeAttr( \"title\" );\n\t\t\t\t\t}\n\t\t\t\t} )\n\t\t);\n\t},\n\n\t_enable: function() {\n\n\t\t// restore title attributes\n\t\tthis.disabledTitles.each( function() {\n\t\t\tvar element = $( this );\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t}\n\t\t} );\n\t\tthis.disabledTitles = $( [] );\n\t},\n\n\topen: function( event ) {\n\t\tvar that = this,\n\t\t\ttarget = $( event ? event.target : this.element )\n\n\t\t\t\t// we need closest here due to mouseover bubbling,\n\t\t\t\t// but always pointing at the same event target\n\t\t\t\t.closest( this.options.items );\n\n\t\t// No element to show a tooltip for or the tooltip is already open\n\t\tif ( !target.length || target.data( \"ui-tooltip-id\" ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( target.attr( \"title\" ) ) {\n\t\t\ttarget.data( \"ui-tooltip-title\", target.attr( \"title\" ) );\n\t\t}\n\n\t\ttarget.data( \"ui-tooltip-open\", true );\n\n\t\t// Kill parent tooltips, custom or native, for hover\n\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\ttarget.parents().each( function() {\n\t\t\t\tvar parent = $( this ),\n\t\t\t\t\tblurEvent;\n\t\t\t\tif ( parent.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\tblurEvent = $.Event( \"blur\" );\n\t\t\t\t\tblurEvent.target = blurEvent.currentTarget = this;\n\t\t\t\t\tthat.close( blurEvent, true );\n\t\t\t\t}\n\t\t\t\tif ( parent.attr( \"title\" ) ) {\n\t\t\t\t\tparent.uniqueId();\n\t\t\t\t\tthat.parents[ this.id ] = {\n\t\t\t\t\t\telement: this,\n\t\t\t\t\t\ttitle: parent.attr( \"title\" )\n\t\t\t\t\t};\n\t\t\t\t\tparent.attr( \"title\", \"\" );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tthis._registerCloseHandlers( event, target );\n\t\tthis._updateContent( target, event );\n\t},\n\n\t_updateContent: function( target, event ) {\n\t\tvar content,\n\t\t\tcontentOption = this.options.content,\n\t\t\tthat = this,\n\t\t\teventType = event ? event.type : null;\n\n\t\tif ( typeof contentOption === \"string\" || contentOption.nodeType ||\n\t\t\t\tcontentOption.jquery ) {\n\t\t\treturn this._open( event, target, contentOption );\n\t\t}\n\n\t\tcontent = contentOption.call( target[ 0 ], function( response ) {\n\n\t\t\t// IE may instantly serve a cached response for ajax requests\n\t\t\t// delay this call to _open so the other call to _open runs first\n\t\t\tthat._delay( function() {\n\n\t\t\t\t// Ignore async response if tooltip was closed already\n\t\t\t\tif ( !target.data( \"ui-tooltip-open\" ) ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\t// JQuery creates a special event for focusin when it doesn't\n\t\t\t\t// exist natively. To improve performance, the native event\n\t\t\t\t// object is reused and the type is changed. Therefore, we can't\n\t\t\t\t// rely on the type being correct after the event finished\n\t\t\t\t// bubbling, so we set it back to the previous value. (#8740)\n\t\t\t\tif ( event ) {\n\t\t\t\t\tevent.type = eventType;\n\t\t\t\t}\n\t\t\t\tthis._open( event, target, response );\n\t\t\t} );\n\t\t} );\n\t\tif ( content ) {\n\t\t\tthis._open( event, target, content );\n\t\t}\n\t},\n\n\t_open: function( event, target, content ) {\n\t\tvar tooltipData, tooltip, delayedShow, a11yContent,\n\t\t\tpositionOption = $.extend( {}, this.options.position );\n\n\t\tif ( !content ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Content can be updated multiple times. If the tooltip already\n\t\t// exists, then just update the content and bail.\n\t\ttooltipData = this._find( target );\n\t\tif ( tooltipData ) {\n\t\t\ttooltipData.tooltip.find( \".ui-tooltip-content\" ).html( content );\n\t\t\treturn;\n\t\t}\n\n\t\t// If we have a title, clear it to prevent the native tooltip\n\t\t// we have to check first to avoid defining a title if none exists\n\t\t// (we don't want to cause an element to start matching [title])\n\t\t//\n\t\t// We use removeAttr only for key events, to allow IE to export the correct\n\t\t// accessible attributes. For mouse events, set to empty string to avoid\n\t\t// native tooltip showing up (happens only when removing inside mouseover).\n\t\tif ( target.is( \"[title]\" ) ) {\n\t\t\tif ( event && event.type === \"mouseover\" ) {\n\t\t\t\ttarget.attr( \"title\", \"\" );\n\t\t\t} else {\n\t\t\t\ttarget.removeAttr( \"title\" );\n\t\t\t}\n\t\t}\n\n\t\ttooltipData = this._tooltip( target );\n\t\ttooltip = tooltipData.tooltip;\n\t\tthis._addDescribedBy( target, tooltip.attr( \"id\" ) );\n\t\ttooltip.find( \".ui-tooltip-content\" ).html( content );\n\n\t\t// Support: Voiceover on OS X, JAWS on IE <= 9\n\t\t// JAWS announces deletions even when aria-relevant=\"additions\"\n\t\t// Voiceover will sometimes re-read the entire log region's contents from the beginning\n\t\tthis.liveRegion.children().hide();\n\t\ta11yContent = $( \"<div>\" ).html( tooltip.find( \".ui-tooltip-content\" ).html() );\n\t\ta11yContent.removeAttr( \"name\" ).find( \"[name]\" ).removeAttr( \"name\" );\n\t\ta11yContent.removeAttr( \"id\" ).find( \"[id]\" ).removeAttr( \"id\" );\n\t\ta11yContent.appendTo( this.liveRegion );\n\n\t\tfunction position( event ) {\n\t\t\tpositionOption.of = event;\n\t\t\tif ( tooltip.is( \":hidden\" ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\ttooltip.position( positionOption );\n\t\t}\n\t\tif ( this.options.track && event && /^mouse/.test( event.type ) ) {\n\t\t\tthis._on( this.document, {\n\t\t\t\tmousemove: position\n\t\t\t} );\n\n\t\t\t// trigger once to override element-relative positioning\n\t\t\tposition( event );\n\t\t} else {\n\t\t\ttooltip.position( $.extend( {\n\t\t\t\tof: target\n\t\t\t}, this.options.position ) );\n\t\t}\n\n\t\ttooltip.hide();\n\n\t\tthis._show( tooltip, this.options.show );\n\n\t\t// Handle tracking tooltips that are shown with a delay (#8644). As soon\n\t\t// as the tooltip is visible, position the tooltip using the most recent\n\t\t// event.\n\t\t// Adds the check to add the timers only when both delay and track options are set (#14682)\n\t\tif ( this.options.track && this.options.show && this.options.show.delay ) {\n\t\t\tdelayedShow = this.delayedShow = setInterval( function() {\n\t\t\t\tif ( tooltip.is( \":visible\" ) ) {\n\t\t\t\t\tposition( positionOption.of );\n\t\t\t\t\tclearInterval( delayedShow );\n\t\t\t\t}\n\t\t\t}, $.fx.interval );\n\t\t}\n\n\t\tthis._trigger( \"open\", event, { tooltip: tooltip } );\n\t},\n\n\t_registerCloseHandlers: function( event, target ) {\n\t\tvar events = {\n\t\t\tkeyup: function( event ) {\n\t\t\t\tif ( event.keyCode === $.ui.keyCode.ESCAPE ) {\n\t\t\t\t\tvar fakeEvent = $.Event( event );\n\t\t\t\t\tfakeEvent.currentTarget = target[ 0 ];\n\t\t\t\t\tthis.close( fakeEvent, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\t// Only bind remove handler for delegated targets. Non-delegated\n\t\t// tooltips will handle this in destroy.\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tevents.remove = function() {\n\t\t\t\tthis._removeTooltip( this._find( target ).tooltip );\n\t\t\t};\n\t\t}\n\n\t\tif ( !event || event.type === \"mouseover\" ) {\n\t\t\tevents.mouseleave = \"close\";\n\t\t}\n\t\tif ( !event || event.type === \"focusin\" ) {\n\t\t\tevents.focusout = \"close\";\n\t\t}\n\t\tthis._on( true, target, events );\n\t},\n\n\tclose: function( event ) {\n\t\tvar tooltip,\n\t\t\tthat = this,\n\t\t\ttarget = $( event ? event.currentTarget : this.element ),\n\t\t\ttooltipData = this._find( target );\n\n\t\t// The tooltip may already be closed\n\t\tif ( !tooltipData ) {\n\n\t\t\t// We set ui-tooltip-open immediately upon open (in open()), but only set the\n\t\t\t// additional data once there's actually content to show (in _open()). So even if the\n\t\t\t// tooltip doesn't have full data, we always remove ui-tooltip-open in case we're in\n\t\t\t// the period between open() and _open().\n\t\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\t\treturn;\n\t\t}\n\n\t\ttooltip = tooltipData.tooltip;\n\n\t\t// Disabling closes the tooltip, so we need to track when we're closing\n\t\t// to avoid an infinite loop in case the tooltip becomes disabled on close\n\t\tif ( tooltipData.closing ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Clear the interval for delayed tracking tooltips\n\t\tclearInterval( this.delayedShow );\n\n\t\t// Only set title if we had one before (see comment in _open())\n\t\t// If the title attribute has changed since open(), don't restore\n\t\tif ( target.data( \"ui-tooltip-title\" ) && !target.attr( \"title\" ) ) {\n\t\t\ttarget.attr( \"title\", target.data( \"ui-tooltip-title\" ) );\n\t\t}\n\n\t\tthis._removeDescribedBy( target );\n\n\t\ttooltipData.hiding = true;\n\t\ttooltip.stop( true );\n\t\tthis._hide( tooltip, this.options.hide, function() {\n\t\t\tthat._removeTooltip( $( this ) );\n\t\t} );\n\n\t\ttarget.removeData( \"ui-tooltip-open\" );\n\t\tthis._off( target, \"mouseleave focusout keyup\" );\n\n\t\t// Remove 'remove' binding only on delegated targets\n\t\tif ( target[ 0 ] !== this.element[ 0 ] ) {\n\t\t\tthis._off( target, \"remove\" );\n\t\t}\n\t\tthis._off( this.document, \"mousemove\" );\n\n\t\tif ( event && event.type === \"mouseleave\" ) {\n\t\t\t$.each( this.parents, function( id, parent ) {\n\t\t\t\t$( parent.element ).attr( \"title\", parent.title );\n\t\t\t\tdelete that.parents[ id ];\n\t\t\t} );\n\t\t}\n\n\t\ttooltipData.closing = true;\n\t\tthis._trigger( \"close\", event, { tooltip: tooltip } );\n\t\tif ( !tooltipData.hiding ) {\n\t\t\ttooltipData.closing = false;\n\t\t}\n\t},\n\n\t_tooltip: function( element ) {\n\t\tvar tooltip = $( \"<div>\" ).attr( \"role\", \"tooltip\" ),\n\t\t\tcontent = $( \"<div>\" ).appendTo( tooltip ),\n\t\t\tid = tooltip.uniqueId().attr( \"id\" );\n\n\t\tthis._addClass( content, \"ui-tooltip-content\" );\n\t\tthis._addClass( tooltip, \"ui-tooltip\", \"ui-widget ui-widget-content\" );\n\n\t\ttooltip.appendTo( this._appendTo( element ) );\n\n\t\treturn this.tooltips[ id ] = {\n\t\t\telement: element,\n\t\t\ttooltip: tooltip\n\t\t};\n\t},\n\n\t_find: function( target ) {\n\t\tvar id = target.data( \"ui-tooltip-id\" );\n\t\treturn id ? this.tooltips[ id ] : null;\n\t},\n\n\t_removeTooltip: function( tooltip ) {\n\t\ttooltip.remove();\n\t\tdelete this.tooltips[ tooltip.attr( \"id\" ) ];\n\t},\n\n\t_appendTo: function( target ) {\n\t\tvar element = target.closest( \".ui-front, dialog\" );\n\n\t\tif ( !element.length ) {\n\t\t\telement = this.document[ 0 ].body;\n\t\t}\n\n\t\treturn element;\n\t},\n\n\t_destroy: function() {\n\t\tvar that = this;\n\n\t\t// Close open tooltips\n\t\t$.each( this.tooltips, function( id, tooltipData ) {\n\n\t\t\t// Delegate to close method to handle common cleanup\n\t\t\tvar event = $.Event( \"blur\" ),\n\t\t\t\telement = tooltipData.element;\n\t\t\tevent.target = event.currentTarget = element[ 0 ];\n\t\t\tthat.close( event, true );\n\n\t\t\t// Remove immediately; destroying an open tooltip doesn't use the\n\t\t\t// hide animation\n\t\t\t$( \"#\" + id ).remove();\n\n\t\t\t// Restore the title\n\t\t\tif ( element.data( \"ui-tooltip-title\" ) ) {\n\n\t\t\t\t// If the title attribute has changed since open(), don't restore\n\t\t\t\tif ( !element.attr( \"title\" ) ) {\n\t\t\t\t\telement.attr( \"title\", element.data( \"ui-tooltip-title\" ) );\n\t\t\t\t}\n\t\t\t\telement.removeData( \"ui-tooltip-title\" );\n\t\t\t}\n\t\t} );\n\t\tthis.liveRegion.remove();\n\t}\n} );\n\n// DEPRECATED\n// TODO: Switch return back to widget declaration at top of file when this is removed\nif ( $.uiBackCompat !== false ) {\n\n\t// Backcompat for tooltipClass option\n\t$.widget( \"ui.tooltip\", $.ui.tooltip, {\n\t\toptions: {\n\t\t\ttooltipClass: null\n\t\t},\n\t\t_tooltip: function() {\n\t\t\tvar tooltipData = this._superApply( arguments );\n\t\t\tif ( this.options.tooltipClass ) {\n\t\t\t\ttooltipData.tooltip.addClass( this.options.tooltipClass );\n\t\t\t}\n\t\t\treturn tooltipData;\n\t\t}\n\t} );\n}\n\nvar widgetsTooltip = $.ui.tooltip;\n\n\n\n\n}));"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/jquery-ui.structure.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n */\n/* Layout helpers\n----------------------------------*/\n.ui-helper-hidden {\n\tdisplay: none;\n}\n.ui-helper-hidden-accessible {\n\tborder: 0;\n\tclip: rect(0 0 0 0);\n\theight: 1px;\n\tmargin: -1px;\n\toverflow: hidden;\n\tpadding: 0;\n\tposition: absolute;\n\twidth: 1px;\n}\n.ui-helper-reset {\n\tmargin: 0;\n\tpadding: 0;\n\tborder: 0;\n\toutline: 0;\n\tline-height: 1.3;\n\ttext-decoration: none;\n\tfont-size: 100%;\n\tlist-style: none;\n}\n.ui-helper-clearfix:before,\n.ui-helper-clearfix:after {\n\tcontent: \"\";\n\tdisplay: table;\n\tborder-collapse: collapse;\n}\n.ui-helper-clearfix:after {\n\tclear: both;\n}\n.ui-helper-zfix {\n\twidth: 100%;\n\theight: 100%;\n\ttop: 0;\n\tleft: 0;\n\tposition: absolute;\n\topacity: 0;\n\tfilter:Alpha(Opacity=0); /* support: IE8 */\n}\n\n.ui-front {\n\tz-index: 100;\n}\n\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-disabled {\n\tcursor: default !important;\n\tpointer-events: none;\n}\n\n\n/* Icons\n----------------------------------*/\n.ui-icon {\n\tdisplay: inline-block;\n\tvertical-align: middle;\n\tmargin-top: -.25em;\n\tposition: relative;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n}\n\n.ui-widget-icon-block {\n\tleft: 50%;\n\tmargin-left: -8px;\n\tdisplay: block;\n}\n\n/* Misc visuals\n----------------------------------*/\n\n/* Overlays */\n.ui-widget-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n}\n.ui-accordion .ui-accordion-header {\n\tdisplay: block;\n\tcursor: pointer;\n\tposition: relative;\n\tmargin: 2px 0 0 0;\n\tpadding: .5em .5em .5em .7em;\n\tfont-size: 100%;\n}\n.ui-accordion .ui-accordion-content {\n\tpadding: 1em 2.2em;\n\tborder-top: 0;\n\toverflow: auto;\n}\n.ui-autocomplete {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tcursor: default;\n}\n.ui-menu {\n\tlist-style: none;\n\tpadding: 0;\n\tmargin: 0;\n\tdisplay: block;\n\toutline: 0;\n}\n.ui-menu .ui-menu {\n\tposition: absolute;\n}\n.ui-menu .ui-menu-item {\n\tmargin: 0;\n\tcursor: pointer;\n\t/* support: IE10, see #8844 */\n\tlist-style-image: url(\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7\");\n}\n.ui-menu .ui-menu-item-wrapper {\n\tposition: relative;\n\tpadding: 3px 1em 3px .4em;\n}\n.ui-menu .ui-menu-divider {\n\tmargin: 5px 0;\n\theight: 0;\n\tfont-size: 0;\n\tline-height: 0;\n\tborder-width: 1px 0 0 0;\n}\n.ui-menu .ui-state-focus,\n.ui-menu .ui-state-active {\n\tmargin: -1px;\n}\n\n/* icon support */\n.ui-menu-icons {\n\tposition: relative;\n}\n.ui-menu-icons .ui-menu-item-wrapper {\n\tpadding-left: 2em;\n}\n\n/* left-aligned */\n.ui-menu .ui-icon {\n\tposition: absolute;\n\ttop: 0;\n\tbottom: 0;\n\tleft: .2em;\n\tmargin: auto 0;\n}\n\n/* right-aligned */\n.ui-menu .ui-menu-icon {\n\tleft: auto;\n\tright: 0;\n}\n.ui-button {\n\tpadding: .4em 1em;\n\tdisplay: inline-block;\n\tposition: relative;\n\tline-height: normal;\n\tmargin-right: .1em;\n\tcursor: pointer;\n\tvertical-align: middle;\n\ttext-align: center;\n\t-webkit-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n\n\t/* Support: IE <= 11 */\n\toverflow: visible;\n}\n\n.ui-button,\n.ui-button:link,\n.ui-button:visited,\n.ui-button:hover,\n.ui-button:active {\n\ttext-decoration: none;\n}\n\n/* to make room for the icon, a width needs to be set here */\n.ui-button-icon-only {\n\twidth: 2em;\n\tbox-sizing: border-box;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n}\n\n/* no icon support for input elements */\ninput.ui-button.ui-button-icon-only {\n\ttext-indent: 0;\n}\n\n/* button icon element(s) */\n.ui-button-icon-only .ui-icon {\n\tposition: absolute;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -8px;\n\tmargin-left: -8px;\n}\n\n.ui-button.ui-icon-notext .ui-icon {\n\tpadding: 0;\n\twidth: 2.1em;\n\theight: 2.1em;\n\ttext-indent: -9999px;\n\twhite-space: nowrap;\n\n}\n\ninput.ui-button.ui-icon-notext .ui-icon {\n\twidth: auto;\n\theight: auto;\n\ttext-indent: 0;\n\twhite-space: normal;\n\tpadding: .4em 1em;\n}\n\n/* workarounds */\n/* Support: Firefox 5 - 40 */\ninput.ui-button::-moz-focus-inner,\nbutton.ui-button::-moz-focus-inner {\n\tborder: 0;\n\tpadding: 0;\n}\n.ui-controlgroup {\n\tvertical-align: middle;\n\tdisplay: inline-block;\n}\n.ui-controlgroup > .ui-controlgroup-item {\n\tfloat: left;\n\tmargin-left: 0;\n\tmargin-right: 0;\n}\n.ui-controlgroup > .ui-controlgroup-item:focus,\n.ui-controlgroup > .ui-controlgroup-item.ui-visual-focus {\n\tz-index: 9999;\n}\n.ui-controlgroup-vertical > .ui-controlgroup-item {\n\tdisplay: block;\n\tfloat: none;\n\twidth: 100%;\n\tmargin-top: 0;\n\tmargin-bottom: 0;\n\ttext-align: left;\n}\n.ui-controlgroup-vertical .ui-controlgroup-item {\n\tbox-sizing: border-box;\n}\n.ui-controlgroup .ui-controlgroup-label {\n\tpadding: .4em 1em;\n}\n.ui-controlgroup .ui-controlgroup-label span {\n\tfont-size: 80%;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-left: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label + .ui-controlgroup-item {\n\tborder-top: none;\n}\n.ui-controlgroup-horizontal .ui-controlgroup-label.ui-widget-content {\n\tborder-right: none;\n}\n.ui-controlgroup-vertical .ui-controlgroup-label.ui-widget-content {\n\tborder-bottom: none;\n}\n\n/* Spinner specific style fixes */\n.ui-controlgroup-vertical .ui-spinner-input {\n\n\t/* Support: IE8 only, Android < 4.4 only */\n\twidth: 75%;\n\twidth: calc( 100% - 2.4em );\n}\n.ui-controlgroup-vertical .ui-spinner .ui-spinner-up {\n\tborder-top-style: solid;\n}\n\n.ui-checkboxradio-label .ui-icon-background {\n\tbox-shadow: inset 1px 1px 1px #ccc;\n\tborder-radius: .12em;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label .ui-icon-background {\n\twidth: 16px;\n\theight: 16px;\n\tborder-radius: 1em;\n\toverflow: visible;\n\tborder: none;\n}\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked .ui-icon,\n.ui-checkboxradio-radio-label.ui-checkboxradio-checked:hover .ui-icon {\n\tbackground-image: none;\n\twidth: 8px;\n\theight: 8px;\n\tborder-width: 4px;\n\tborder-style: solid;\n}\n.ui-checkboxradio-disabled {\n\tpointer-events: none;\n}\n.ui-datepicker {\n\twidth: 17em;\n\tpadding: .2em .2em 0;\n\tdisplay: none;\n}\n.ui-datepicker .ui-datepicker-header {\n\tposition: relative;\n\tpadding: .2em 0;\n}\n.ui-datepicker .ui-datepicker-prev,\n.ui-datepicker .ui-datepicker-next {\n\tposition: absolute;\n\ttop: 2px;\n\twidth: 1.8em;\n\theight: 1.8em;\n}\n.ui-datepicker .ui-datepicker-prev-hover,\n.ui-datepicker .ui-datepicker-next-hover {\n\ttop: 1px;\n}\n.ui-datepicker .ui-datepicker-prev {\n\tleft: 2px;\n}\n.ui-datepicker .ui-datepicker-next {\n\tright: 2px;\n}\n.ui-datepicker .ui-datepicker-prev-hover {\n\tleft: 1px;\n}\n.ui-datepicker .ui-datepicker-next-hover {\n\tright: 1px;\n}\n.ui-datepicker .ui-datepicker-prev span,\n.ui-datepicker .ui-datepicker-next span {\n\tdisplay: block;\n\tposition: absolute;\n\tleft: 50%;\n\tmargin-left: -8px;\n\ttop: 50%;\n\tmargin-top: -8px;\n}\n.ui-datepicker .ui-datepicker-title {\n\tmargin: 0 2.3em;\n\tline-height: 1.8em;\n\ttext-align: center;\n}\n.ui-datepicker .ui-datepicker-title select {\n\tfont-size: 1em;\n\tmargin: 1px 0;\n}\n.ui-datepicker select.ui-datepicker-month,\n.ui-datepicker select.ui-datepicker-year {\n\twidth: 45%;\n}\n.ui-datepicker table {\n\twidth: 100%;\n\tfont-size: .9em;\n\tborder-collapse: collapse;\n\tmargin: 0 0 .4em;\n}\n.ui-datepicker th {\n\tpadding: .7em .3em;\n\ttext-align: center;\n\tfont-weight: bold;\n\tborder: 0;\n}\n.ui-datepicker td {\n\tborder: 0;\n\tpadding: 1px;\n}\n.ui-datepicker td span,\n.ui-datepicker td a {\n\tdisplay: block;\n\tpadding: .2em;\n\ttext-align: right;\n\ttext-decoration: none;\n}\n.ui-datepicker .ui-datepicker-buttonpane {\n\tbackground-image: none;\n\tmargin: .7em 0 0 0;\n\tpadding: 0 .2em;\n\tborder-left: 0;\n\tborder-right: 0;\n\tborder-bottom: 0;\n}\n.ui-datepicker .ui-datepicker-buttonpane button {\n\tfloat: right;\n\tmargin: .5em .2em .4em;\n\tcursor: pointer;\n\tpadding: .2em .6em .3em .6em;\n\twidth: auto;\n\toverflow: visible;\n}\n.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current {\n\tfloat: left;\n}\n\n/* with multiple calendars */\n.ui-datepicker.ui-datepicker-multi {\n\twidth: auto;\n}\n.ui-datepicker-multi .ui-datepicker-group {\n\tfloat: left;\n}\n.ui-datepicker-multi .ui-datepicker-group table {\n\twidth: 95%;\n\tmargin: 0 auto .4em;\n}\n.ui-datepicker-multi-2 .ui-datepicker-group {\n\twidth: 50%;\n}\n.ui-datepicker-multi-3 .ui-datepicker-group {\n\twidth: 33.3%;\n}\n.ui-datepicker-multi-4 .ui-datepicker-group {\n\twidth: 25%;\n}\n.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-left-width: 0;\n}\n.ui-datepicker-multi .ui-datepicker-buttonpane {\n\tclear: left;\n}\n.ui-datepicker-row-break {\n\tclear: both;\n\twidth: 100%;\n\tfont-size: 0;\n}\n\n/* RTL support */\n.ui-datepicker-rtl {\n\tdirection: rtl;\n}\n.ui-datepicker-rtl .ui-datepicker-prev {\n\tright: 2px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next {\n\tleft: 2px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-prev:hover {\n\tright: 1px;\n\tleft: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-next:hover {\n\tleft: 1px;\n\tright: auto;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane {\n\tclear: right;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button {\n\tfloat: left;\n}\n.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current,\n.ui-datepicker-rtl .ui-datepicker-group {\n\tfloat: right;\n}\n.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header,\n.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header {\n\tborder-right-width: 0;\n\tborder-left-width: 1px;\n}\n\n/* Icons */\n.ui-datepicker .ui-icon {\n\tdisplay: block;\n\ttext-indent: -99999px;\n\toverflow: hidden;\n\tbackground-repeat: no-repeat;\n\tleft: .5em;\n\ttop: .3em;\n}\n.ui-dialog {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tpadding: .2em;\n\toutline: 0;\n}\n.ui-dialog .ui-dialog-titlebar {\n\tpadding: .4em 1em;\n\tposition: relative;\n}\n.ui-dialog .ui-dialog-title {\n\tfloat: left;\n\tmargin: .1em 0;\n\twhite-space: nowrap;\n\twidth: 90%;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-dialog .ui-dialog-titlebar-close {\n\tposition: absolute;\n\tright: .3em;\n\ttop: 50%;\n\twidth: 20px;\n\tmargin: -10px 0 0 0;\n\tpadding: 1px;\n\theight: 20px;\n}\n.ui-dialog .ui-dialog-content {\n\tposition: relative;\n\tborder: 0;\n\tpadding: .5em 1em;\n\tbackground: none;\n\toverflow: auto;\n}\n.ui-dialog .ui-dialog-buttonpane {\n\ttext-align: left;\n\tborder-width: 1px 0 0 0;\n\tbackground-image: none;\n\tmargin-top: .5em;\n\tpadding: .3em 1em .5em .4em;\n}\n.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {\n\tfloat: right;\n}\n.ui-dialog .ui-dialog-buttonpane button {\n\tmargin: .5em .4em .5em 0;\n\tcursor: pointer;\n}\n.ui-dialog .ui-resizable-n {\n\theight: 2px;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-e {\n\twidth: 2px;\n\tright: 0;\n}\n.ui-dialog .ui-resizable-s {\n\theight: 2px;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-w {\n\twidth: 2px;\n\tleft: 0;\n}\n.ui-dialog .ui-resizable-se,\n.ui-dialog .ui-resizable-sw,\n.ui-dialog .ui-resizable-ne,\n.ui-dialog .ui-resizable-nw {\n\twidth: 7px;\n\theight: 7px;\n}\n.ui-dialog .ui-resizable-se {\n\tright: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-sw {\n\tleft: 0;\n\tbottom: 0;\n}\n.ui-dialog .ui-resizable-ne {\n\tright: 0;\n\ttop: 0;\n}\n.ui-dialog .ui-resizable-nw {\n\tleft: 0;\n\ttop: 0;\n}\n.ui-draggable .ui-dialog-titlebar {\n\tcursor: move;\n}\n.ui-draggable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable {\n\tposition: relative;\n}\n.ui-resizable-handle {\n\tposition: absolute;\n\tfont-size: 0.1px;\n\tdisplay: block;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-resizable-disabled .ui-resizable-handle,\n.ui-resizable-autohide .ui-resizable-handle {\n\tdisplay: none;\n}\n.ui-resizable-n {\n\tcursor: n-resize;\n\theight: 7px;\n\twidth: 100%;\n\ttop: -5px;\n\tleft: 0;\n}\n.ui-resizable-s {\n\tcursor: s-resize;\n\theight: 7px;\n\twidth: 100%;\n\tbottom: -5px;\n\tleft: 0;\n}\n.ui-resizable-e {\n\tcursor: e-resize;\n\twidth: 7px;\n\tright: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-w {\n\tcursor: w-resize;\n\twidth: 7px;\n\tleft: -5px;\n\ttop: 0;\n\theight: 100%;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-resizable-sw {\n\tcursor: sw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\tbottom: -5px;\n}\n.ui-resizable-nw {\n\tcursor: nw-resize;\n\twidth: 9px;\n\theight: 9px;\n\tleft: -5px;\n\ttop: -5px;\n}\n.ui-resizable-ne {\n\tcursor: ne-resize;\n\twidth: 9px;\n\theight: 9px;\n\tright: -5px;\n\ttop: -5px;\n}\n.ui-progressbar {\n\theight: 2em;\n\ttext-align: left;\n\toverflow: hidden;\n}\n.ui-progressbar .ui-progressbar-value {\n\tmargin: -1px;\n\theight: 100%;\n}\n.ui-progressbar .ui-progressbar-overlay {\n\tbackground: url(\"data:image/gif;base64,R0lGODlhKAAoAIABAAAAAP///yH/C05FVFNDQVBFMi4wAwEAAAAh+QQJAQABACwAAAAAKAAoAAACkYwNqXrdC52DS06a7MFZI+4FHBCKoDeWKXqymPqGqxvJrXZbMx7Ttc+w9XgU2FB3lOyQRWET2IFGiU9m1frDVpxZZc6bfHwv4c1YXP6k1Vdy292Fb6UkuvFtXpvWSzA+HycXJHUXiGYIiMg2R6W459gnWGfHNdjIqDWVqemH2ekpObkpOlppWUqZiqr6edqqWQAAIfkECQEAAQAsAAAAACgAKAAAApSMgZnGfaqcg1E2uuzDmmHUBR8Qil95hiPKqWn3aqtLsS18y7G1SzNeowWBENtQd+T1JktP05nzPTdJZlR6vUxNWWjV+vUWhWNkWFwxl9VpZRedYcflIOLafaa28XdsH/ynlcc1uPVDZxQIR0K25+cICCmoqCe5mGhZOfeYSUh5yJcJyrkZWWpaR8doJ2o4NYq62lAAACH5BAkBAAEALAAAAAAoACgAAAKVDI4Yy22ZnINRNqosw0Bv7i1gyHUkFj7oSaWlu3ovC8GxNso5fluz3qLVhBVeT/Lz7ZTHyxL5dDalQWPVOsQWtRnuwXaFTj9jVVh8pma9JjZ4zYSj5ZOyma7uuolffh+IR5aW97cHuBUXKGKXlKjn+DiHWMcYJah4N0lYCMlJOXipGRr5qdgoSTrqWSq6WFl2ypoaUAAAIfkECQEAAQAsAAAAACgAKAAAApaEb6HLgd/iO7FNWtcFWe+ufODGjRfoiJ2akShbueb0wtI50zm02pbvwfWEMWBQ1zKGlLIhskiEPm9R6vRXxV4ZzWT2yHOGpWMyorblKlNp8HmHEb/lCXjcW7bmtXP8Xt229OVWR1fod2eWqNfHuMjXCPkIGNileOiImVmCOEmoSfn3yXlJWmoHGhqp6ilYuWYpmTqKUgAAIfkECQEAAQAsAAAAACgAKAAAApiEH6kb58biQ3FNWtMFWW3eNVcojuFGfqnZqSebuS06w5V80/X02pKe8zFwP6EFWOT1lDFk8rGERh1TTNOocQ61Hm4Xm2VexUHpzjymViHrFbiELsefVrn6XKfnt2Q9G/+Xdie499XHd2g4h7ioOGhXGJboGAnXSBnoBwKYyfioubZJ2Hn0RuRZaflZOil56Zp6iioKSXpUAAAh+QQJAQABACwAAAAAKAAoAAACkoQRqRvnxuI7kU1a1UU5bd5tnSeOZXhmn5lWK3qNTWvRdQxP8qvaC+/yaYQzXO7BMvaUEmJRd3TsiMAgswmNYrSgZdYrTX6tSHGZO73ezuAw2uxuQ+BbeZfMxsexY35+/Qe4J1inV0g4x3WHuMhIl2jXOKT2Q+VU5fgoSUI52VfZyfkJGkha6jmY+aaYdirq+lQAACH5BAkBAAEALAAAAAAoACgAAAKWBIKpYe0L3YNKToqswUlvznigd4wiR4KhZrKt9Upqip61i9E3vMvxRdHlbEFiEXfk9YARYxOZZD6VQ2pUunBmtRXo1Lf8hMVVcNl8JafV38aM2/Fu5V16Bn63r6xt97j09+MXSFi4BniGFae3hzbH9+hYBzkpuUh5aZmHuanZOZgIuvbGiNeomCnaxxap2upaCZsq+1kAACH5BAkBAAEALAAAAAAoACgAAAKXjI8By5zf4kOxTVrXNVlv1X0d8IGZGKLnNpYtm8Lr9cqVeuOSvfOW79D9aDHizNhDJidFZhNydEahOaDH6nomtJjp1tutKoNWkvA6JqfRVLHU/QUfau9l2x7G54d1fl995xcIGAdXqMfBNadoYrhH+Mg2KBlpVpbluCiXmMnZ2Sh4GBqJ+ckIOqqJ6LmKSllZmsoq6wpQAAAh+QQJAQABACwAAAAAKAAoAAAClYx/oLvoxuJDkU1a1YUZbJ59nSd2ZXhWqbRa2/gF8Gu2DY3iqs7yrq+xBYEkYvFSM8aSSObE+ZgRl1BHFZNr7pRCavZ5BW2142hY3AN/zWtsmf12p9XxxFl2lpLn1rseztfXZjdIWIf2s5dItwjYKBgo9yg5pHgzJXTEeGlZuenpyPmpGQoKOWkYmSpaSnqKileI2FAAACH5BAkBAAEALAAAAAAoACgAAAKVjB+gu+jG4kORTVrVhRlsnn2dJ3ZleFaptFrb+CXmO9OozeL5VfP99HvAWhpiUdcwkpBH3825AwYdU8xTqlLGhtCosArKMpvfa1mMRae9VvWZfeB2XfPkeLmm18lUcBj+p5dnN8jXZ3YIGEhYuOUn45aoCDkp16hl5IjYJvjWKcnoGQpqyPlpOhr3aElaqrq56Bq7VAAAOw==\");\n\theight: 100%;\n\tfilter: alpha(opacity=25); /* support: IE8 */\n\topacity: 0.25;\n}\n.ui-progressbar-indeterminate .ui-progressbar-value {\n\tbackground-image: none;\n}\n.ui-selectable {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-selectable-helper {\n\tposition: absolute;\n\tz-index: 100;\n\tborder: 1px dotted black;\n}\n.ui-selectmenu-menu {\n\tpadding: 0;\n\tmargin: 0;\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tdisplay: none;\n}\n.ui-selectmenu-menu .ui-menu {\n\toverflow: auto;\n\toverflow-x: hidden;\n\tpadding-bottom: 1px;\n}\n.ui-selectmenu-menu .ui-menu .ui-selectmenu-optgroup {\n\tfont-size: 1em;\n\tfont-weight: bold;\n\tline-height: 1.5;\n\tpadding: 2px 0.4em;\n\tmargin: 0.5em 0 0 0;\n\theight: auto;\n\tborder: 0;\n}\n.ui-selectmenu-open {\n\tdisplay: block;\n}\n.ui-selectmenu-text {\n\tdisplay: block;\n\tmargin-right: 20px;\n\toverflow: hidden;\n\ttext-overflow: ellipsis;\n}\n.ui-selectmenu-button.ui-button {\n\ttext-align: left;\n\twhite-space: nowrap;\n\twidth: 14em;\n}\n.ui-selectmenu-icon.ui-icon {\n\tfloat: right;\n\tmargin-top: 0;\n}\n.ui-slider {\n\tposition: relative;\n\ttext-align: left;\n}\n.ui-slider .ui-slider-handle {\n\tposition: absolute;\n\tz-index: 2;\n\twidth: 1.2em;\n\theight: 1.2em;\n\tcursor: default;\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-slider .ui-slider-range {\n\tposition: absolute;\n\tz-index: 1;\n\tfont-size: .7em;\n\tdisplay: block;\n\tborder: 0;\n\tbackground-position: 0 0;\n}\n\n/* support: IE8 - See #6727 */\n.ui-slider.ui-state-disabled .ui-slider-handle,\n.ui-slider.ui-state-disabled .ui-slider-range {\n\tfilter: inherit;\n}\n\n.ui-slider-horizontal {\n\theight: .8em;\n}\n.ui-slider-horizontal .ui-slider-handle {\n\ttop: -.3em;\n\tmargin-left: -.6em;\n}\n.ui-slider-horizontal .ui-slider-range {\n\ttop: 0;\n\theight: 100%;\n}\n.ui-slider-horizontal .ui-slider-range-min {\n\tleft: 0;\n}\n.ui-slider-horizontal .ui-slider-range-max {\n\tright: 0;\n}\n\n.ui-slider-vertical {\n\twidth: .8em;\n\theight: 100px;\n}\n.ui-slider-vertical .ui-slider-handle {\n\tleft: -.3em;\n\tmargin-left: 0;\n\tmargin-bottom: -.6em;\n}\n.ui-slider-vertical .ui-slider-range {\n\tleft: 0;\n\twidth: 100%;\n}\n.ui-slider-vertical .ui-slider-range-min {\n\tbottom: 0;\n}\n.ui-slider-vertical .ui-slider-range-max {\n\ttop: 0;\n}\n.ui-sortable-handle {\n\t-ms-touch-action: none;\n\ttouch-action: none;\n}\n.ui-spinner {\n\tposition: relative;\n\tdisplay: inline-block;\n\toverflow: hidden;\n\tpadding: 0;\n\tvertical-align: middle;\n}\n.ui-spinner-input {\n\tborder: none;\n\tbackground: none;\n\tcolor: inherit;\n\tpadding: .222em 0;\n\tmargin: .2em 0;\n\tvertical-align: middle;\n\tmargin-left: .4em;\n\tmargin-right: 2em;\n}\n.ui-spinner-button {\n\twidth: 1.6em;\n\theight: 50%;\n\tfont-size: .5em;\n\tpadding: 0;\n\tmargin: 0;\n\ttext-align: center;\n\tposition: absolute;\n\tcursor: default;\n\tdisplay: block;\n\toverflow: hidden;\n\tright: 0;\n}\n/* more specificity required here to override default borders */\n.ui-spinner a.ui-spinner-button {\n\tborder-top-style: none;\n\tborder-bottom-style: none;\n\tborder-right-style: none;\n}\n.ui-spinner-up {\n\ttop: 0;\n}\n.ui-spinner-down {\n\tbottom: 0;\n}\n.ui-tabs {\n\tposition: relative;/* position: relative prevents IE scroll bug (element with position: relative inside container with overflow: auto appear as \"fixed\") */\n\tpadding: .2em;\n}\n.ui-tabs .ui-tabs-nav {\n\tmargin: 0;\n\tpadding: .2em .2em 0;\n}\n.ui-tabs .ui-tabs-nav li {\n\tlist-style: none;\n\tfloat: left;\n\tposition: relative;\n\ttop: 0;\n\tmargin: 1px .2em 0 0;\n\tborder-bottom-width: 0;\n\tpadding: 0;\n\twhite-space: nowrap;\n}\n.ui-tabs .ui-tabs-nav .ui-tabs-anchor {\n\tfloat: left;\n\tpadding: .5em 1em;\n\ttext-decoration: none;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active {\n\tmargin-bottom: -1px;\n\tpadding-bottom: 1px;\n}\n.ui-tabs .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-state-disabled .ui-tabs-anchor,\n.ui-tabs .ui-tabs-nav li.ui-tabs-loading .ui-tabs-anchor {\n\tcursor: text;\n}\n.ui-tabs-collapsible .ui-tabs-nav li.ui-tabs-active .ui-tabs-anchor {\n\tcursor: pointer;\n}\n.ui-tabs .ui-tabs-panel {\n\tdisplay: block;\n\tborder-width: 0;\n\tpadding: 1em 1.4em;\n\tbackground: none;\n}\n.ui-tooltip {\n\tpadding: 8px;\n\tposition: absolute;\n\tz-index: 9999;\n\tmax-width: 300px;\n}\nbody .ui-tooltip {\n\tborder-width: 2px;\n}\n"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/jquery-ui.theme.css",
    "content": "/*!\n * jQuery UI CSS Framework 1.12.1\n * http://jqueryui.com\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license.\n * http://jquery.org/license\n *\n * http://api.jqueryui.com/category/theming/\n *\n * To view and modify this theme, visit http://jqueryui.com/themeroller/?bgShadowXPos=&bgOverlayXPos=&bgErrorXPos=&bgHighlightXPos=&bgContentXPos=&bgHeaderXPos=&bgActiveXPos=&bgHoverXPos=&bgDefaultXPos=&bgShadowYPos=&bgOverlayYPos=&bgErrorYPos=&bgHighlightYPos=&bgContentYPos=&bgHeaderYPos=&bgActiveYPos=&bgHoverYPos=&bgDefaultYPos=&bgShadowRepeat=&bgOverlayRepeat=&bgErrorRepeat=&bgHighlightRepeat=&bgContentRepeat=&bgHeaderRepeat=&bgActiveRepeat=&bgHoverRepeat=&bgDefaultRepeat=&iconsHover=url(%22images%2Fui-icons_555555_256x240.png%22)&iconsHighlight=url(%22images%2Fui-icons_777620_256x240.png%22)&iconsHeader=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsError=url(%22images%2Fui-icons_cc0000_256x240.png%22)&iconsDefault=url(%22images%2Fui-icons_777777_256x240.png%22)&iconsContent=url(%22images%2Fui-icons_444444_256x240.png%22)&iconsActive=url(%22images%2Fui-icons_ffffff_256x240.png%22)&bgImgUrlShadow=&bgImgUrlOverlay=&bgImgUrlHover=&bgImgUrlHighlight=&bgImgUrlHeader=&bgImgUrlError=&bgImgUrlDefault=&bgImgUrlContent=&bgImgUrlActive=&opacityFilterShadow=Alpha(Opacity%3D30)&opacityFilterOverlay=Alpha(Opacity%3D30)&opacityShadowPerc=30&opacityOverlayPerc=30&iconColorHover=%23555555&iconColorHighlight=%23777620&iconColorHeader=%23444444&iconColorError=%23cc0000&iconColorDefault=%23777777&iconColorContent=%23444444&iconColorActive=%23ffffff&bgImgOpacityShadow=0&bgImgOpacityOverlay=0&bgImgOpacityError=95&bgImgOpacityHighlight=55&bgImgOpacityContent=75&bgImgOpacityHeader=75&bgImgOpacityActive=65&bgImgOpacityHover=75&bgImgOpacityDefault=75&bgTextureShadow=flat&bgTextureOverlay=flat&bgTextureError=flat&bgTextureHighlight=flat&bgTextureContent=flat&bgTextureHeader=flat&bgTextureActive=flat&bgTextureHover=flat&bgTextureDefault=flat&cornerRadius=3px&fwDefault=normal&ffDefault=Arial%2CHelvetica%2Csans-serif&fsDefault=1em&cornerRadiusShadow=8px&thicknessShadow=5px&offsetLeftShadow=0px&offsetTopShadow=0px&opacityShadow=.3&bgColorShadow=%23666666&opacityOverlay=.3&bgColorOverlay=%23aaaaaa&fcError=%235f3f3f&borderColorError=%23f1a899&bgColorError=%23fddfdf&fcHighlight=%23777620&borderColorHighlight=%23dad55e&bgColorHighlight=%23fffa90&fcContent=%23333333&borderColorContent=%23dddddd&bgColorContent=%23ffffff&fcHeader=%23333333&borderColorHeader=%23dddddd&bgColorHeader=%23e9e9e9&fcActive=%23ffffff&borderColorActive=%23003eff&bgColorActive=%23007fff&fcHover=%232b2b2b&borderColorHover=%23cccccc&bgColorHover=%23ededed&fcDefault=%23454545&borderColorDefault=%23c5c5c5&bgColorDefault=%23f6f6f6\n */\n\n\n/* Component containers\n----------------------------------*/\n.ui-widget {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget .ui-widget {\n\tfont-size: 1em;\n}\n.ui-widget input,\n.ui-widget select,\n.ui-widget textarea,\n.ui-widget button {\n\tfont-family: Arial,Helvetica,sans-serif;\n\tfont-size: 1em;\n}\n.ui-widget.ui-widget-content {\n\tborder: 1px solid #c5c5c5;\n}\n.ui-widget-content {\n\tborder: 1px solid #dddddd;\n\tbackground: #ffffff;\n\tcolor: #333333;\n}\n.ui-widget-content a {\n\tcolor: #333333;\n}\n.ui-widget-header {\n\tborder: 1px solid #dddddd;\n\tbackground: #e9e9e9;\n\tcolor: #333333;\n\tfont-weight: bold;\n}\n.ui-widget-header a {\n\tcolor: #333333;\n}\n\n/* Interaction states\n----------------------------------*/\n.ui-state-default,\n.ui-widget-content .ui-state-default,\n.ui-widget-header .ui-state-default,\n.ui-button,\n\n/* We use html here because we need a greater specificity to make sure disabled\nworks properly when clicked or hovered */\nhtml .ui-button.ui-state-disabled:hover,\nhtml .ui-button.ui-state-disabled:active {\n\tborder: 1px solid #c5c5c5;\n\tbackground: #f6f6f6;\n\tfont-weight: normal;\n\tcolor: #454545;\n}\n.ui-state-default a,\n.ui-state-default a:link,\n.ui-state-default a:visited,\na.ui-button,\na:link.ui-button,\na:visited.ui-button,\n.ui-button {\n\tcolor: #454545;\n\ttext-decoration: none;\n}\n.ui-state-hover,\n.ui-widget-content .ui-state-hover,\n.ui-widget-header .ui-state-hover,\n.ui-state-focus,\n.ui-widget-content .ui-state-focus,\n.ui-widget-header .ui-state-focus,\n.ui-button:hover,\n.ui-button:focus {\n\tborder: 1px solid #cccccc;\n\tbackground: #ededed;\n\tfont-weight: normal;\n\tcolor: #2b2b2b;\n}\n.ui-state-hover a,\n.ui-state-hover a:hover,\n.ui-state-hover a:link,\n.ui-state-hover a:visited,\n.ui-state-focus a,\n.ui-state-focus a:hover,\n.ui-state-focus a:link,\n.ui-state-focus a:visited,\na.ui-button:hover,\na.ui-button:focus {\n\tcolor: #2b2b2b;\n\ttext-decoration: none;\n}\n\n.ui-visual-focus {\n\tbox-shadow: 0 0 3px 1px rgb(94, 158, 214);\n}\n.ui-state-active,\n.ui-widget-content .ui-state-active,\n.ui-widget-header .ui-state-active,\na.ui-button:active,\n.ui-button:active,\n.ui-button.ui-state-active:hover {\n\tborder: 1px solid #003eff;\n\tbackground: #007fff;\n\tfont-weight: normal;\n\tcolor: #ffffff;\n}\n.ui-icon-background,\n.ui-state-active .ui-icon-background {\n\tborder: #003eff;\n\tbackground-color: #ffffff;\n}\n.ui-state-active a,\n.ui-state-active a:link,\n.ui-state-active a:visited {\n\tcolor: #ffffff;\n\ttext-decoration: none;\n}\n\n/* Interaction Cues\n----------------------------------*/\n.ui-state-highlight,\n.ui-widget-content .ui-state-highlight,\n.ui-widget-header .ui-state-highlight {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n\tcolor: #777620;\n}\n.ui-state-checked {\n\tborder: 1px solid #dad55e;\n\tbackground: #fffa90;\n}\n.ui-state-highlight a,\n.ui-widget-content .ui-state-highlight a,\n.ui-widget-header .ui-state-highlight a {\n\tcolor: #777620;\n}\n.ui-state-error,\n.ui-widget-content .ui-state-error,\n.ui-widget-header .ui-state-error {\n\tborder: 1px solid #f1a899;\n\tbackground: #fddfdf;\n\tcolor: #5f3f3f;\n}\n.ui-state-error a,\n.ui-widget-content .ui-state-error a,\n.ui-widget-header .ui-state-error a {\n\tcolor: #5f3f3f;\n}\n.ui-state-error-text,\n.ui-widget-content .ui-state-error-text,\n.ui-widget-header .ui-state-error-text {\n\tcolor: #5f3f3f;\n}\n.ui-priority-primary,\n.ui-widget-content .ui-priority-primary,\n.ui-widget-header .ui-priority-primary {\n\tfont-weight: bold;\n}\n.ui-priority-secondary,\n.ui-widget-content .ui-priority-secondary,\n.ui-widget-header .ui-priority-secondary {\n\topacity: .7;\n\tfilter:Alpha(Opacity=70); /* support: IE8 */\n\tfont-weight: normal;\n}\n.ui-state-disabled,\n.ui-widget-content .ui-state-disabled,\n.ui-widget-header .ui-state-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-state-disabled .ui-icon {\n\tfilter:Alpha(Opacity=35); /* support: IE8 - See #6059 */\n}\n\n/* Icons\n----------------------------------*/\n\n/* states and images */\n.ui-icon {\n\twidth: 16px;\n\theight: 16px;\n}\n.ui-icon,\n.ui-widget-content .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-widget-header .ui-icon {\n\tbackground-image: url(\"images/ui-icons_444444_256x240.png\");\n}\n.ui-state-hover .ui-icon,\n.ui-state-focus .ui-icon,\n.ui-button:hover .ui-icon,\n.ui-button:focus .ui-icon {\n\tbackground-image: url(\"images/ui-icons_555555_256x240.png\");\n}\n.ui-state-active .ui-icon,\n.ui-button:active .ui-icon {\n\tbackground-image: url(\"images/ui-icons_ffffff_256x240.png\");\n}\n.ui-state-highlight .ui-icon,\n.ui-button .ui-state-highlight.ui-icon {\n\tbackground-image: url(\"images/ui-icons_777620_256x240.png\");\n}\n.ui-state-error .ui-icon,\n.ui-state-error-text .ui-icon {\n\tbackground-image: url(\"images/ui-icons_cc0000_256x240.png\");\n}\n.ui-button .ui-icon {\n\tbackground-image: url(\"images/ui-icons_777777_256x240.png\");\n}\n\n/* positioning */\n.ui-icon-blank { background-position: 16px 16px; }\n.ui-icon-caret-1-n { background-position: 0 0; }\n.ui-icon-caret-1-ne { background-position: -16px 0; }\n.ui-icon-caret-1-e { background-position: -32px 0; }\n.ui-icon-caret-1-se { background-position: -48px 0; }\n.ui-icon-caret-1-s { background-position: -65px 0; }\n.ui-icon-caret-1-sw { background-position: -80px 0; }\n.ui-icon-caret-1-w { background-position: -96px 0; }\n.ui-icon-caret-1-nw { background-position: -112px 0; }\n.ui-icon-caret-2-n-s { background-position: -128px 0; }\n.ui-icon-caret-2-e-w { background-position: -144px 0; }\n.ui-icon-triangle-1-n { background-position: 0 -16px; }\n.ui-icon-triangle-1-ne { background-position: -16px -16px; }\n.ui-icon-triangle-1-e { background-position: -32px -16px; }\n.ui-icon-triangle-1-se { background-position: -48px -16px; }\n.ui-icon-triangle-1-s { background-position: -65px -16px; }\n.ui-icon-triangle-1-sw { background-position: -80px -16px; }\n.ui-icon-triangle-1-w { background-position: -96px -16px; }\n.ui-icon-triangle-1-nw { background-position: -112px -16px; }\n.ui-icon-triangle-2-n-s { background-position: -128px -16px; }\n.ui-icon-triangle-2-e-w { background-position: -144px -16px; }\n.ui-icon-arrow-1-n { background-position: 0 -32px; }\n.ui-icon-arrow-1-ne { background-position: -16px -32px; }\n.ui-icon-arrow-1-e { background-position: -32px -32px; }\n.ui-icon-arrow-1-se { background-position: -48px -32px; }\n.ui-icon-arrow-1-s { background-position: -65px -32px; }\n.ui-icon-arrow-1-sw { background-position: -80px -32px; }\n.ui-icon-arrow-1-w { background-position: -96px -32px; }\n.ui-icon-arrow-1-nw { background-position: -112px -32px; }\n.ui-icon-arrow-2-n-s { background-position: -128px -32px; }\n.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }\n.ui-icon-arrow-2-e-w { background-position: -160px -32px; }\n.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }\n.ui-icon-arrowstop-1-n { background-position: -192px -32px; }\n.ui-icon-arrowstop-1-e { background-position: -208px -32px; }\n.ui-icon-arrowstop-1-s { background-position: -224px -32px; }\n.ui-icon-arrowstop-1-w { background-position: -240px -32px; }\n.ui-icon-arrowthick-1-n { background-position: 1px -48px; }\n.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }\n.ui-icon-arrowthick-1-e { background-position: -32px -48px; }\n.ui-icon-arrowthick-1-se { background-position: -48px -48px; }\n.ui-icon-arrowthick-1-s { background-position: -64px -48px; }\n.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }\n.ui-icon-arrowthick-1-w { background-position: -96px -48px; }\n.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }\n.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }\n.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }\n.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }\n.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }\n.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }\n.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }\n.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }\n.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }\n.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }\n.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }\n.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }\n.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }\n.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }\n.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }\n.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }\n.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }\n.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }\n.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }\n.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }\n.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }\n.ui-icon-arrow-4 { background-position: 0 -80px; }\n.ui-icon-arrow-4-diag { background-position: -16px -80px; }\n.ui-icon-extlink { background-position: -32px -80px; }\n.ui-icon-newwin { background-position: -48px -80px; }\n.ui-icon-refresh { background-position: -64px -80px; }\n.ui-icon-shuffle { background-position: -80px -80px; }\n.ui-icon-transfer-e-w { background-position: -96px -80px; }\n.ui-icon-transferthick-e-w { background-position: -112px -80px; }\n.ui-icon-folder-collapsed { background-position: 0 -96px; }\n.ui-icon-folder-open { background-position: -16px -96px; }\n.ui-icon-document { background-position: -32px -96px; }\n.ui-icon-document-b { background-position: -48px -96px; }\n.ui-icon-note { background-position: -64px -96px; }\n.ui-icon-mail-closed { background-position: -80px -96px; }\n.ui-icon-mail-open { background-position: -96px -96px; }\n.ui-icon-suitcase { background-position: -112px -96px; }\n.ui-icon-comment { background-position: -128px -96px; }\n.ui-icon-person { background-position: -144px -96px; }\n.ui-icon-print { background-position: -160px -96px; }\n.ui-icon-trash { background-position: -176px -96px; }\n.ui-icon-locked { background-position: -192px -96px; }\n.ui-icon-unlocked { background-position: -208px -96px; }\n.ui-icon-bookmark { background-position: -224px -96px; }\n.ui-icon-tag { background-position: -240px -96px; }\n.ui-icon-home { background-position: 0 -112px; }\n.ui-icon-flag { background-position: -16px -112px; }\n.ui-icon-calendar { background-position: -32px -112px; }\n.ui-icon-cart { background-position: -48px -112px; }\n.ui-icon-pencil { background-position: -64px -112px; }\n.ui-icon-clock { background-position: -80px -112px; }\n.ui-icon-disk { background-position: -96px -112px; }\n.ui-icon-calculator { background-position: -112px -112px; }\n.ui-icon-zoomin { background-position: -128px -112px; }\n.ui-icon-zoomout { background-position: -144px -112px; }\n.ui-icon-search { background-position: -160px -112px; }\n.ui-icon-wrench { background-position: -176px -112px; }\n.ui-icon-gear { background-position: -192px -112px; }\n.ui-icon-heart { background-position: -208px -112px; }\n.ui-icon-star { background-position: -224px -112px; }\n.ui-icon-link { background-position: -240px -112px; }\n.ui-icon-cancel { background-position: 0 -128px; }\n.ui-icon-plus { background-position: -16px -128px; }\n.ui-icon-plusthick { background-position: -32px -128px; }\n.ui-icon-minus { background-position: -48px -128px; }\n.ui-icon-minusthick { background-position: -64px -128px; }\n.ui-icon-close { background-position: -80px -128px; }\n.ui-icon-closethick { background-position: -96px -128px; }\n.ui-icon-key { background-position: -112px -128px; }\n.ui-icon-lightbulb { background-position: -128px -128px; }\n.ui-icon-scissors { background-position: -144px -128px; }\n.ui-icon-clipboard { background-position: -160px -128px; }\n.ui-icon-copy { background-position: -176px -128px; }\n.ui-icon-contact { background-position: -192px -128px; }\n.ui-icon-image { background-position: -208px -128px; }\n.ui-icon-video { background-position: -224px -128px; }\n.ui-icon-script { background-position: -240px -128px; }\n.ui-icon-alert { background-position: 0 -144px; }\n.ui-icon-info { background-position: -16px -144px; }\n.ui-icon-notice { background-position: -32px -144px; }\n.ui-icon-help { background-position: -48px -144px; }\n.ui-icon-check { background-position: -64px -144px; }\n.ui-icon-bullet { background-position: -80px -144px; }\n.ui-icon-radio-on { background-position: -96px -144px; }\n.ui-icon-radio-off { background-position: -112px -144px; }\n.ui-icon-pin-w { background-position: -128px -144px; }\n.ui-icon-pin-s { background-position: -144px -144px; }\n.ui-icon-play { background-position: 0 -160px; }\n.ui-icon-pause { background-position: -16px -160px; }\n.ui-icon-seek-next { background-position: -32px -160px; }\n.ui-icon-seek-prev { background-position: -48px -160px; }\n.ui-icon-seek-end { background-position: -64px -160px; }\n.ui-icon-seek-start { background-position: -80px -160px; }\n/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */\n.ui-icon-seek-first { background-position: -80px -160px; }\n.ui-icon-stop { background-position: -96px -160px; }\n.ui-icon-eject { background-position: -112px -160px; }\n.ui-icon-volume-off { background-position: -128px -160px; }\n.ui-icon-volume-on { background-position: -144px -160px; }\n.ui-icon-power { background-position: 0 -176px; }\n.ui-icon-signal-diag { background-position: -16px -176px; }\n.ui-icon-signal { background-position: -32px -176px; }\n.ui-icon-battery-0 { background-position: -48px -176px; }\n.ui-icon-battery-1 { background-position: -64px -176px; }\n.ui-icon-battery-2 { background-position: -80px -176px; }\n.ui-icon-battery-3 { background-position: -96px -176px; }\n.ui-icon-circle-plus { background-position: 0 -192px; }\n.ui-icon-circle-minus { background-position: -16px -192px; }\n.ui-icon-circle-close { background-position: -32px -192px; }\n.ui-icon-circle-triangle-e { background-position: -48px -192px; }\n.ui-icon-circle-triangle-s { background-position: -64px -192px; }\n.ui-icon-circle-triangle-w { background-position: -80px -192px; }\n.ui-icon-circle-triangle-n { background-position: -96px -192px; }\n.ui-icon-circle-arrow-e { background-position: -112px -192px; }\n.ui-icon-circle-arrow-s { background-position: -128px -192px; }\n.ui-icon-circle-arrow-w { background-position: -144px -192px; }\n.ui-icon-circle-arrow-n { background-position: -160px -192px; }\n.ui-icon-circle-zoomin { background-position: -176px -192px; }\n.ui-icon-circle-zoomout { background-position: -192px -192px; }\n.ui-icon-circle-check { background-position: -208px -192px; }\n.ui-icon-circlesmall-plus { background-position: 0 -208px; }\n.ui-icon-circlesmall-minus { background-position: -16px -208px; }\n.ui-icon-circlesmall-close { background-position: -32px -208px; }\n.ui-icon-squaresmall-plus { background-position: -48px -208px; }\n.ui-icon-squaresmall-minus { background-position: -64px -208px; }\n.ui-icon-squaresmall-close { background-position: -80px -208px; }\n.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }\n.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }\n.ui-icon-grip-solid-vertical { background-position: -32px -224px; }\n.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }\n.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }\n.ui-icon-grip-diagonal-se { background-position: -80px -224px; }\n\n\n/* Misc visuals\n----------------------------------*/\n\n/* Corner radius */\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-left,\n.ui-corner-tl {\n\tborder-top-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-top,\n.ui-corner-right,\n.ui-corner-tr {\n\tborder-top-right-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-left,\n.ui-corner-bl {\n\tborder-bottom-left-radius: 3px;\n}\n.ui-corner-all,\n.ui-corner-bottom,\n.ui-corner-right,\n.ui-corner-br {\n\tborder-bottom-right-radius: 3px;\n}\n\n/* Overlays */\n.ui-widget-overlay {\n\tbackground: #aaaaaa;\n\topacity: .003;\n\tfilter: Alpha(Opacity=.3); /* support: IE8 */\n}\n.ui-widget-shadow {\n\t-webkit-box-shadow: 0px 0px 5px #666666;\n\tbox-shadow: 0px 0px 5px #666666;\n}\n"
  },
  {
    "path": "src/lib/jquery-ui-1.12.1/package.json",
    "content": "{\n\t\"name\": \"jquery-ui\",\n\t\"title\": \"jQuery UI\",\n\t\"description\": \"A curated set of user interface interactions, effects, widgets, and themes built on top of the jQuery JavaScript Library.\",\n\t\"version\": \"1.12.1\",\n\t\"homepage\": \"http://jqueryui.com\",\n\t\"author\": {\n\t\t\"name\": \"jQuery Foundation and other contributors\",\n\t\t\"url\": \"https://github.com/jquery/jquery-ui/blob/1.12.1/AUTHORS.txt\"\n\t},\n\t\"main\": \"ui/widget.js\",\n\t\"maintainers\": [\n\t\t{\n\t\t\t\"name\": \"Scott González\",\n\t\t\t\"email\": \"scott.gonzalez@gmail.com\",\n\t\t\t\"url\": \"http://scottgonzalez.com\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Jörn Zaefferer\",\n\t\t\t\"email\": \"joern.zaefferer@gmail.com\",\n\t\t\t\"url\": \"http://bassistance.de\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Mike Sherov\",\n\t\t\t\"email\": \"mike.sherov@gmail.com\",\n\t\t\t\"url\": \"http://mike.sherov.com\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"TJ VanToll\",\n\t\t\t\"email\": \"tj.vantoll@gmail.com\",\n\t\t\t\"url\": \"http://tjvantoll.com\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Felix Nagel\",\n\t\t\t\"email\": \"info@felixnagel.com\",\n\t\t\t\"url\": \"http://www.felixnagel.com\"\n\t\t},\n\t\t{\n\t\t\t\"name\": \"Alex Schmitz\",\n\t\t\t\"email\": \"arschmitz@gmail.com\",\n\t\t\t\"url\": \"https://github.com/arschmitz\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git://github.com/jquery/jquery-ui.git\"\n\t},\n\t\"bugs\": \"https://bugs.jqueryui.com/\",\n\t\"license\": \"MIT\",\n\t\"scripts\": {\n\t\t\"test\": \"grunt\"\n\t},\n\t\"dependencies\": {},\n\t\"devDependencies\": {\n\t\t\"commitplease\": \"2.3.0\",\n\t\t\"grunt\": \"0.4.5\",\n\t\t\"grunt-bowercopy\": \"1.2.4\",\n\t\t\"grunt-cli\": \"0.1.13\",\n\t\t\"grunt-compare-size\": \"0.4.0\",\n\t\t\"grunt-contrib-concat\": \"0.5.1\",\n\t\t\"grunt-contrib-csslint\": \"0.5.0\",\n\t\t\"grunt-contrib-jshint\": \"0.12.0\",\n\t\t\"grunt-contrib-qunit\": \"1.0.1\",\n\t\t\"grunt-contrib-requirejs\": \"0.4.4\",\n\t\t\"grunt-contrib-uglify\": \"0.11.1\",\n\t\t\"grunt-git-authors\": \"3.1.0\",\n\t\t\"grunt-html\": \"6.0.0\",\n\t\t\"grunt-jscs\": \"2.1.0\",\n\t\t\"load-grunt-tasks\": \"3.4.0\",\n\t\t\"rimraf\": \"2.5.1\",\n\t\t\"testswarm\": \"1.1.0\"\n\t},\n\t\"keywords\": []\n}\n"
  },
  {
    "path": "src/lib/socicon/Read Me.txt",
    "content": "Open *demo.html* to see a list of all the glyphs in your font along with their codes/ligatures.\n\nTo use the generated font in desktop programs, you can install the TTF font. In order to copy the character associated with each icon, refer to the text box at the bottom right corner of each glyph in demo.html. The character inside this text box may be invisible; but it can still be copied. See this guide for more info: https://icomoon.io/#docs/local-fonts\n\nYou won't need any of the files located under the *demo-files* directory when including the generated font in your own projects.\n\nYou can import *selection.json* back to the IcoMoon app using the *Import Icons* button (or via Main Menu → Manage Projects) to retrieve your icon selection.\n"
  },
  {
    "path": "src/lib/socicon/demo-files/demo.css",
    "content": "body {\n  padding: 0;\n  margin: 0;\n  font-family: sans-serif;\n  font-size: 1em;\n  line-height: 1.5;\n  color: #555;\n  background: #fff;\n}\nh1 {\n  font-size: 1.5em;\n  font-weight: normal;\n}\nsmall {\n  font-size: .66666667em;\n}\na {\n  color: #e74c3c;\n  text-decoration: none;\n}\na:hover, a:focus {\n  box-shadow: 0 1px #e74c3c;\n}\n.bshadow0, input {\n  box-shadow: inset 0 -2px #e7e7e7;\n}\ninput:hover {\n  box-shadow: inset 0 -2px #ccc;\n}\ninput, fieldset {\n  font-family: sans-serif;\n  font-size: 1em;\n  margin: 0;\n  padding: 0;\n  border: 0;\n}\ninput {\n  color: inherit;\n  line-height: 1.5;\n  height: 1.5em;\n  padding: .25em 0;\n}\ninput:focus {\n  outline: none;\n  box-shadow: inset 0 -2px #449fdb;\n}\n.glyph {\n  font-size: 16px;\n  width: 15em;\n  padding-bottom: 1em;\n  margin-right: 4em;\n  margin-bottom: 1em;\n  float: left;\n  overflow: hidden;\n}\n.liga {\n  width: 80%;\n  width: calc(100% - 2.5em);\n}\n.talign-right {\n  text-align: right;\n}\n.talign-center {\n  text-align: center;\n}\n.bgc1 {\n  background: #f1f1f1;\n}\n.fgc1 {\n  color: #999;\n}\n.fgc0 {\n  color: #000;\n}\np {\n  margin-top: 1em;\n  margin-bottom: 1em;\n}\n.mvm {\n  margin-top: .75em;\n  margin-bottom: .75em;\n}\n.mtn {\n  margin-top: 0;\n}\n.mtl, .mal {\n  margin-top: 1.5em;\n}\n.mbl, .mal {\n  margin-bottom: 1.5em;\n}\n.mal, .mhl {\n  margin-left: 1.5em;\n  margin-right: 1.5em;\n}\n.mhmm {\n  margin-left: 1em;\n  margin-right: 1em;\n}\n.mls {\n  margin-left: .25em;\n}\n.ptl {\n  padding-top: 1.5em;\n}\n.pbs, .pvs {\n  padding-bottom: .25em;\n}\n.pvs, .pts {\n  padding-top: .25em;\n}\n.unit {\n  float: left;\n}\n.unitRight {\n  float: right;\n}\n.size1of2 {\n  width: 50%;\n}\n.size1of1 {\n  width: 100%;\n}\n.clearfix:before, .clearfix:after {\n  content: \" \";\n  display: table;\n}\n.clearfix:after {\n  clear: both;\n}\n.hidden-true {\n  display: none;\n}\n.textbox0 {\n  width: 3em;\n  background: #f1f1f1;\n  padding: .25em .5em;\n  line-height: 1.5;\n  height: 1.5em;\n}\n#testDrive {\n  display: block;\n  padding-top: 24px;\n  line-height: 1.5;\n}\n.fs0 {\n  font-size: 16px;\n}\n.fs1 {\n  font-size: 32px;\n}\n\n"
  },
  {
    "path": "src/lib/socicon/demo-files/demo.js",
    "content": "if (!('boxShadow' in document.body.style)) {\n    document.body.setAttribute('class', 'noBoxShadow');\n}\n\ndocument.body.addEventListener(\"click\", function(e) {\n    var target = e.target;\n    if (target.tagName === \"INPUT\" &&\n        target.getAttribute('class').indexOf('liga') === -1) {\n        target.select();\n    }\n});\n\n(function() {\n    var fontSize = document.getElementById('fontSize'),\n        testDrive = document.getElementById('testDrive'),\n        testText = document.getElementById('testText');\n    function updateTest() {\n        testDrive.innerHTML = testText.value || String.fromCharCode(160);\n        if (window.icomoonLiga) {\n            window.icomoonLiga(testDrive);\n        }\n    }\n    function updateSize() {\n        testDrive.style.fontSize = fontSize.value + 'px';\n    }\n    fontSize.addEventListener('change', updateSize, false);\n    testText.addEventListener('input', updateTest, false);\n    testText.addEventListener('change', updateTest, false);\n    updateSize();\n}());\n"
  },
  {
    "path": "src/lib/socicon/demo.html",
    "content": "<!doctype html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <title>IcoMoon Demo</title>\n    <meta name=\"description\" content=\"An Icon Font Generated By IcoMoon.io\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n    <link rel=\"stylesheet\" href=\"demo-files/demo.css\">\n    <link rel=\"stylesheet\" href=\"style.css\"></head>\n<body>\n    <div class=\"bgc1 clearfix\">\n        <h1 class=\"mhmm mvm\"><span class=\"fgc1\">Font Name:</span> Socicon <small class=\"fgc1\">(Glyphs:&nbsp;258)</small></h1>\n    </div>\n    <div class=\"clearfix mhl ptl\">\n        <h1 class=\"mvm mtn fgc1\">Grid Size: 16</h1>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-internet\">\n                \n                </span>\n                <span class=\"mls\"> socicon-internet</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e957\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe957;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-moddb\">\n                \n                </span>\n                <span class=\"mls\"> socicon-moddb</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e94b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe94b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-indiedb\">\n                \n                </span>\n                <span class=\"mls\"> socicon-indiedb</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e94c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe94c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-traxsource\">\n                \n                </span>\n                <span class=\"mls\"> socicon-traxsource</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e94d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe94d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-gamefor\">\n                \n                </span>\n                <span class=\"mls\"> socicon-gamefor</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e94e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe94e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-pixiv\">\n                \n                </span>\n                <span class=\"mls\"> socicon-pixiv</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e94f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe94f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-myanimelist\">\n                \n                </span>\n                <span class=\"mls\"> socicon-myanimelist</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e950\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe950;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-blackberry\">\n                \n                </span>\n                <span class=\"mls\"> socicon-blackberry</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e951\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe951;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-wickr\">\n                \n                </span>\n                <span class=\"mls\"> socicon-wickr</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e952\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe952;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-spip\">\n                \n                </span>\n                <span class=\"mls\"> socicon-spip</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e953\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe953;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-napster\">\n                \n                </span>\n                <span class=\"mls\"> socicon-napster</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e954\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe954;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-beatport\">\n                \n                </span>\n                <span class=\"mls\"> socicon-beatport</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e955\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe955;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-hackerone\">\n                \n                </span>\n                <span class=\"mls\"> socicon-hackerone</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e956\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe956;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-hackernews\">\n                \n                </span>\n                <span class=\"mls\"> socicon-hackernews</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e946\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe946;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-smashwords\">\n                \n                </span>\n                <span class=\"mls\"> socicon-smashwords</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e947\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe947;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-kobo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-kobo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e948\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe948;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-bookbub\">\n                \n                </span>\n                <span class=\"mls\"> socicon-bookbub</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e949\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe949;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-mailru\">\n                \n                </span>\n                <span class=\"mls\"> socicon-mailru</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e94a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe94a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-gitlab\">\n                \n                </span>\n                <span class=\"mls\"> socicon-gitlab</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e945\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe945;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-instructables\">\n                \n                </span>\n                <span class=\"mls\"> socicon-instructables</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e944\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe944;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-portfolio\">\n                \n                </span>\n                <span class=\"mls\"> socicon-portfolio</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e943\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe943;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-codered\">\n                \n                </span>\n                <span class=\"mls\"> socicon-codered</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e940\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe940;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-origin\">\n                \n                </span>\n                <span class=\"mls\"> socicon-origin</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e941\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe941;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-nextdoor\">\n                \n                </span>\n                <span class=\"mls\"> socicon-nextdoor</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e942\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe942;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-udemy\">\n                \n                </span>\n                <span class=\"mls\"> socicon-udemy</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e93f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe93f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-livemaster\">\n                \n                </span>\n                <span class=\"mls\"> socicon-livemaster</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e93e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe93e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-crunchbase\">\n                \n                </span>\n                <span class=\"mls\"> socicon-crunchbase</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e93b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe93b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-homefy\">\n                \n                </span>\n                <span class=\"mls\"> socicon-homefy</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e93c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe93c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-calendly\">\n                \n                </span>\n                <span class=\"mls\"> socicon-calendly</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e93d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe93d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-realtor\">\n                \n                </span>\n                <span class=\"mls\"> socicon-realtor</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e90f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe90f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-tidal\">\n                \n                </span>\n                <span class=\"mls\"> socicon-tidal</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e910\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe910;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-qobuz\">\n                \n                </span>\n                <span class=\"mls\"> socicon-qobuz</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e911\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe911;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-natgeo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-natgeo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e912\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe912;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-mastodon\">\n                \n                </span>\n                <span class=\"mls\"> socicon-mastodon</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e913\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe913;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-unsplash\">\n                \n                </span>\n                <span class=\"mls\"> socicon-unsplash</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e914\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe914;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-homeadvisor\">\n                \n                </span>\n                <span class=\"mls\"> socicon-homeadvisor</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e915\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe915;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-angieslist\">\n                \n                </span>\n                <span class=\"mls\"> socicon-angieslist</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e916\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe916;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-codepen\">\n                \n                </span>\n                <span class=\"mls\"> socicon-codepen</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e917\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe917;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-slack\">\n                \n                </span>\n                <span class=\"mls\"> socicon-slack</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e918\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe918;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-openaigym\">\n                \n                </span>\n                <span class=\"mls\"> socicon-openaigym</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e919\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe919;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-logmein\">\n                \n                </span>\n                <span class=\"mls\"> socicon-logmein</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e91a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe91a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-fiverr\">\n                \n                </span>\n                <span class=\"mls\"> socicon-fiverr</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e91b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe91b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-gotomeeting\">\n                \n                </span>\n                <span class=\"mls\"> socicon-gotomeeting</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e91c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe91c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-aliexpress\">\n                \n                </span>\n                <span class=\"mls\"> socicon-aliexpress</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e91d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe91d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-guru\">\n                \n                </span>\n                <span class=\"mls\"> socicon-guru</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e91e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe91e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-appstore\">\n                \n                </span>\n                <span class=\"mls\"> socicon-appstore</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e91f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe91f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-homes\">\n                \n                </span>\n                <span class=\"mls\"> socicon-homes</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e920\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe920;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-zoom\">\n                \n                </span>\n                <span class=\"mls\"> socicon-zoom</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e921\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe921;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-alibaba\">\n                \n                </span>\n                <span class=\"mls\"> socicon-alibaba</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e922\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe922;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-craigslist\">\n                \n                </span>\n                <span class=\"mls\"> socicon-craigslist</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e923\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe923;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-wix\">\n                \n                </span>\n                <span class=\"mls\"> socicon-wix</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e924\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe924;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-redfin\">\n                \n                </span>\n                <span class=\"mls\"> socicon-redfin</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e925\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe925;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-googlecalendar\">\n                \n                </span>\n                <span class=\"mls\"> socicon-googlecalendar</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e926\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe926;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-shopify\">\n                \n                </span>\n                <span class=\"mls\"> socicon-shopify</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e927\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe927;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-freelancer\">\n                \n                </span>\n                <span class=\"mls\"> socicon-freelancer</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e928\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe928;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-seedrs\">\n                \n                </span>\n                <span class=\"mls\"> socicon-seedrs</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e929\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe929;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-bing\">\n                \n                </span>\n                <span class=\"mls\"> socicon-bing</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e92a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe92a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-doodle\">\n                \n                </span>\n                <span class=\"mls\"> socicon-doodle</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e92b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe92b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-bonanza\">\n                \n                </span>\n                <span class=\"mls\"> socicon-bonanza</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e92c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe92c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-squarespace\">\n                \n                </span>\n                <span class=\"mls\"> socicon-squarespace</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e92d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe92d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-toptal\">\n                \n                </span>\n                <span class=\"mls\"> socicon-toptal</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e92e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe92e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-gust\">\n                \n                </span>\n                <span class=\"mls\"> socicon-gust</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e92f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe92f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-ask\">\n                \n                </span>\n                <span class=\"mls\"> socicon-ask</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e930\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe930;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-trulia\">\n                \n                </span>\n                <span class=\"mls\"> socicon-trulia</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e931\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe931;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-loomly\">\n                \n                </span>\n                <span class=\"mls\"> socicon-loomly</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e932\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe932;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-ghost\">\n                \n                </span>\n                <span class=\"mls\"> socicon-ghost</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e933\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe933;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-upwork\">\n                \n                </span>\n                <span class=\"mls\"> socicon-upwork</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e934\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe934;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-fundable\">\n                \n                </span>\n                <span class=\"mls\"> socicon-fundable</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e935\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe935;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-booking\">\n                \n                </span>\n                <span class=\"mls\"> socicon-booking</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e936\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe936;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-googlemaps\">\n                \n                </span>\n                <span class=\"mls\"> socicon-googlemaps</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e937\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe937;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-zillow\">\n                \n                </span>\n                <span class=\"mls\"> socicon-zillow</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e938\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe938;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-niconico\">\n                \n                </span>\n                <span class=\"mls\"> socicon-niconico</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e939\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe939;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-toneden\">\n                \n                </span>\n                <span class=\"mls\"> socicon-toneden</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e93a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe93a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-augment\">\n                \n                </span>\n                <span class=\"mls\"> socicon-augment</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e908\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe908;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-bitbucket\">\n                \n                </span>\n                <span class=\"mls\"> socicon-bitbucket</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e909\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe909;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-fyuse\">\n                \n                </span>\n                <span class=\"mls\"> socicon-fyuse</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e90a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe90a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-yt-gaming\">\n                \n                </span>\n                <span class=\"mls\"> socicon-yt-gaming</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e90b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe90b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-sketchfab\">\n                \n                </span>\n                <span class=\"mls\"> socicon-sketchfab</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e90c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe90c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-mobcrush\">\n                \n                </span>\n                <span class=\"mls\"> socicon-mobcrush</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e90d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe90d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-microsoft\">\n                \n                </span>\n                <span class=\"mls\"> socicon-microsoft</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e90e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe90e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-pandora\">\n                \n                </span>\n                <span class=\"mls\"> socicon-pandora</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e907\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe907;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-messenger\">\n                \n                </span>\n                <span class=\"mls\"> socicon-messenger</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e906\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe906;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-gamewisp\">\n                \n                </span>\n                <span class=\"mls\"> socicon-gamewisp</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e905\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe905;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-bloglovin\">\n                \n                </span>\n                <span class=\"mls\"> socicon-bloglovin</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e904\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe904;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-tunein\">\n                \n                </span>\n                <span class=\"mls\"> socicon-tunein</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e903\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe903;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-gamejolt\">\n                \n                </span>\n                <span class=\"mls\"> socicon-gamejolt</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e901\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe901;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-trello\">\n                \n                </span>\n                <span class=\"mls\"> socicon-trello</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e902\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe902;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-spreadshirt\">\n                \n                </span>\n                <span class=\"mls\"> socicon-spreadshirt</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e900\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe900;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-500px\">\n                \n                </span>\n                <span class=\"mls\"> socicon-500px</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e000\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe000;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-8tracks\">\n                \n                </span>\n                <span class=\"mls\"> socicon-8tracks</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e001\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe001;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-airbnb\">\n                \n                </span>\n                <span class=\"mls\"> socicon-airbnb</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e002\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe002;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-alliance\">\n                \n                </span>\n                <span class=\"mls\"> socicon-alliance</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e003\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe003;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-amazon\">\n                \n                </span>\n                <span class=\"mls\"> socicon-amazon</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e004\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe004;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-amplement\">\n                \n                </span>\n                <span class=\"mls\"> socicon-amplement</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e005\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe005;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-android\">\n                \n                </span>\n                <span class=\"mls\"> socicon-android</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e006\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe006;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-angellist\">\n                \n                </span>\n                <span class=\"mls\"> socicon-angellist</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e007\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe007;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-apple\">\n                \n                </span>\n                <span class=\"mls\"> socicon-apple</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e008\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe008;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-appnet\">\n                \n                </span>\n                <span class=\"mls\"> socicon-appnet</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e009\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe009;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-baidu\">\n                \n                </span>\n                <span class=\"mls\"> socicon-baidu</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e00a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe00a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-bandcamp\">\n                \n                </span>\n                <span class=\"mls\"> socicon-bandcamp</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e00b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe00b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-battlenet\">\n                \n                </span>\n                <span class=\"mls\"> socicon-battlenet</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e00c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe00c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-mixer\">\n                \n                </span>\n                <span class=\"mls\"> socicon-mixer</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e00d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe00d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-bebee\">\n                \n                </span>\n                <span class=\"mls\"> socicon-bebee</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e00e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe00e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-bebo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-bebo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e00f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe00f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-behance\">\n                \n                </span>\n                <span class=\"mls\"> socicon-behance</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e010\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe010;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-blizzard\">\n                \n                </span>\n                <span class=\"mls\"> socicon-blizzard</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e011\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe011;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-blogger\">\n                \n                </span>\n                <span class=\"mls\"> socicon-blogger</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e012\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe012;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-buffer\">\n                \n                </span>\n                <span class=\"mls\"> socicon-buffer</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e013\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe013;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-chrome\">\n                \n                </span>\n                <span class=\"mls\"> socicon-chrome</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e014\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe014;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-coderwall\">\n                \n                </span>\n                <span class=\"mls\"> socicon-coderwall</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e015\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe015;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-curse\">\n                \n                </span>\n                <span class=\"mls\"> socicon-curse</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e016\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe016;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-dailymotion\">\n                \n                </span>\n                <span class=\"mls\"> socicon-dailymotion</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e017\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe017;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-deezer\">\n                \n                </span>\n                <span class=\"mls\"> socicon-deezer</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e018\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe018;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-delicious\">\n                \n                </span>\n                <span class=\"mls\"> socicon-delicious</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e019\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe019;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-deviantart\">\n                \n                </span>\n                <span class=\"mls\"> socicon-deviantart</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e01a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe01a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-diablo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-diablo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e01b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe01b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-digg\">\n                \n                </span>\n                <span class=\"mls\"> socicon-digg</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e01c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe01c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-discord\">\n                \n                </span>\n                <span class=\"mls\"> socicon-discord</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e01d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe01d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-disqus\">\n                \n                </span>\n                <span class=\"mls\"> socicon-disqus</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e01e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe01e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-douban\">\n                \n                </span>\n                <span class=\"mls\"> socicon-douban</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e01f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe01f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-draugiem\">\n                \n                </span>\n                <span class=\"mls\"> socicon-draugiem</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e020\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe020;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-dribbble\">\n                \n                </span>\n                <span class=\"mls\"> socicon-dribbble</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e021\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe021;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-drupal\">\n                \n                </span>\n                <span class=\"mls\"> socicon-drupal</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e022\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe022;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-ebay\">\n                \n                </span>\n                <span class=\"mls\"> socicon-ebay</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e023\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe023;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-ello\">\n                \n                </span>\n                <span class=\"mls\"> socicon-ello</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e024\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe024;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-endomodo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-endomodo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e025\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe025;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-envato\">\n                \n                </span>\n                <span class=\"mls\"> socicon-envato</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e026\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe026;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-etsy\">\n                \n                </span>\n                <span class=\"mls\"> socicon-etsy</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e027\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe027;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-facebook\">\n                \n                </span>\n                <span class=\"mls\"> socicon-facebook</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e028\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe028;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-feedburner\">\n                \n                </span>\n                <span class=\"mls\"> socicon-feedburner</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e029\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe029;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-filmweb\">\n                \n                </span>\n                <span class=\"mls\"> socicon-filmweb</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e02a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe02a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-firefox\">\n                \n                </span>\n                <span class=\"mls\"> socicon-firefox</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e02b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe02b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-flattr\">\n                \n                </span>\n                <span class=\"mls\"> socicon-flattr</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e02c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe02c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-flickr\">\n                \n                </span>\n                <span class=\"mls\"> socicon-flickr</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e02d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe02d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-formulr\">\n                \n                </span>\n                <span class=\"mls\"> socicon-formulr</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e02e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe02e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-forrst\">\n                \n                </span>\n                <span class=\"mls\"> socicon-forrst</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e02f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe02f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-foursquare\">\n                \n                </span>\n                <span class=\"mls\"> socicon-foursquare</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e030\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe030;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-friendfeed\">\n                \n                </span>\n                <span class=\"mls\"> socicon-friendfeed</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e031\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe031;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-github\">\n                \n                </span>\n                <span class=\"mls\"> socicon-github</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e032\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe032;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-goodreads\">\n                \n                </span>\n                <span class=\"mls\"> socicon-goodreads</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e033\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe033;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-google\">\n                \n                </span>\n                <span class=\"mls\"> socicon-google</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e034\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe034;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-googlescholar\">\n                \n                </span>\n                <span class=\"mls\"> socicon-googlescholar</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e035\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe035;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-googlegroups\">\n                \n                </span>\n                <span class=\"mls\"> socicon-googlegroups</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e036\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe036;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-googlephotos\">\n                \n                </span>\n                <span class=\"mls\"> socicon-googlephotos</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e037\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe037;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-googleplus\">\n                \n                </span>\n                <span class=\"mls\"> socicon-googleplus</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e038\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe038;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-grooveshark\">\n                \n                </span>\n                <span class=\"mls\"> socicon-grooveshark</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e039\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe039;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-hackerrank\">\n                \n                </span>\n                <span class=\"mls\"> socicon-hackerrank</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e03a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe03a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-hearthstone\">\n                \n                </span>\n                <span class=\"mls\"> socicon-hearthstone</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e03b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe03b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-hellocoton\">\n                \n                </span>\n                <span class=\"mls\"> socicon-hellocoton</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e03c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe03c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-heroes\">\n                \n                </span>\n                <span class=\"mls\"> socicon-heroes</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e03d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe03d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-smashcast\">\n                \n                </span>\n                <span class=\"mls\"> socicon-smashcast</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e03e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe03e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-horde\">\n                \n                </span>\n                <span class=\"mls\"> socicon-horde</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e03f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe03f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-houzz\">\n                \n                </span>\n                <span class=\"mls\"> socicon-houzz</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e040\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe040;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-icq\">\n                \n                </span>\n                <span class=\"mls\"> socicon-icq</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e041\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe041;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-identica\">\n                \n                </span>\n                <span class=\"mls\"> socicon-identica</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e042\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe042;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-imdb\">\n                \n                </span>\n                <span class=\"mls\"> socicon-imdb</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e043\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe043;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-instagram\">\n                \n                </span>\n                <span class=\"mls\"> socicon-instagram</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e044\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe044;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-issuu\">\n                \n                </span>\n                <span class=\"mls\"> socicon-issuu</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e045\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe045;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-istock\">\n                \n                </span>\n                <span class=\"mls\"> socicon-istock</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e046\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe046;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-itunes\">\n                \n                </span>\n                <span class=\"mls\"> socicon-itunes</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e047\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe047;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-keybase\">\n                \n                </span>\n                <span class=\"mls\"> socicon-keybase</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e048\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe048;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-lanyrd\">\n                \n                </span>\n                <span class=\"mls\"> socicon-lanyrd</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e049\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe049;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-lastfm\">\n                \n                </span>\n                <span class=\"mls\"> socicon-lastfm</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e04a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe04a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-line\">\n                \n                </span>\n                <span class=\"mls\"> socicon-line</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e04b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe04b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-linkedin\">\n                \n                </span>\n                <span class=\"mls\"> socicon-linkedin</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e04c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe04c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-livejournal\">\n                \n                </span>\n                <span class=\"mls\"> socicon-livejournal</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e04d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe04d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-lyft\">\n                \n                </span>\n                <span class=\"mls\"> socicon-lyft</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e04e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe04e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-macos\">\n                \n                </span>\n                <span class=\"mls\"> socicon-macos</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e04f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe04f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-mail\">\n                \n                </span>\n                <span class=\"mls\"> socicon-mail</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e050\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe050;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-medium\">\n                \n                </span>\n                <span class=\"mls\"> socicon-medium</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e051\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe051;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-meetup\">\n                \n                </span>\n                <span class=\"mls\"> socicon-meetup</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e052\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe052;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-mixcloud\">\n                \n                </span>\n                <span class=\"mls\"> socicon-mixcloud</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e053\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe053;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-modelmayhem\">\n                \n                </span>\n                <span class=\"mls\"> socicon-modelmayhem</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e054\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe054;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-mumble\">\n                \n                </span>\n                <span class=\"mls\"> socicon-mumble</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e055\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe055;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-myspace\">\n                \n                </span>\n                <span class=\"mls\"> socicon-myspace</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e056\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe056;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-newsvine\">\n                \n                </span>\n                <span class=\"mls\"> socicon-newsvine</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e057\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe057;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-nintendo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-nintendo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e058\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe058;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-npm\">\n                \n                </span>\n                <span class=\"mls\"> socicon-npm</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e059\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe059;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-odnoklassniki\">\n                \n                </span>\n                <span class=\"mls\"> socicon-odnoklassniki</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e05a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe05a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-openid\">\n                \n                </span>\n                <span class=\"mls\"> socicon-openid</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e05b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe05b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-opera\">\n                \n                </span>\n                <span class=\"mls\"> socicon-opera</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e05c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe05c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-outlook\">\n                \n                </span>\n                <span class=\"mls\"> socicon-outlook</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e05d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe05d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-overwatch\">\n                \n                </span>\n                <span class=\"mls\"> socicon-overwatch</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e05e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe05e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-patreon\">\n                \n                </span>\n                <span class=\"mls\"> socicon-patreon</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e05f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe05f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-paypal\">\n                \n                </span>\n                <span class=\"mls\"> socicon-paypal</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e060\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe060;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-periscope\">\n                \n                </span>\n                <span class=\"mls\"> socicon-periscope</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e061\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe061;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-persona\">\n                \n                </span>\n                <span class=\"mls\"> socicon-persona</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e062\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe062;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-pinterest\">\n                \n                </span>\n                <span class=\"mls\"> socicon-pinterest</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e063\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe063;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-play\">\n                \n                </span>\n                <span class=\"mls\"> socicon-play</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e064\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe064;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-player\">\n                \n                </span>\n                <span class=\"mls\"> socicon-player</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e065\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe065;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-playstation\">\n                \n                </span>\n                <span class=\"mls\"> socicon-playstation</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e066\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe066;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-pocket\">\n                \n                </span>\n                <span class=\"mls\"> socicon-pocket</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e067\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe067;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-qq\">\n                \n                </span>\n                <span class=\"mls\"> socicon-qq</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e068\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe068;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-quora\">\n                \n                </span>\n                <span class=\"mls\"> socicon-quora</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e069\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe069;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-raidcall\">\n                \n                </span>\n                <span class=\"mls\"> socicon-raidcall</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e06a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe06a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-ravelry\">\n                \n                </span>\n                <span class=\"mls\"> socicon-ravelry</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e06b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe06b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-reddit\">\n                \n                </span>\n                <span class=\"mls\"> socicon-reddit</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e06c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe06c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-renren\">\n                \n                </span>\n                <span class=\"mls\"> socicon-renren</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e06d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe06d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-researchgate\">\n                \n                </span>\n                <span class=\"mls\"> socicon-researchgate</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e06e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe06e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-residentadvisor\">\n                \n                </span>\n                <span class=\"mls\"> socicon-residentadvisor</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e06f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe06f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-reverbnation\">\n                \n                </span>\n                <span class=\"mls\"> socicon-reverbnation</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e070\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe070;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-rss\">\n                \n                </span>\n                <span class=\"mls\"> socicon-rss</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e071\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe071;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-sharethis\">\n                \n                </span>\n                <span class=\"mls\"> socicon-sharethis</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e072\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe072;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-skype\">\n                \n                </span>\n                <span class=\"mls\"> socicon-skype</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e073\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe073;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-slideshare\">\n                \n                </span>\n                <span class=\"mls\"> socicon-slideshare</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e074\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe074;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-smugmug\">\n                \n                </span>\n                <span class=\"mls\"> socicon-smugmug</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e075\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe075;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-snapchat\">\n                \n                </span>\n                <span class=\"mls\"> socicon-snapchat</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e076\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe076;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-songkick\">\n                \n                </span>\n                <span class=\"mls\"> socicon-songkick</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e077\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe077;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-soundcloud\">\n                \n                </span>\n                <span class=\"mls\"> socicon-soundcloud</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e078\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe078;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-spotify\">\n                \n                </span>\n                <span class=\"mls\"> socicon-spotify</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e079\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe079;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-stackexchange\">\n                \n                </span>\n                <span class=\"mls\"> socicon-stackexchange</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e07a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe07a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-stackoverflow\">\n                \n                </span>\n                <span class=\"mls\"> socicon-stackoverflow</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e07b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe07b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-starcraft\">\n                \n                </span>\n                <span class=\"mls\"> socicon-starcraft</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e07c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe07c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-stayfriends\">\n                \n                </span>\n                <span class=\"mls\"> socicon-stayfriends</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e07d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe07d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-steam\">\n                \n                </span>\n                <span class=\"mls\"> socicon-steam</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e07e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe07e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-storehouse\">\n                \n                </span>\n                <span class=\"mls\"> socicon-storehouse</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e07f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe07f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-strava\">\n                \n                </span>\n                <span class=\"mls\"> socicon-strava</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e080\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe080;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-streamjar\">\n                \n                </span>\n                <span class=\"mls\"> socicon-streamjar</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e081\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe081;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-stumbleupon\">\n                \n                </span>\n                <span class=\"mls\"> socicon-stumbleupon</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e082\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe082;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-swarm\">\n                \n                </span>\n                <span class=\"mls\"> socicon-swarm</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e083\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe083;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-teamspeak\">\n                \n                </span>\n                <span class=\"mls\"> socicon-teamspeak</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e084\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe084;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-teamviewer\">\n                \n                </span>\n                <span class=\"mls\"> socicon-teamviewer</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e085\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe085;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-technorati\">\n                \n                </span>\n                <span class=\"mls\"> socicon-technorati</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e086\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe086;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-telegram\">\n                \n                </span>\n                <span class=\"mls\"> socicon-telegram</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e087\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe087;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-tripadvisor\">\n                \n                </span>\n                <span class=\"mls\"> socicon-tripadvisor</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e088\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe088;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-tripit\">\n                \n                </span>\n                <span class=\"mls\"> socicon-tripit</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e089\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe089;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-triplej\">\n                \n                </span>\n                <span class=\"mls\"> socicon-triplej</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e08a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe08a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-tumblr\">\n                \n                </span>\n                <span class=\"mls\"> socicon-tumblr</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e08b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe08b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-twitch\">\n                \n                </span>\n                <span class=\"mls\"> socicon-twitch</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e08c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe08c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-twitter\">\n                \n                </span>\n                <span class=\"mls\"> socicon-twitter</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e08d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe08d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-uber\">\n                \n                </span>\n                <span class=\"mls\"> socicon-uber</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e08e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe08e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-ventrilo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-ventrilo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e08f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe08f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-viadeo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-viadeo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e090\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe090;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-viber\">\n                \n                </span>\n                <span class=\"mls\"> socicon-viber</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e091\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe091;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-viewbug\">\n                \n                </span>\n                <span class=\"mls\"> socicon-viewbug</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e092\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe092;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-vimeo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-vimeo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e093\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe093;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-vine\">\n                \n                </span>\n                <span class=\"mls\"> socicon-vine</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e094\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe094;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-vkontakte\">\n                \n                </span>\n                <span class=\"mls\"> socicon-vkontakte</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e095\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe095;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-warcraft\">\n                \n                </span>\n                <span class=\"mls\"> socicon-warcraft</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e096\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe096;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-wechat\">\n                \n                </span>\n                <span class=\"mls\"> socicon-wechat</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e097\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe097;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-weibo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-weibo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e098\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe098;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-whatsapp\">\n                \n                </span>\n                <span class=\"mls\"> socicon-whatsapp</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e099\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe099;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-wikipedia\">\n                \n                </span>\n                <span class=\"mls\"> socicon-wikipedia</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e09a\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe09a;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-windows\">\n                \n                </span>\n                <span class=\"mls\"> socicon-windows</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e09b\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe09b;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-wordpress\">\n                \n                </span>\n                <span class=\"mls\"> socicon-wordpress</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e09c\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe09c;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-wykop\">\n                \n                </span>\n                <span class=\"mls\"> socicon-wykop</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e09d\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe09d;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-xbox\">\n                \n                </span>\n                <span class=\"mls\"> socicon-xbox</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e09e\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe09e;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-xing\">\n                \n                </span>\n                <span class=\"mls\"> socicon-xing</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e09f\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe09f;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-yahoo\">\n                \n                </span>\n                <span class=\"mls\"> socicon-yahoo</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a0\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a0;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-yammer\">\n                \n                </span>\n                <span class=\"mls\"> socicon-yammer</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a1\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a1;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-yandex\">\n                \n                </span>\n                <span class=\"mls\"> socicon-yandex</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a2\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a2;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-yelp\">\n                \n                </span>\n                <span class=\"mls\"> socicon-yelp</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a3\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a3;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-younow\">\n                \n                </span>\n                <span class=\"mls\"> socicon-younow</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a4\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a4;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-youtube\">\n                \n                </span>\n                <span class=\"mls\"> socicon-youtube</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a5\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a5;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-zapier\">\n                \n                </span>\n                <span class=\"mls\"> socicon-zapier</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a6\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a6;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-zerply\">\n                \n                </span>\n                <span class=\"mls\"> socicon-zerply</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a7\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a7;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-zomato\">\n                \n                </span>\n                <span class=\"mls\"> socicon-zomato</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a8\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a8;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n        <div class=\"glyph fs1\">\n            <div class=\"clearfix bshadow0 pbs\">\n                <span class=\"socicon-zynga\">\n                \n                </span>\n                <span class=\"mls\"> socicon-zynga</span>\n            </div>\n            <fieldset class=\"fs0 size1of1 clearfix hidden-false\">\n                <input type=\"text\" readonly value=\"e0a9\" class=\"unit size1of2\" />\n                <input type=\"text\" maxlength=\"1\" readonly value=\"&#xe0a9;\" class=\"unitRight size1of2 talign-right\" />\n            </fieldset>\n            <div class=\"fs0 bshadow0 clearfix hidden-true\">\n                <span class=\"unit pvs fgc1\">liga: </span>\n                <input type=\"text\" readonly value=\"\" class=\"liga unitRight\" />\n            </div>\n        </div>\n    </div>\n\n    <!--[if gt IE 8]><!-->\n    <div class=\"mhl clearfix mbl\">\n        <h1>Font Test Drive</h1>\n        <label>\n            Font Size: <input id=\"fontSize\" type=\"number\" class=\"textbox0 mbm\"\n            min=\"8\" value=\"48\" />\n            px\n        </label>\n        <input id=\"testText\" type=\"text\" class=\"phl size1of1 mvl\"\n        placeholder=\"Type some text to test...\" value=\"\"/>\n        <div id=\"testDrive\" class=\"socicon-\">&nbsp;\n        </div>\n    </div>\n    <!--<![endif]-->\n    <div class=\"bgc1 clearfix\">\n        <p class=\"mhl\">Generated by <a href=\"https://icomoon.io/app\">IcoMoon</a></p>\n    </div>\n\n    <script src=\"demo-files/demo.js\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "src/lib/socicon/selection.json",
    "content": "{\n  \"IcoMoonType\": \"selection\",\n  \"icons\": [\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-282.767 0-512 229.233-512 512s229.233 512 512 512 512-229.233 512-512c-0.379-282.614-229.386-511.621-512-512zM862.003 188.457c-36.188 15.104-73.503 27.331-111.606 36.588-22.804-65.905-61.164-125.348-111.831-173.271 85.77 23.839 163.164 71.178 223.437 136.684v0zM529.254 286.945c67.041-0.85 133.847-8.1 199.506-21.627 23.235 74.527 35.482 152.054 36.362 230.113h-235.868v-208.486zM529.254 252.436v-216.31c77.322 9.892 144.968 84.91 188.006 196.291-61.911 12.452-124.856 19.159-188.006 20.019zM494.746 36.127v216.31c-63.14-0.778-126.075-7.404-188.006-19.794 43.028-111.831 110.684-186.624 188.006-196.516zM494.746 286.945v207.104h-235.868c0.881-78.060 13.128-155.576 36.362-230.113 65.618 13.998 132.424 21.709 199.506 23.009zM224.133 494.049h-188.692c3.543-101.581 39.598-199.342 102.861-278.897 39.946 18.074 81.367 32.696 123.802 43.725-24.023 76.37-36.813 155.822-37.97 235.868v-0.696zM224.133 528.568c1.085 80.282 13.875 159.969 37.97 236.554-42.383 10.424-83.794 24.433-123.802 41.882-63.263-79.555-99.318-177.316-102.861-278.897l188.692 0.461zM258.877 528.568h235.868v207.104c-67.041 0.85-133.847 8.1-199.506 21.627-23.030-73.871-35.277-150.671-36.362-228.045v-0.686zM494.746 771.564v216.31c-77.322-9.892-144.968-84.91-188.006-196.291 61.911-12.462 124.856-19.159 188.006-20.019zM529.254 987.873v-216.31c63.14 0.778 126.075 7.404 188.006 19.794-43.028 111.831-110.684 186.624-188.006 196.516zM529.254 737.055v-207.104h235.868c-0.881 78.060-13.128 155.576-36.362 230.113-65.618-13.998-132.424-21.709-199.506-23.009zM799.867 529.951h188.692c-3.543 101.581-39.598 199.342-102.861 278.897-39.946-18.074-81.367-32.707-123.802-43.725 24.023-76.37 36.813-155.822 37.97-235.868v0.696zM799.867 495.432c-1.044-80.435-13.834-160.287-37.97-237.015 42.383-10.424 83.794-24.433 123.802-41.882 63.263 79.555 99.318 177.316 102.861 278.897h-188.692zM385.434 51.773c-50.688 47.77-89.129 107.049-112.067 172.81-38.103-9.257-75.418-21.484-111.606-36.588 60.406-65.372 137.882-112.558 223.672-136.223zM161.772 834.161c36.188-15.104 73.503-27.341 111.606-36.588 22.671 66.427 61.133 126.362 112.067 174.653-85.852-23.798-163.328-71.137-223.672-136.684v-1.382zM638.566 972.227c50.719-47.841 89.16-107.192 112.067-173.046 38.103 9.247 75.418 21.484 111.606 36.588-60.375 65.464-137.851 112.732-223.672 136.458z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"internet\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 327,\n        \"id\": 258,\n        \"name\": \"internet\",\n        \"prevSize\": 32,\n        \"code\": 59735\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 0\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M801.874 235.264c-6.697-54.589-27.474-103.322-63.037-144.876-38.502-44.995-83.476-80.968-144.599-90.388-16.804 0-33.597 0-50.401 0-5.417 6.39-4.198 14.162-4.209 21.545-0.102 67.052 0.113 134.103-0.123 201.155-0.154 40.94 4.792 35.226-36.116 35.625-21.412 0.215-21.586-0.113-21.606-21.074-0.041-71.895 0.031-143.8-0.072-215.706 0-7.383 1.208-15.155-4.198-21.545-15.923 0-31.836 0-47.759 0-10.875 3.236-22.344 3-33.239 7.26-26.726 10.445-49.92 26.501-72.161 43.909-35.799 28.017-61.737 64.102-80.507 105.196-14.213 31.109-21.043 64.256-23.665 98.304 0 15.923 0 31.836 0 47.749 3.195 6.216 1.208 12.995 1.935 19.476 7.629 67.932 37.376 125.297 87.265 170.639 19.405 17.633 24.3 35.195 24.105 59.484-0.942 121.836-0.666 243.702-0.297 365.548 0.113 39.301 13.158 72.325 48.517 94.239 14.285 8.847 30.167 8.55 45.394 12.186 57.477 0 114.954 0 172.431 0 3.482-2.601 7.741-1.659 11.52-1.946 27.597-2.14 47.841-16.159 63.662-37.96 14.725-20.275 18.668-43.704 18.719-67.748 0.297-128.911 0.236-257.823-0.020-386.734-0.020-11.971 3.656-20.316 12.902-28.508 38.298-33.976 66.806-74.813 83.343-123.72 8.243-24.402 11.684-49.551 14.162-74.957 0-15.913 0-31.826 0-47.749-3.297-6.164-1.157-12.943-1.946-19.405zM629.555 467.63c-3.226 2.14-7.363 3.205-9.277 7.096 0.020 13.353 0.041 26.685 0.061 40.038 0.143 75.069 0.328 150.149 0.42 225.219 0.061 60.518 0.020 121.027 0 181.545-0.010 22.149-10.803 33.331-33.198 33.434-49.459 0.215-98.939 0.215-148.398 0-22.344-0.102-33.26-11.366-33.27-33.434-0.020-132.065-0.010-264.131 0.010-396.186 0-3.533 0.266-7.045 0.41-10.568-0.143-13.302-0.287-26.604-0.44-39.895-55.439-32.43-93.409-78.418-109.711-141.261-28.692-110.592 34.427-229.693 141.558-264.489 0 4.127 0 7.823 0 11.52 0 62.3 0 124.6 0 186.9 0 25.139 3.625 28.692 29.225 28.703 31.365 0 62.73 0.061 94.116-0.031 18.78-0.051 22.559-3.84 22.559-22.262 0.020-64.952 0.236-129.905-0.215-194.847-0.082-11.008 3-11.336 11.684-7.465 82.381 36.772 131.441 99.451 138.568 189.481 6.984 88.289-29.952 157.512-104.1 206.5z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"moddb\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 318,\n        \"id\": 257,\n        \"name\": \"moddb\",\n        \"prevSize\": 32,\n        \"code\": 59723\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 1\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1020.006 406.856c-6.595-33.065-20.859-64.737-42.936-90.266-21.709-26.348-53.729-41.923-85.576-49.459-54.415-13.629-111.882-4.485-161.239 19.395-1.26-2.181-2.345-4.219-2.857-6.113-1.7-6.175-18.575 0.87-33.116 8.264-17.019-9.656-38.42-43.878-156.723-46.694-127.212-3.031-269.578 90.88-324.096 142.356-54.518 51.507-24.238 90.88 9.083 93.901 33.3 3.041 124.17-51.497 172.646-33.311 47.708 17.889 77.752 59.392 81.572 164.69-31.56-4.854-63.744-9.011-96.799-10.107-67.963-2.98-137.411 7.864-201.687 30.249-64.44 22.559-126.126 55.583-178.278 103.68l43.213 44.943c85.903-82.79 212.378-130.437 335.524-129.526 33.608-0.102 67.543 3.523 102.021 7.813 14.019 92.15 65.198 166.144 141.619 100.25 26.419-22.774 50.391-53.545 71.096-87.511 25.549-1.536 50.985-4.26 76.104-8.182 63.611-10.271 134.267-22.845 187.218-69.192 53.924-44.319 77.22-119.101 63.212-185.18zM937.728 569.016c-46.408 38.236-109.517 48.138-172.964 56.136-16.425 1.997-32.829 3.451-49.244 4.403 35.092-69.56 56.279-144.62 56.279-190.689 0-43.1-22.057-83.395-42.045-111.124 10.342-13.046 9.349-23.071 5.888-31.15 47.483-20.808 102.349-27.515 151.48-13.158 61.45 13.271 100.485 67.666 109.844 127.437 10.199 59.535-12.165 121.958-59.238 158.147z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"indiedb\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 319,\n        \"id\": 256,\n        \"name\": \"indiedb\",\n        \"prevSize\": 32,\n        \"code\": 59724\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 2\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M984.207 466.842c2.867-19.487 3.963-38.574 4.352-67.707 3.092-224.788-192.195-397.629-409.948-398.879-53.289-0.348-79.944-0.348-133.253 0-217.825 1.249-412.498 171.96-409.938 398.879 0.307 28.539 1.26 48.64 3.953 68.26-27.945 40.858-42.322 95.273-36.229 153.262l1.802 17.234c11.971 114.033 98.355 198.461 192.891 188.518l5.018-0.532c64.543 121.037 178.739 197.612 309.053 198.103v0.020h0.297c10.588 0 19.169-8.571 19.169-19.18v-68.188c0-10.557-8.581-19.108-19.118-19.159v-0.143c-132.424 0-251.781-161.925-251.781-324.874 0-161.044 119.357-325.693 251.249-325.693v0.020h0.266c10.588 0 19.159-8.571 19.159-19.19v-67.348c0-10.486-8.438-19.005-18.893-19.159v-0.174c-142.131 0.379-265.124 91.259-325.489 231.639l-34.161 3.604c-1.772 0.195-3.471 0.625-5.222 0.881-7.885-170.312 149.033-293.222 317.164-294.154 42.998-0.266 64.481-0.266 107.479 0 167.936 0.932 312.678 124.211 307.261 294.595-2.642-0.43-5.212-1.044-7.895-1.321l-54.733-5.704c-0.174-0.031-0.338-0.082-0.522-0.123-11.878-1.249-22.538 7.352-23.777 19.231l-40.684 387.277c-1.249 11.868 7.352 22.528 19.231 23.736 0.205 0.031 0.348-0.020 0.543 0v0.082l54.712 5.745c94.525 9.943 180.89-74.486 192.87-188.529l1.823-17.234c6.124-58.245-8.428-112.876-36.649-153.795z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"traxsource\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 320,\n        \"id\": 255,\n        \"name\": \"traxsource\",\n        \"prevSize\": 32,\n        \"code\": 59725\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 3\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M262.093 0c-153.436 0-234.455 91.382-234.455 251.709v520.612c0 160.317 79.309 249.969 234.455 251.679 153.426 0 234.455-91.361 234.455-251.679v-282.726c0-20.695-15.524-36.219-36.209-36.219h-148.275c-18.944 0-34.458 15.524-39.629 37.929v70.707c0 20.695 15.524 36.168 36.168 36.168 20.695 0 36.209 15.514 36.209 36.209v148.265c0 72.376-31.037 98.253-81.009 98.253-49.981 0-81.019-27.566-81.019-98.253v-539.566c0-72.428 32.748-82.77 82.77-82.77 49.981 0 81.009 12.083 81.009 82.77v70.666c0 20.695 15.524 36.209 36.168 36.209h77.599c20.695 0 36.209-15.524 36.209-36.209v-62.054c0.010-160.338-79.299-251.699-234.445-251.699z\",\n          \"M942.92 8.028h-320.635c-22.436 0-39.68 18.964-39.68 41.37v905.062c0 29.317 24.156 53.443 53.443 53.443h48.282c29.317 0 53.443-24.115 53.443-53.443v-305.121c0-29.338 24.136-53.443 53.443-53.443h93.102c29.297 0 53.443-24.156 53.443-53.494v-34.458c0-29.286-24.136-53.443-53.443-53.443h-93.102c-30.996 0-55.163-25.866-51.702-58.614v-193.055c0-29.307 24.156-53.443 53.443-53.443h149.975c29.276 0 53.443-24.136 53.443-53.443v-34.478c-0.010-29.307-24.177-53.443-53.453-53.443z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"gamefor\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 321,\n        \"id\": 254,\n        \"name\": \"gamefor\",\n        \"prevSize\": 32,\n        \"code\": 59726\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 4\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M897.055 162.693c-80.456-69.796-193.044-110.090-323.912-110.090-341.146 0.010-573.143 261.519-573.143 261.519l65.362 103.066c0 0 36.198 3.011 17.039-57.692 16.538-31.037 48.896-72.817 112.097-121.006v686.541c-27.249 7.629-63.273 21.985-38.728 46.367h187.843c24.791-24.617-14.264-39.455-38.052-46.367v-161.976c0 0 128.758 50.217 267.581 50.217 121.938 0 232.919-36.055 315.464-101.161 82.534-64.727 135.752-161.372 135.404-271.831 0.246-108.472-46.5-208.046-126.966-277.565l0.010-0.020zM797.491 657.92c-57.068 55.972-140.083 91.351-235.807 91.279-106.834 0.072-196.741-20.48-256.123-49.521v-515.052c65.147-45.998 170.803-74.322 256.123-74.158 103.67 0.092 185.047 39.004 240.108 98.028 54.927 59.392 84.92 138.301 85.197 230.001-0.348 89.364-32.42 162.98-89.498 219.402v0.020z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"pixiv\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 322,\n        \"id\": 253,\n        \"name\": \"pixiv\",\n        \"prevSize\": 32,\n        \"code\": 59727\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 5\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M361.533 289.7h-96.829l-84.9 114.493-82.975-114.493h-96.829v389.663h102.083v-235.592h0.952l76.769 104.919 78.705-104.919h0.993v235.581h102.042v-389.652zM361.533 289.7z\",\n          \"M725.074 389.499h-102.052v78.684h-101.591c3.768-11.622 9.728-24.392 17.9-38.318 8.212-13.926 21.719-25.999 40.612-36.219 18.903-10.22 46.285-15.565 82.166-16.097h80.118l-23.818-87.757h-50.104c-36.721-0.737-70.953 3.041-102.779 11.428-31.816 8.325-61.307 25.825-88.453 52.511-24.238 24.842-41.974 53.586-53.299 86.323-11.336 32.686-16.957 66.232-16.855 100.649 0.215 34.54 5.601 68.332 16.179 101.274 10.598 32.973 25.416 63.734 44.401 92.355l82.985-54.856c-11.387-18.688-20.664-38.431-27.761-59.259-7.107-20.818-10.875-42.25-11.325-64.256h111.606v123.515h102.052v-289.976zM725.074 389.499z\",\n          \"M889.999 289.7h-102.083v389.663h212.265l23.818-87.757h-134.001v-301.906zM889.999 289.7z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"myanimelist\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 323,\n        \"id\": 252,\n        \"name\": \"myanimelist\",\n        \"prevSize\": 32,\n        \"code\": 59728\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 6\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M331.96 233.8c0-32.737-23.378-79.493-107.53-79.493-32.737 0-135.598 0-135.598 0l-42.076 177.664c0 0 70.144 0 140.278 0 112.21 0 144.927-51.415 144.927-98.171z\",\n          \"M692.009 233.8c0-32.737-23.378-79.493-107.53-79.493-32.737 0-135.619 0-135.619 0l-37.396 177.674c0 0 70.144 0 140.278 0 107.53-0.010 140.268-51.425 140.268-98.181z\",\n          \"M285.204 495.626c0-32.737-23.378-79.503-107.53-79.503-32.737 0-135.598 0-135.598 0l-42.076 177.725c0 0 70.134 0 140.268 0 112.22 0 144.937-46.756 144.937-98.222z\",\n          \"M645.253 495.626c0-32.737-23.378-79.503-107.53-79.503-32.748 0-135.619 0-135.619 0l-37.396 177.715c0 0 70.144 0 140.278 0 107.52 0.010 140.268-46.746 140.268-98.212z\",\n          \"M1024 388.096c0-32.737-23.378-79.503-107.561-79.503-32.717 0-135.598 0-135.598 0l-37.386 177.674c0 0 70.134 0 140.268 0 107.54 0 140.278-46.756 140.278-98.171z\",\n          \"M967.885 663.982c0-32.737-23.378-79.493-107.54-79.493-32.737 0-135.588 0-135.588 0l-37.427 177.674c0 0 70.134 0 140.268 0 112.22 0 140.288-46.766 140.288-98.181z\",\n          \"M589.128 771.523c0-32.737-23.368-79.503-107.53-79.503-32.737 0-135.598 0-135.598 0l-37.417 177.684c0 0 70.134 0 140.278 0 112.241 0 140.268-51.425 140.268-98.181z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"blackberry\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 324,\n        \"id\": 251,\n        \"name\": \"blackberry\",\n        \"prevSize\": 32,\n        \"code\": 59729\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 7\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M558.397 187.576l-558.397 558.449 90.296 90.399 558.5-558.449z\",\n          \"M375.099 745.989l558.468-558.468 90.4 90.4-558.468 558.468-90.4-90.4z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"wickr\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 325,\n        \"id\": 250,\n        \"name\": \"wickr\",\n        \"prevSize\": 32,\n        \"code\": 59730\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 8\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M806.912 808.847c-3.021 0-3.021 0 0 0-47.288-185.211-239.575-166.083-270.766-291.901-21.125-88.576 36.239-156.006 124.805-177.172 52.357-13.066 103.68 0 142.94 34.232 5.028 5.038 13.087 10.066 18.135 18.135v0 0c0 3.021 3 3.021 3 5.038l3.031 3.021 3.021 3c8.059 10.066 13.066 18.135 21.125 16.128 5.038-3.021 10.076-16.128 10.076-23.163 5.028-41.277 3.021-83.538-8.069-127.836-47.299-190.249-236.544-304.988-426.783-257.69-190.239 47.329-304.978 236.544-257.679 426.783 62.403 254.659 301.978 296.95 429.814 361.359 28.18 13.087 49.306 39.26 57.375 70.461 13.097 57.375-21.125 114.77-78.5 127.836v0c-3.031 0-3.031 0-5.038 0-10.066 3-13.087 0-13.087 5.028 0 3 8.059 8.038 13.087 10.066 31.212 13.066 67.441 16.097 103.68 5.038 93.604-20.132 149.975-113.746 129.833-208.364v0 0 0z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"spip\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 326,\n        \"id\": 249,\n        \"name\": \"spip\",\n        \"prevSize\": 32,\n        \"code\": 59731\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 9\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M617.124 732.477c-29.204 28.221-65.208 49.633-104.131 63.304-38.953-12.677-74.004-35.082-103.178-63.304h207.309z\",\n          \"M318.3 319.785c-40.899-34.089-89.559-60.385-143.084-74.988v333.865c0 186.86 150.876 336.835 338.729 336.835 187.884 0 338.719-149.975 338.719-336.835v-333.865c-53.524 14.602-102.154 39.905-143.114 74.988-55.439-38.984-121.641-62.372-194.621-62.372-73.984 0.993-142.111 23.398-196.628 62.372zM319.263 222.403c57.446-30.126 123.628-46.715 194.683-46.715 70.072 0 136.274 17.51 193.751 46.715 13.609-8.724 28.16-16.517 41.83-23.378-62.31-57.364-145.029-92.436-235.581-92.436-91.484 0-174.234 35.082-236.544 92.436 12.657 6.851 28.252 15.585 41.861 23.378zM195.645 167.895c77.896-86.62 190.781-142.121 317.348-142.121 126.525 0 239.452 54.508 317.338 142.121 33.055-8.776 68.127-14.602 103.148-14.602v143.114c54.508 34.089 90.522 94.423 90.522 163.471 0 69.12-36.014 129.495-91.515 163.594l-0.932 3.84c-22.395 210.299-203.489 370.913-421.499 370.913-218.040 0-397.128-163.594-419.533-374.774-54.508-34.079-90.522-95.396-90.522-163.584 0-69.048 36.014-129.382 90.522-163.471v-143.104c36.997 0.983 72.049 5.816 105.124 14.602z\",\n          \"M618.107 578.673c56.433-6.81 150.907-5.816 150.907-5.816-1.976 16.517 0 67.133-54.569 97.331-8.735 5.816-31.119 12.616-52.531 13.609-52.531 1.925-126.525 2.97-126.525 2.97 13.609-58.419 36.014-102.277 82.719-108.093z\",\n          \"M407.869 578.673c46.715 5.816 69.12 49.684 81.766 108.093 0 0-73.994-1.055-126.556-2.97-21.402-0.993-43.807-8.776-52.562-13.609-54.518-31.14-52.572-80.814-54.518-97.341 0 0 95.406 0 151.869 5.827z\",\n          \"M612.291 846.387c-28.273 17.449-62.362 27.228-99.297 27.228-36.997 0-71.055-9.779-99.308-27.228 0 0 1.946-11.745 7.793-19.548 6.81-10.701 12.646-13.609 12.646-13.609 24.351 6.871 50.616 10.701 78.858 10.701 27.279 0 54.508-3.83 78.828-10.701 0 0 7.793 3.963 14.602 14.664 4.884 10.701 5.878 18.493 5.878 18.493z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"napster\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 317,\n        \"id\": 248,\n        \"name\": \"napster\",\n        \"prevSize\": 32,\n        \"code\": 59732\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 10\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M883.62 565.842c0-204.923-166.697-371.63-371.61-371.63-204.902 0-371.599 166.707-371.599 371.63 0 94.812 35.758 185.098 100.721 254.29l0.010-0.020c8.724 9.226 23.265 9.687 32.532 0.973l40.059-37.704c9.226-8.673 9.677-23.173 1.065-32.44l0.031-0.051c-47.258-50.34-73.298-116.091-73.298-185.047 0-149.135 121.324-270.49 270.469-270.49 149.125 0 270.479 121.344 270.479 270.49 0 68.956-26.020 134.707-73.308 185.047l0.082 0.092c-8.602 9.277-8.12 23.747 1.096 32.399l40.069 37.704c9.257 8.724 23.828 8.264 32.543-0.993l-0.041-0.020c64.952-69.181 100.7-159.457 100.7-254.228z\",\n          \"M1024 564.060c0-50.637-7.578-100.567-22.579-148.5h0.020c-0.020-0.041-0.061-0.082-0.061-0.123-0.020-0.041-0.020-0.072-0.041-0.154-3.901-11.94-16.681-18.616-28.744-14.879l-52.521 16.333c-12.145 3.758-18.924 16.63-15.165 28.764l-0.061 0.041c11.919 38.195 18.033 78.080 18.033 118.528 0 71.444-19.343 141.496-55.921 202.639l0.051 0.061c-6.431 10.875-2.888 24.945 7.987 31.457l47.176 28.293c10.895 6.543 25.006 3 31.58-7.895 45.957-76.831 70.246-164.833 70.246-254.566z\",\n          \"M157.061 766.71c-36.577-61.133-55.91-131.195-55.91-202.639 0-40.458 6.083-80.312 18.022-118.508h0.010v-0.041c3.748-12.145-3.031-25.006-15.145-28.785l-52.552-16.374c-12.052-3.738-24.852 2.949-28.723 14.95l-0.092-0.051c-15.032 48.036-22.671 98.079-22.671 148.808 0 89.713 24.32 177.725 70.257 254.546l0.082-0.031c6.564 10.793 20.613 14.295 31.498 7.782l47.165-28.293c10.844-6.502 14.377-20.47 8.038-31.355l0.020-0.010z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"beatport\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 316,\n        \"id\": 247,\n        \"name\": \"beatport\",\n        \"prevSize\": 32,\n        \"code\": 59733\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 11\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M358.093 12.882c-13.998-8.561-30.812-12.882-50.473-12.882-20.705 0-37.581 4.321-50.493 12.882-13.087 8.428-19.671 19.671-19.671 33.147v930.54c0 11.807 6.758 22.456 20.275 32.512 13.404 9.861 30.085 14.92 49.879 14.92 18.811 0 35.369-5.059 49.736-14.92 14.305-9.861 21.606-20.695 21.606-32.512v-930.355c0.020-13.66-6.973-24.678-20.859-33.331z\",\n          \"M765.655 382.495c-13.824-8.735-31.171-12.902-51.825-12.902-20.644 0-37.263 4.168-49.879 12.902l-189.307 118.63c-8.458 7.905-12.175 19.999-10.588 36.475 1.464 16.323 9.011 31.928 22.405 46.52 13.404 14.797 28.375 24.064 45.548 27.924 16.927 3.891 29.665 1.772 38.236-6.164l74.957-46.602v417.3c0 11.807 6.461 22.456 19.599 32.512 12.739 9.851 29.235 14.909 49.029 14.909s36.844-5.059 51.139-14.92c14.377-10.045 21.565-20.695 21.565-32.512v-561.060c0.010-13.65-7.066-24.637-20.879-33.014z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"hackerone\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 315,\n        \"id\": 246,\n        \"name\": \"hackerone\",\n        \"prevSize\": 32,\n        \"code\": 59734\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 12\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M579.584 653.312v370.688h-134.144v-370.688l-330.752-653.312h155.648l241.664 492.544 250.88-492.544h145.408l-328.704 653.312zM579.584 653.312z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"hackernews\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 314,\n        \"id\": 245,\n        \"name\": \"hackernews\",\n        \"prevSize\": 32,\n        \"code\": 59718\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 13\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M668.672 3.072c6.144-2.048 12.288-4.096 18.432-3.072 7.168 2.048 9.216 9.216 9.216 15.36 0 14.336-11.264 24.576-13.312 37.888-5.12 22.528-9.216 44.032-15.36 66.56-3.072 10.24-17.408 12.288-23.552 5.12-7.168-8.192 0-19.456 0-29.696-3.072-20.48 3.072-39.936 4.096-60.416 0-13.312 7.168-27.648 20.48-31.744v0z\",\n          \"M307.2 19.456c10.24-4.096 20.48 1.024 27.648 8.192 9.216 8.192 9.216 20.48 11.264 30.72 7.168 13.312 19.456 23.552 24.576 37.888 3.072 8.192 1.024 17.408-1.024 26.624-2.048 8.192-11.264 11.264-19.456 10.24-10.24-8.192-15.36-19.456-21.504-30.72-10.24-19.456-20.48-38.912-28.672-59.392-3.072-7.168-2.048-19.456 7.168-23.552v0z\",\n          \"M910.336 182.272c11.264-9.216 23.552-18.432 37.888-21.504 15.36-4.096 21.504 21.504 9.216 28.672-17.408 15.36-38.912 26.624-57.344 40.96-7.168 4.096-14.336 12.288-23.552 12.288-8.192 0-15.36 5.12-22.528 9.216-3.072-2.048-5.12-4.096-8.192-6.144 7.168-7.168 14.336-14.336 20.48-22.528 2.048-4.096 6.144-6.144 10.24-9.216 11.264-9.216 20.48-22.528 33.792-31.744v0z\",\n          \"M79.872 164.864c7.168-3.072 15.36-1.024 21.504 3.072 12.288 7.168 18.432 19.456 28.672 28.672 8.192 7.168 15.36 15.36 23.552 23.552 6.144 6.144 14.336 10.24 20.48 15.36 7.168 6.144 4.096 19.456-4.096 22.528s-15.36-3.072-22.528-5.12c-10.24-3.072-18.432-9.216-27.648-13.312-10.24-2.048-17.408-8.192-27.648-10.24-11.264-2.048-20.48-8.192-27.648-17.408-9.216-16.384-2.048-40.96 15.36-47.104v0z\",\n          \"M878.592 316.416c-184.32-2.048-369.664-5.12-553.984-4.096-15.36-1.024-27.648 10.24-32.768 24.576-34.816-2.048-70.656-2.048-105.472-4.096 0 6.144 1.024 13.312 1.024 19.456-9.216 0-18.432-1.024-27.648 1.024-8.192 2.048-15.36 10.24-13.312 18.432 11.264 129.024 22.528 258.048 33.792 387.072 1.024 16.384 11.264 32.768 27.648 38.912 23.552 8.192 49.152 9.216 73.728 4.096 27.648-1.024 55.296-1.024 82.944-2.048 8.192 18.432 17.408 35.84 26.624 53.248 13.312 25.6 37.888 40.96 59.392 58.368 6.144 5.12 13.312 10.24 17.408 17.408 2.048 9.216 2.048 18.432 0 27.648-4.096 18.432-7.168 37.888-11.264 56.32 12.288 3.072 24.576 7.168 35.84 10.24 1.024-25.6 3.072-51.2 5.12-76.8 0-13.312 0-27.648-9.216-36.864-17.408-19.456-40.96-32.768-59.392-51.2-15.36-15.36-22.528-36.864-32.768-56.32 20.48-1.024 39.936-1.024 60.416 0-1.024 2.048-3.072 4.096-4.096 6.144 3.072 3.072 6.144 6.144 9.216 9.216 9.216-7.168 18.432-13.312 28.672-20.48s14.336-20.48 16.384-31.744c6.144-30.72 7.168-61.44 8.192-92.16 1.024-36.864-6.144-73.728-8.192-110.592 0-6.144 0-14.336 5.12-19.456 8.192-6.144 19.456-7.168 29.696-9.216 4.096 18.432 8.192 37.888 12.288 56.32 6.144 47.104 10.24 94.208 12.288 142.336 5.12 0 11.264 0 17.408-1.024 2.048-8.192 2.048-16.384 2.048-25.6-1.024-30.72-4.096-61.44-7.168-91.136-1.024-24.576-4.096-49.152-4.096-74.752 0-10.24-1.024-23.552 7.168-30.72 7.168-6.144 18.432-6.144 27.648-5.12 3.072 21.504 7.168 41.984 10.24 63.488 4.096 53.248 1.024 107.52 0 160.768 6.144 0 12.288 0 18.432 0 4.096-17.408 2.048-35.84 3.072-53.248 0-36.864 2.048-73.728-3.072-110.592-3.072-11.264-2.048-25.6 7.168-34.816 7.168-6.144 16.384-3.072 24.576-2.048 2.048 46.080 2.048 92.16 1.024 138.24 0 20.48-2.048 40.96-5.12 61.44 6.144 1.024 11.264 1.024 17.408 2.048 11.264-46.080 10.24-95.232 19.456-141.312 6.144-3.072 12.288-1.024 18.432-1.024 0 61.44-6.144 122.88-10.24 184.32-2.048 13.312-6.144 26.624-9.216 40.96-1.024 8.192-8.192 12.288-13.312 18.432-12.288 13.312-25.6 25.6-37.888 38.912-12.288 16.384-26.624 30.72-39.936 45.056 4.096 2.048 8.192 6.144 13.312 4.096-6.144 34.816-6.144 69.632-8.192 104.448 11.264-3.072 23.552-6.144 34.816-9.216-1.024-34.816-8.192-70.656 4.096-104.448 17.408-27.648 44.032-48.128 64.512-73.728 9.216-12.288 10.24-27.648 14.336-41.984 30.72 0 60.416-1.024 91.136-1.024 11.264 0 22.528-2.048 30.72-8.192 15.36-11.264 21.504-31.744 21.504-50.176 8.192-131.072 15.36-262.144 23.552-392.192 3.072-13.312-8.192-27.648-21.504-25.6zM274.432 729.088c-6.144 17.408-30.72 18.432-46.080 11.264-8.192-119.808-16.384-239.616-24.576-359.424 4.096 0 8.192 0 11.264 0 7.168 67.584 13.312 135.168 20.48 202.752 1.024 11.264 1.024 22.528 4.096 33.792 2.048-17.408 0-35.84 0-53.248 0-66.56-2.048-134.144-2.048-200.704 7.168 0 14.336 1.024 21.504 1.024 2.048 55.296 3.072 110.592 5.12 166.912 0 10.24 0 19.456 2.048 29.696 1.024-4.096 2.048-8.192 2.048-12.288 5.12-60.416 10.24-121.856 15.36-182.272 6.144 0 12.288 0 18.432 1.024-8.192 118.784-17.408 239.616-27.648 361.472z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"smashwords\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 313,\n        \"id\": 244,\n        \"name\": \"smashwords\",\n        \"prevSize\": 32,\n        \"code\": 59719\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 14\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M205.824 0h164.864v588.8l228.352-271.36h196.608l-263.168 305.152 285.696 401.408h-196.608l-247.808-357.376h-3.072v357.376h-164.864c0 0 0-1024 0-1024z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"kobo\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 311,\n        \"id\": 243,\n        \"name\": \"kobo\",\n        \"prevSize\": 32,\n        \"code\": 59720\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 15\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 848.896v-673.792h229.376c69.632 0 123.904 13.312 162.816 40.96s58.368 66.56 58.368 115.712c0 35.84-11.264 67.584-34.816 95.232-22.528 27.648-53.248 47.104-92.16 59.392v1.024c47.104 6.144 84.992 23.552 113.664 53.248 27.648 29.696 41.984 65.536 41.984 108.544 0 60.416-21.504 108.544-64.512 144.384s-101.376 54.272-174.080 54.272h-240.64zM130.048 275.456v177.152h70.656c34.816 0 62.464-8.192 81.92-24.576s29.696-39.936 29.696-70.656c0-54.272-38.912-81.92-116.736-81.92h-65.536zM130.048 552.96v195.584h90.112c38.912 0 68.608-9.216 90.112-26.624s31.744-41.984 31.744-73.728c0-63.488-41.984-95.232-125.952-95.232h-86.016z\",\n          \"M544.768 848.896v-673.792h229.376c69.632 0 123.904 13.312 162.816 40.96s58.368 66.56 58.368 115.712c0 35.84-11.264 67.584-34.816 95.232-22.528 27.648-53.248 47.104-92.16 59.392v1.024c47.104 6.144 84.992 23.552 113.664 53.248 27.648 29.696 41.984 65.536 41.984 108.544 0 60.416-21.504 108.544-64.512 144.384s-101.376 54.272-174.080 54.272h-240.64zM674.816 275.456v177.152h70.656c34.816 0 62.464-8.192 81.92-24.576s29.696-39.936 29.696-70.656c0-54.272-38.912-81.92-116.736-81.92h-65.536zM674.816 552.96v195.584h90.112c38.912 0 68.608-9.216 90.112-26.624s31.744-41.984 31.744-73.728c0-63.488-41.984-95.232-125.952-95.232h-86.016z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"bookbub\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 312,\n        \"id\": 242,\n        \"name\": \"bookbub\",\n        \"prevSize\": 32,\n        \"code\": 59721\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 16\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M494.592 221.184c77.824 1.024 151.552 33.792 205.824 90.112v0c-2.048-23.552 15.36-44.032 39.936-46.080 1.024 0 2.048 0 2.048 0h6.144c25.6 1.024 46.080 21.504 46.080 48.128 0 0 0 0 0 0v408.576c-2.048 14.336 7.168 27.648 21.504 30.72 8.192 1.024 16.384-1.024 22.528-7.168 64.512-67.584 142.336-347.136-39.936-508.928-146.432-128-358.4-145.408-522.24-40.96-148.48 109.568-202.752 307.2-132.096 477.184 87.040 204.8 337.92 265.216 487.424 204.8 75.776-30.72 110.592 72.704 31.744 106.496-118.784 51.2-447.488 46.080-602.112-224.256-103.424-182.272-97.28-502.784 178.176-668.672 211.968-126.976 484.352-92.16 657.408 84.992 175.104 185.344 164.864 532.48-6.144 667.648-52.224 39.936-126.976 30.72-166.912-22.528-14.336-19.456-23.552-41.984-24.576-65.536l-1.024-28.672c-54.272 55.296-126.976 86.016-203.776 86.016-161.792-2.048-290.816-134.144-290.816-295.936s129.024-292.864 290.816-295.936c0 0 0 0 0 0zM689.152 506.88c-1.024-102.4-83.968-184.32-186.368-183.296-2.048 0-3.072 0-5.12 0h-4.096c-116.736 0-182.272 93.184-182.272 198.656 0 118.784 78.848 193.536 181.248 193.536 105.472 2.048 192.512-80.896 195.584-185.344 1.024 0 1.024-23.552 1.024-23.552z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"mailru\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 310,\n        \"id\": 241,\n        \"name\": \"mailru\",\n        \"prevSize\": 32,\n        \"code\": 59722\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 17\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1021.952 579.584l-171.008-525.312c-6.144-18.432-31.744-18.432-36.864 0l-113.664 349.184h-376.832v0l-113.664-349.184c-6.144-18.432-31.744-18.432-36.864 0l-171.008 525.312c-5.12 16.384 0 33.792 14.336 44.032l495.616 360.448 495.616-360.448c14.336-10.24 19.456-27.648 14.336-44.032z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"gitlab\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 309,\n        \"id\": 240,\n        \"name\": \"gitlab\",\n        \"prevSize\": 32,\n        \"code\": 59717\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 18\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M904.059 360.735c-86.17 7.752-203.254-41.308-267.53-36.895 101.181 135.26-67.185 302.766-166.052 166.042-6.349-98.601 37.222-147.292 101.489-175.288-31.928-14.193-84.122-8.141-129.167-9.216 138.127-39.27 336.067 20.316 461.261 55.357zM571.965 351.508c16.988 22.968 47.401 32.543 55.316 64.573-3.267 27.464-14.674 46.807-27.648 64.573-51.743-6.697-85.084-31.775-73.81-101.478-40.11-6.298-14.797 52.859-36.905 64.584 14.080 55.685 104.499 89.303 147.61 36.895 13.66-46.612 5.1-179.661-64.563-129.147zM544.276 397.64c-7.813 38.574 24.975 36.506 36.905 55.347 13.292-5.161 22.508-14.397 27.668-27.679 0.717-31.447-34.171-27.32-64.573-27.668z\",\n          \"M811.796 545.229c-56.156 6.994-77.937-20.46-110.705-36.884-1.669-197.99 255.416-85.627 110.705 36.884zM774.892 406.866c27.075 15.985 34.499 51.64 64.604 64.573 5.386-48.445-24.228-61.891-64.604-64.573zM765.676 443.761c-8.335-24.996-33.946 7.772-36.895 18.452 5.274 25.487 9.769 51.732 46.1 46.131-10.076-9.206-34.591-50.299-9.206-64.584zM774.892 452.987c-4.26 28.877 8.028 41.175 36.905 36.895 4.301-28.877-8.008-41.175-36.905-36.895z\",\n          \"M313.651 563.702c-10.813 1.475-7.782 16.814-9.226 27.648 206.674 24.709 375.634 88.084 553.523 73.82-28.856-47.278-96.092-23.429-138.373-27.668-127.785-12.902-256.256-61.645-387.471-64.584-10.711 1.485-16.415-2.048-18.452-9.216z\",\n          \"M18.452 905.021c25.487-90.051 31.314-178.063 15.258-271.729-4.844-28.129-29.471-59.351-33.71-88.064v-27.668c49.644-117.668 61.655-101.571 75.592-132.239 51.814-114.125 97.526-237.435 219.617-264.448 70.502-15.596 191.017 9.769 267.52 18.452 128.195 14.541 254.28 50.555 368.998 73.8-5.448 70.257-6.564 141.65 12.288 187.576 32.297-23.828 62.126 73.421 79.985 126.075l-9.236 27.689c2.314 79.165-32.973 120.75-73.789 156.815 2.673 55.757-7.393 124.252 9.226 166.042zM304.425 148.552c-63.273 198.932-72.305 443.32-83.016 664.218 225.731-37.509 478.085 8.233 701.092 46.121-30.136-223.683 10.701-417.188-18.442-627.302-170.732-56.832-390.523-64.604-599.634-83.036zM249.078 185.446c-62.669 29.594-91.023 93.491-129.157 147.62 46.899 105.196 84.019 254.853 9.226 341.33-28.59 0.901-51.169-4.188-64.573-18.473-15.811 58.143-23.316 162.816-18.463 239.872 56.381-20.5 103.916-49.828 147.61-83.026 1.69-242.084 42.527-418.785 55.357-627.323zM119.921 397.64c-88.535 25.631-131.625 236.513 9.226 239.862 19.517-80.947 6.758-183.501-9.226-239.862zM959.416 425.308c-36.014 63.345-31.027 181.811-27.689 258.314 83.753-25.426 80.783-199.629 27.689-258.314z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"instructables\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 308,\n        \"id\": 239,\n        \"name\": \"instructables\",\n        \"prevSize\": 32,\n        \"code\": 59716\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 19\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 56.32c0-5.12 2.048-10.24 9.216-10.24 55.296-3.072 137.216-4.096 222.208-4.096 238.592 0 342.016 131.072 342.016 299.008 0 219.136-158.72 313.344-353.28 313.344-32.768 0-44.032-2.048-67.584-2.048v331.776c0 7.168-3.072 9.216-9.216 9.216h-133.12c-7.168 0-9.216-3.072-9.216-9.216l-1.024-927.744zM153.6 514.048c20.48 2.048 35.84 2.048 69.632 2.048 100.352 0 195.584-35.84 195.584-172.032 0-109.568-67.584-164.864-182.272-164.864-34.816 0-67.584 2.048-81.92 3.072l-1.024 331.776z\",\n          \"M666.624 453.632c-5.12 0-7.168-3.072-7.168-9.216v-118.784c0-7.168 2.048-9.216 7.168-9.216h79.872v-44.032c0-53.248 9.216-98.304 28.672-137.216 34.816-71.68 96.256-104.448 181.248-104.448 25.6 0 44.032 2.048 58.368 7.168 7.168 3.072 9.216 5.12 9.216 12.288v113.664c0 7.168-3.072 9.216-9.216 9.216-11.264-3.072-27.648-4.096-37.888-4.096-49.152 0-74.752 35.84-74.752 104.448v44.032h112.64c7.168 0 9.216 2.048 9.216 7.168v118.784c0 7.168-2.048 9.216-9.216 9.216h-112.64v531.456c0 5.12-2.048 9.216-9.216 9.216h-136.192c-7.168 0-9.216-4.096-9.216-9.216v-531.456l-80.896 1.024z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"portfolio\",\n          \"adobe\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 307,\n        \"id\": 238,\n        \"name\": \"portfolio\",\n        \"prevSize\": 32,\n        \"code\": 59715\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 20\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 719.872c-124.928-217.088-249.856-432.128-375.808-650.24-46.080 79.872-91.136 156.672-136.192 235.52-45.056-78.848-90.112-155.648-136.192-235.52-125.952 218.112-249.856 433.152-375.808 651.264 92.16 0 180.224 0 272.384 0-45.056 78.848-90.112 155.648-135.168 233.472 250.88 0 499.712 0 749.568 0-45.056-78.848-89.088-155.648-135.168-234.496 93.184-0 181.248-0 272.384-0zM273.408 719.872c79.872-138.24 158.72-275.456 238.592-414.72 79.872 138.24 158.72 274.432 238.592 413.696-159.744 1.024-317.44 1.024-477.184 1.024z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"codered\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 306,\n        \"id\": 237,\n        \"name\": \"codered\",\n        \"prevSize\": 32,\n        \"code\": 59712\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 21\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M121.856 509.952c0-23.552 2.048-47.104 5.12-70.656 7.168-54.272 23.552-106.496 49.152-155.648 19.456-36.864 43.008-70.656 70.656-102.4 45.056-51.2 98.304-92.16 155.648-128 27.648-16.384 56.32-31.744 83.968-47.104 3.072-2.048 6.144-4.096 9.216-5.12 5.12-2.048 9.216-2.048 12.288 2.048 3.072 3.072 3.072 8.192 0 12.288-15.36 23.552-28.672 49.152-36.864 76.8-3.072 9.216-5.12 19.456-6.144 28.672 0 3.072 0 4.096 4.096 4.096 15.36-2.048 30.72-3.072 46.080-3.072 53.248 1.024 104.448 11.264 152.576 32.768 90.112 39.936 155.648 104.448 197.632 192.512 15.36 31.744 25.6 64.512 30.72 99.328 3.072 18.432 4.096 36.864 5.12 55.296 1.024 14.336 0 27.648 0 41.984-1.024 18.432-3.072 36.864-6.144 54.272-6.144 37.888-16.384 75.776-31.744 110.592-18.432 43.008-43.008 82.944-72.704 118.784-47.104 58.368-104.448 103.424-167.936 142.336-28.672 17.408-59.392 32.768-89.088 49.152-2.048 1.024-4.096 2.048-6.144 3.072-4.096 2.048-9.216 1.024-12.288-2.048s-3.072-7.168 0-11.264c6.144-9.216 11.264-17.408 16.384-27.648 11.264-20.48 20.48-41.984 25.6-64.512 1.024-5.12 2.048-10.24 2.048-14.336 0-3.072 0-4.096-3.072-3.072-9.216 1.024-19.456 2.048-28.672 2.048-9.216 1.024-18.432 1.024-26.624 0-9.216 0-17.408-1.024-26.624-2.048-21.504-2.048-41.984-6.144-62.464-11.264-78.848-21.504-144.384-63.488-196.608-125.952-37.888-45.056-64.512-97.28-78.848-154.624-5.12-18.432-8.192-37.888-10.24-57.344-3.072-12.288-4.096-25.6-4.096-39.936zM512 659.456c79.872 1.024 146.432-65.536 147.456-145.408 1.024-81.92-66.56-147.456-146.432-148.48-80.896 0-147.456 66.56-147.456 146.432-1.024 80.896 65.536 147.456 146.432 147.456z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"origin\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 305,\n        \"id\": 236,\n        \"name\": \"origin\",\n        \"prevSize\": 32,\n        \"code\": 59713\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 22\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 418.816l-512-313.344-176.128 107.52v-107.52h-159.744v205.824l-176.128 107.52 83.968 137.216 92.16-56.32v418.816h671.744v-418.816l92.16 56.32z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"nextdoor\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 304,\n        \"id\": 235,\n        \"name\": \"nextdoor\",\n        \"prevSize\": 32,\n        \"code\": 59714\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 23\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M955.392 40.96c0-22.528-19.456-40.96-43.008-40.96-2.048 0-3.072 0-5.12 0-57.344 6.144-97.28 22.528-125.952 54.272-15.36 16.384-25.6 36.864-33.792 59.392-7.168 23.552-12.288 53.248-12.288 86.016v405.504c0 37.888-4.096 69.632-13.312 96.256s-21.504 48.128-39.936 64.512c-18.432 17.408-40.96 28.672-68.608 36.864s-61.44 12.288-102.4 12.288-74.752-4.096-102.4-12.288c-28.672-8.192-51.2-19.456-68.608-36.864-18.432-17.408-30.72-37.888-39.936-64.512s-13.312-57.344-13.312-96.256v-563.2c0-21.504-19.456-40.96-43.008-40.96-2.048 0-3.072 0-5.12 0-57.344 6.144-97.28 22.528-125.952 54.272-13.312 15.36-24.576 36.864-32.768 59.392-7.168 23.552-12.288 53.248-12.288 86.016v411.648c1.024 123.904 28.672 217.088 86.016 283.648 73.728 86.016 190.464 128 358.4 128 168.96 0 284.672-41.984 359.424-128 57.344-66.56 84.992-159.744 84.992-284.672v-570.368h-1.024z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"udemy\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 303,\n        \"id\": 234,\n        \"name\": \"udemy\",\n        \"prevSize\": 32,\n        \"code\": 59711\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 24\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 353.28c-88.064 0-158.72 71.68-158.72 158.72s71.68 158.72 158.72 158.72 158.72-71.68 158.72-158.72-70.656-158.72-158.72-158.72zM512 637.952c-69.632 0-125.952-56.32-125.952-125.952s56.32-125.952 125.952-125.952 125.952 56.32 125.952 125.952-56.32 125.952-125.952 125.952z\",\n          \"M766.976 462.848c-19.456-7.168-34.816-21.504-43.008-38.912-7.168-18.432-7.168-38.912 2.048-58.368 13.312-26.624 14.336-48.128 5.12-63.488-12.288-19.456-38.912-21.504-73.728-5.12-10.24 5.12-21.504 7.168-31.744 7.168-29.696 0-55.296-18.432-65.536-48.128-14.336-40.96-34.816-49.152-48.128-49.152-14.336 0-33.792 8.192-49.152 49.152-10.24 28.672-35.84 48.128-65.536 48.128-11.264 0-21.504-2.048-31.744-7.168-34.816-16.384-61.44-13.312-73.728 5.12-9.216 15.36-8.192 35.84 5.12 63.488 9.216 19.456 10.24 39.936 2.048 58.368-7.168 18.432-22.528 32.768-43.008 38.912-40.96 14.336-49.152 34.816-49.152 49.152s8.192 33.792 49.152 49.152c19.456 7.168 34.816 21.504 41.984 38.912 7.168 18.432 7.168 38.912-2.048 58.368-13.312 26.624-14.336 48.128-5.12 63.488 12.288 19.456 38.912 21.504 73.728 5.12 10.24-5.12 21.504-7.168 31.744-7.168 29.696 0 55.296 18.432 65.536 48.128 14.336 40.96 34.816 49.152 48.128 49.152s33.792-8.192 49.152-49.152c10.24-28.672 35.84-48.128 65.536-48.128 11.264 0 21.504 2.048 31.744 7.168 34.816 16.384 61.44 13.312 73.728-5.12 9.216-15.36 8.192-35.84-5.12-63.488-9.216-19.456-10.24-39.936-2.048-58.368 7.168-18.432 22.528-32.768 43.008-38.912 40.96-14.336 49.152-34.816 49.152-49.152s-7.168-33.792-48.128-49.152zM755.712 528.384c-28.672 10.24-51.2 30.72-62.464 58.368s-10.24 57.344 3.072 84.992c9.216 20.48 8.192 29.696 7.168 30.72 0 0-2.048 1.024-4.096 1.024-4.096 0-12.288-1.024-26.624-8.192-15.36-7.168-30.72-10.24-46.080-10.24-44.032 0-81.92 27.648-97.28 70.656-7.168 20.48-15.36 26.624-16.384 26.624-2.048 0-9.216-6.144-16.384-26.624-15.36-43.008-53.248-70.656-97.28-70.656-16.384 0-31.744 3.072-46.080 10.24s-22.528 8.192-26.624 8.192c-3.072 0-4.096-1.024-4.096-1.024-1.024-1.024-3.072-10.24 7.168-30.72 13.312-27.648 14.336-58.368 3.072-84.992-11.264-27.648-33.792-48.128-62.464-58.368-21.504-7.168-26.624-15.36-26.624-16.384s5.12-9.216 26.624-16.384c28.672-10.24 51.2-30.72 62.464-58.368s10.24-57.344-3.072-84.992c-9.216-20.48-8.192-29.696-7.168-30.72 0 0 2.048-1.024 4.096-1.024 4.096 0 12.288 1.024 26.624 8.192 15.36 7.168 30.72 10.24 46.080 10.24 44.032 0 81.92-27.648 97.28-70.656 7.168-21.504 15.36-26.624 16.384-26.624s9.216 5.12 16.384 26.624c15.36 43.008 53.248 70.656 97.28 70.656 16.384 0 31.744-4.096 46.080-10.24 14.336-7.168 22.528-8.192 26.624-8.192 3.072 0 4.096 1.024 4.096 1.024 1.024 1.024 2.048 10.24-7.168 30.72-13.312 27.648-14.336 58.368-3.072 84.992 11.264 27.648 33.792 48.128 62.464 58.368 21.504 7.168 26.624 15.36 26.624 16.384s-6.144 9.216-26.624 16.384z\",\n          \"M858.112 605.184l165.888-93.184-165.888-93.184 97.28-162.816-190.464 3.072 3.072-190.464-162.816 97.28-93.184-165.888-93.184 165.888-162.816-97.28 3.072 189.44-190.464-2.048 97.28 162.816-165.888 93.184 165.888 93.184-97.28 162.816 190.464-3.072-3.072 190.464 162.816-97.28 93.184 165.888 93.184-165.888 162.816 97.28-3.072-190.464 190.464 3.072-97.28-162.816zM734.208 897.024l-142.336-83.968-79.872 143.36-80.896-144.384-141.312 84.992 2.048-164.864-164.864 2.048 83.968-141.312-143.36-80.896 144.384-80.896-83.968-142.336 164.864 2.048-2.048-164.864 142.336 83.968 78.848-142.336 80.896 144.384 142.336-83.968-2.048 164.864 164.864-2.048-84.992 142.336 143.36 78.848-144.384 80.896 83.968 141.312-164.864-2.048 3.072 164.864z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"livemaster\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 302,\n        \"id\": 233,\n        \"name\": \"livemaster\",\n        \"prevSize\": 32,\n        \"code\": 59710\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 25\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M920.576 414.72c-41.984-29.696-93.184-45.056-144.384-44.032h-18.432c-43.008 3.072-83.968 17.408-119.808 41.984v-272.384h-99.328v700.416h99.328v-25.6c110.592 77.824 263.168 51.2 340.992-59.392s51.2-263.168-58.368-340.992zM914.432 632.832v4.096c-1.024 6.144-2.048 11.264-4.096 17.408s-4.096 12.288-7.168 17.408v2.048c-19.456 39.936-55.296 67.584-98.304 76.8l-13.312 2.048h-3.072c-5.12 0-10.24 0-15.36 0-6.144 0-12.288 0-19.456 0h-4.096c-12.288-2.048-24.576-6.144-35.84-11.264h-3.072c-11.264-5.12-21.504-12.288-31.744-21.504-9.216-8.192-17.408-18.432-24.576-29.696-3.072-5.12-6.144-11.264-9.216-17.408-16.384-36.864-15.36-78.848 2.048-115.712 21.504-44.032 63.488-74.752 112.64-79.872h14.336c74.752 1.024 136.192 60.416 138.24 136.192 3.072 7.168 3.072 13.312 2.048 19.456z\",\n          \"M304.128 486.4c30.72 14.336 55.296 39.936 68.608 70.656h108.544c-31.744-131.072-163.84-211.968-294.912-180.224-131.072 32.768-210.944 164.864-179.2 295.936s163.84 211.968 294.912 180.224c89.088-21.504 158.72-91.136 180.224-180.224h-110.592c-32.768 69.632-116.736 100.352-186.368 67.584s-100.352-116.736-67.584-186.368c32.768-70.656 116.736-100.352 186.368-67.584z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"crunchbase\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 299,\n        \"id\": 232,\n        \"name\": \"crunchbase\",\n        \"prevSize\": 32,\n        \"code\": 59707\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 26\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M869.96 450.417c0 1.024 0 2.048 0 2.048v2.048c-4.096 99.328-2.048 484.352-2.048 504.832 0 46.080-34.816 82.944-67.584 54.272l-297.984-235.52c-67.584 70.656-135.168 141.312-203.776 209.92-41.984 39.936-75.776-56.32-45.056-76.8 3.072-2.048 95.232-82.944 196.608-173.056l-220.16-174.080c-19.456-15.36-26.624-39.936-15.36-54.272 4.096-4.096 9.216-5.12 14.336-5.12 2.048 0 5.12 1.024 7.168 2.048 67.584 30.72 168.96 106.496 269.312 184.32 104.448-92.16 204.8-179.2 218.112-186.368 16.384-9.216 20.48 15.36 15.36 21.504-5.12 7.168-92.16 99.328-188.416 199.68 94.208 73.728 183.296 144.384 239.616 176.128l9.216-453.632c-7.168-7.168-227.328-304.128-250.88-329.728-37.888 33.792-237.568 261.12-247.808 270.336 45.056 5.12 238.592 16.384 360.448 29.696 30.72 3.072 51.2 25.6-14.336 25.6l-474.112-1.024c-7.168 0-14.336-5.12-16.384-11.264-3.072-7.168-1.024-14.336 4.096-19.456 2.048-2.048 342.016-380.928 370.688-404.48 5.12-5.12 13.312-8.192 20.48-8.192 8.192 1.024 15.36 4.096 20.48 9.216 4.096 4.096 183.296 253.952 271.36 375.808 20.48 28.672 26.624 48.128 26.624 63.488 0 1.024 0 2.048 0 2.048z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"homefy\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 301,\n        \"id\": 231,\n        \"name\": \"homefy\",\n        \"prevSize\": 32,\n        \"code\": 59708\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 27\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1000.448 154.624c0-63.488-43.008-106.496-106.496-106.496-37.888 0-76.8 0-114.688 0-17.408 0-17.408 0-18.432-18.432 0-22.528-21.504-36.864-40.96-26.624-12.288 6.144-16.384 18.432-15.36 30.72 1.024 10.24-2.048 14.336-13.312 14.336-117.76 0-236.544 0-354.304 0-16.384 0-16.384 0-17.408-16.384-1.024-17.408-10.24-28.672-23.552-30.72-19.456-2.048-32.768 9.216-32.768 29.696 0 17.408 0 17.408-17.408 17.408-39.936 0-78.848 0-118.784 0-59.392 1.024-103.424 45.056-103.424 103.424 0 256 0 512 0 768 0 59.392 44.032 103.424 103.424 103.424 128 0 256 0 384 0 126.976 0 254.976-1.024 381.952 1.024 53.248 1.024 106.496-39.936 106.496-106.496 0-253.952 1.024-508.928 1.024-762.88zM944.128 915.456c0 34.816-17.408 53.248-53.248 53.248-252.928 0-504.832 0-757.76 0-34.816 0-53.248-17.408-53.248-53.248 0-252.928 0-505.856 0-758.784 0-33.792 17.408-52.224 51.2-53.248 40.96 0 81.92 0 121.856 0 8.192 0 10.24 2.048 10.24 10.24-1.024 19.456 0 39.936 0 59.392 0 18.432 10.24 30.72 27.648 30.72 16.384 0 28.672-11.264 28.672-29.696 0-20.48 0-39.936 0-60.416 0-8.192 3.072-10.24 10.24-10.24 121.856 0 243.712 0 365.568 0 8.192 0 10.24 2.048 10.24 10.24-1.024 19.456 0 39.936 0 59.392 0 18.432 11.264 29.696 27.648 30.72 16.384 0 27.648-11.264 28.672-28.672 0-20.48 0-40.96 0-61.44 0-8.192 3.072-10.24 10.24-10.24 39.936 0 80.896 0 120.832 0 34.816 0 52.224 18.432 52.224 53.248 0 126.976 0 252.928 0 379.904-1.024 125.952-1.024 251.904-1.024 378.88z\",\n          \"M538.624 379.904c40.96 0 77.824 9.216 109.568 32.768 5.12 4.096 12.288 8.192 6.144 16.384s-11.264 3.072-17.408-1.024c-92.16-63.488-217.088-21.504-245.76 82.944-24.576 89.088 38.912 182.272 131.072 192.512 43.008 5.12 80.896-5.12 115.712-30.72 6.144-4.096 11.264-6.144 16.384 1.024 4.096 6.144 1.024 11.264-4.096 14.336-60.416 41.984-125.952 47.104-190.464 12.288s-96.256-90.112-92.16-164.864c6.144-88.064 91.136-159.744 171.008-155.648z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"calendly\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 297,\n        \"id\": 230,\n        \"name\": \"calendly\",\n        \"prevSize\": 32,\n        \"code\": 59709\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 28\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 515.072c28.672-27.648 57.344-56.32 84.992-83.968 119.808-118.784 238.592-238.592 358.4-357.376 19.456-19.456 38.912-37.888 57.344-57.344 7.168-7.168 11.264-7.168 18.432 0 76.8 77.824 153.6 154.624 230.4 231.424 89.088 89.088 178.176 178.176 267.264 267.264 2.048 2.048 5.12 5.12 7.168 8.192-3.072 3.072-6.144 2.048-9.216 2.048-49.152 0-98.304 0-148.48-1.024-8.192 0-10.24 2.048-10.24 10.24 0 155.648 0 311.296 0 466.944 0 9.216-3.072 12.288-12.288 12.288-230.4 0-460.8 0-691.2 0-10.24 0-11.264-4.096-11.264-12.288 0-156.672 0-314.368 1.024-471.040 0-9.216-3.072-11.264-12.288-11.264-39.936 0-79.872 0-119.808 0-3.072 0-6.144 0-9.216 0 0-2.048-1.024-3.072-1.024-4.096zM486.4 435.2c0-32.768 0-62.464 0-93.184 0-19.456-4.096-24.576-23.552-24.576-64.512 0-129.024 0-194.56 0-9.216 0-12.288 3.072-12.288 12.288 0 11.264 8.192 9.216 14.336 10.24 31.744 4.096 49.152 19.456 54.272 50.176 6.144 33.792 3.072 67.584 3.072 101.376 0 94.208 0 188.416 0 283.648 0 38.912 1.024 77.824-8.192 115.712-4.096 17.408-13.312 29.696-29.696 36.864-12.288 5.12-23.552 10.24-36.864 13.312-4.096 1.024-7.168 2.048-7.168 8.192-1.024 12.288 0 12.288 12.288 12.288 99.328 0 198.656 0 297.984 0 4.096 0 9.216 1.024 8.192-5.12 0-6.144 3.072-13.312-6.144-15.36-10.24-2.048-19.456-7.168-29.696-10.24-24.576-8.192-36.864-24.576-40.96-50.176-4.096-23.552-5.12-48.128-5.12-71.68 0-62.464 1.024-124.928 1.024-188.416 0-23.552 0-48.128 6.144-71.68 11.264-45.056 23.552-88.064 50.176-126.976 11.264-17.408 26.624-31.744 45.056-41.984 8.192-4.096 13.312-2.048 16.384 6.144 2.048 6.144 4.096 12.288 6.144 19.456 4.096 13.312 9.216 26.624 16.384 38.912 28.672 52.224 102.4 59.392 136.192 13.312 24.576-32.768 22.528-92.16-5.12-122.88-25.6-29.696-60.416-35.84-97.28-30.72-56.32 9.216-101.376 38.912-140.288 80.896-11.264 15.36-20.48 31.744-30.72 50.176z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"realtor\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 282,\n        \"id\": 229,\n        \"name\": \"realtor\",\n        \"prevSize\": 32,\n        \"code\": 59663\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 29\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0.393 341.649l170.881-170.881 170.881 170.881-170.881 170.881-170.881-170.881z\",\n          \"M852.992 512l171.008-169.984-171.008-171.008-169.984 169.984-171.008-169.984-169.984 171.008 169.984 169.984-169.984 169.984 169.984 171.008 171.008-171.008-169.984-169.984 169.984-169.984z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"tidal\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 283,\n        \"id\": 228,\n        \"name\": \"tidal\",\n        \"prevSize\": 32,\n        \"code\": 59664\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 30\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M892.928 854.016c81.92-91.136 131.072-210.944 131.072-342.016 0-282.624-229.376-512-512-512s-512 229.376-512 512 229.376 512 512 512c132.096 0 251.904-50.176 343.040-131.072l33.792 32.768c5.12 5.12 12.288 8.192 19.456 8.192s13.312-3.072 19.456-8.192c10.24-10.24 10.24-27.648 0-37.888l-34.816-33.792zM512 965.632c-250.88 0-453.632-202.752-453.632-453.632s202.752-453.632 453.632-453.632 453.632 202.752 453.632 453.632c0 115.712-43.008 221.184-114.688 301.056l-113.664-112.64c-10.24-10.24-27.648-10.24-37.888 0s-10.24 27.648 0 37.888l113.664 113.664c-79.872 70.656-185.344 113.664-301.056 113.664z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"qobuz\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 284,\n        \"id\": 227,\n        \"name\": \"qobuz\",\n        \"prevSize\": 32,\n        \"code\": 59665\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 31\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M154.624 1024v-1024h714.752v1024h-714.752zM765.952 920.576v-817.152h-507.904v818.176h507.904z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"natgeo\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 285,\n        \"id\": 226,\n        \"name\": \"natgeo\",\n        \"prevSize\": 32,\n        \"code\": 59666\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 32\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M989.184 335.872c0-222.208-145.408-287.744-145.408-287.744-72.704-32.768-198.656-47.104-329.728-48.128h-3.072c-131.072 1.024-257.024 15.36-330.752 49.152 0 0-145.408 65.536-145.408 287.744 0 51.2-1.024 111.616 1.024 176.128 5.12 217.088 38.912 431.104 240.64 484.352 92.16 24.576 172.032 29.696 236.544 26.624 115.712-6.144 181.248-40.96 181.248-40.96l-4.096-83.968c0 0-82.944 26.624-176.128 22.528-92.16-3.072-189.44-10.24-204.8-122.88-1.024-10.24-2.048-20.48-2.048-31.744 0 0 91.136 22.528 205.824 27.648 70.656 3.072 136.192-4.096 202.752-12.288 128-15.36 239.616-94.208 253.952-166.912 21.504-115.712 19.456-279.552 19.456-279.552zM818.176 622.592h-106.496v-261.12c0-55.296-23.552-82.944-69.632-82.944-51.2 0-76.8 32.768-76.8 98.304v143.36h-106.496v-143.36c0-65.536-25.6-98.304-76.8-98.304-46.080 0-69.632 27.648-69.632 82.944v261.12h-106.496v-269.312c0-55.296 14.336-98.304 41.984-131.072 28.672-32.768 66.56-49.152 113.664-49.152 54.272 0 96.256 20.48 122.88 62.464l26.624 44.032 26.624-44.032c27.648-41.984 68.608-62.464 122.88-62.464 47.104 0 84.992 16.384 113.664 49.152 27.648 32.768 41.984 75.776 41.984 131.072v269.312z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"mastodon\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 286,\n        \"id\": 225,\n        \"name\": \"mastodon\",\n        \"prevSize\": 32,\n        \"code\": 59667\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 33\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 829.44c0-165.888 0-330.752 0-496.64 1.024-2.048 0-3.072 1.024-5.12 3.072-31.744 16.384-59.392 38.912-81.92 26.624-27.648 59.392-41.984 97.28-41.984 38.912 0 77.824 0 116.736 0 2.048 0 3.072-1.024 4.096-3.072 7.168-21.504 15.36-43.008 22.528-64.512 6.144-20.48 18.432-35.84 34.816-48.128 18.432-13.312 37.888-21.504 60.416-21.504 91.136 0 182.272 0 273.408 0 4.096 0 8.192 0 11.264 1.024 18.432 3.072 35.84 10.24 50.176 21.504 16.384 12.288 27.648 27.648 33.792 47.104 7.168 22.528 15.36 45.056 22.528 68.608 1.024 2.048 2.048 3.072 4.096 3.072 37.888 0 76.8 0 114.688 0 15.36 0 30.72 2.048 45.056 7.168 50.176 18.432 80.896 54.272 91.136 106.496 1.024 5.12 1.024 10.24 2.048 15.36 0 164.864 0 328.704 0 493.568-1.024 5.12-1.024 10.24-2.048 15.36-11.264 65.536-69.632 113.664-136.192 113.664-248.832 0-498.688 0-747.52 0-18.432 0-36.864-3.072-54.272-10.24-45.056-20.48-72.704-54.272-81.92-103.424-1.024-6.144-1.024-11.264-2.048-16.384zM268.288 583.68c0 132.096 107.52 240.64 239.616 239.616 133.12-1.024 240.64-106.496 240.64-239.616s-106.496-239.616-239.616-239.616c-131.072 0-240.64 108.544-240.64 239.616z\",\n          \"M510.976 427.008c26.624 1.024 53.248 8.192 77.824 22.528 35.84 21.504 60.416 52.224 71.68 92.16 17.408 62.464-8.192 129.024-61.44 165.888-28.672 19.456-60.416 28.672-95.232 26.624-70.656-3.072-130.048-56.32-142.336-125.952-15.36-81.92 37.888-161.792 119.808-178.176 9.216-2.048 19.456-3.072 29.696-3.072z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"unsplash\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 243,\n        \"id\": 224,\n        \"name\": \"unsplash\",\n        \"prevSize\": 32,\n        \"code\": 59668\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 34\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M166.912 570.368c0-30.72 0-61.44 0-91.136 0-14.336 4.096-25.6 14.336-35.84 65.536-65.536 131.072-131.072 196.608-197.632 13.312-13.312 19.456-3.072 27.648 4.096 78.848 78.848 158.72 157.696 236.544 237.568 13.312 13.312 26.624 20.48 46.080 19.456 47.104-1.024 95.232 0 142.336-1.024 18.432 0 24.576 6.144 24.576 24.576-1.024 43.008 0 86.016 0 130.048-1.024 47.104-23.552 68.608-69.632 68.608-24.576 0-50.176 1.024-74.752 0-20.48-1.024-24.576 7.168-24.576 26.624 1.024 50.176 0 100.352 0 150.528 0 6.144 3.072 14.336-4.096 16.384-6.144 2.048-9.216-5.12-13.312-9.216-56.32-54.272-111.616-109.568-166.912-165.888-12.288-12.288-23.552-17.408-40.96-17.408-74.752 1.024-148.48 0-223.232 0-47.104 0-69.632-21.504-70.656-68.608-1.024-29.696 0-60.416 0-91.136z\",\n          \"M512 100.352c50.176 0 100.352 0 150.528 0 14.336 0 25.6 4.096 35.84 14.336 104.448 103.424 209.92 206.848 314.368 311.296 5.12 4.096 14.336 8.192 10.24 16.384-3.072 6.144-11.264 3.072-17.408 3.072-99.328 0-198.656 0-297.984 0-15.36 0-26.624-5.12-37.888-15.36-87.040-88.064-175.104-174.080-262.144-261.12-13.312-13.312-20.48-16.384-34.816-1.024-86.016 86.016-174.080 171.008-260.096 257.024-14.336 14.336-28.672 21.504-49.152 19.456-14.336-1.024-29.696 0-45.056 0-6.144 0-16.384 3.072-19.456-5.12-2.048-6.144 5.12-11.264 10.24-15.36 16.384-16.384 33.792-31.744 50.176-48.128 87.040-86.016 174.080-173.056 261.12-259.072 12.288-12.288 24.576-17.408 40.96-17.408 51.2 1.024 100.352 1.024 150.528 1.024z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"homeadvisor\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 244,\n        \"id\": 223,\n        \"name\": \"homeadvisor\",\n        \"prevSize\": 32,\n        \"code\": 59669\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 35\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 359.424c-4.096-122.88-106.496-220.16-229.376-221.184-188.416 0-377.856 0-566.272 0-21.504 0-43.008 2.048-63.488 8.192-107.52 30.72-174.080 133.12-163.84 252.928 8.192 96.256 97.28 192.512 193.536 198.656 46.080 3.072 65.536 21.504 78.848 62.464 25.6 74.752 55.296 148.48 84.992 225.28 16.384-12.288 18.432-26.624 22.528-37.888 24.576-64.512 50.176-128 71.68-193.536 12.288-37.888 30.72-53.248 72.704-52.224 93.184 3.072 187.392 2.048 281.6-2.048 128-6.144 221.184-112.64 217.088-240.64zM783.36 494.592c-113.664 1.024-227.328 1.024-342.016 0-25.6 0-38.912 5.12-44.032 32.768-8.192 43.008-21.504 84.992-34.816 137.216-12.288-51.2-24.576-93.184-32.768-136.192-5.12-25.6-16.384-35.84-43.008-33.792-29.696 2.048-59.392 3.072-88.064-5.12-56.32-16.384-93.184-65.536-90.112-124.928s43.008-105.472 101.376-115.712c13.312-2.048 25.6-4.096 38.912-4.096 174.080 0 349.184 0 523.264 0 55.296 0 102.4 18.432 129.024 71.68 40.96 83.968-19.456 177.152-117.76 178.176z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"angieslist\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 245,\n        \"id\": 222,\n        \"name\": \"angieslist\",\n        \"prevSize\": 32,\n        \"code\": 59670\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 36\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 356.352c0-2.048-1.024-5.12-1.024-7.168 0-1.024 0-2.048 0-3.072-1.024-5.12-3.072-10.24-6.144-15.36 0 0 0-1.024-1.024-1.024 0-1.024-1.024-1.024-1.024-1.024-3.072-4.096-7.168-9.216-12.288-12.288v0c0 0 0 0 0 0l-462.848-307.2c-2.048-1.024-3.072-2.048-5.12-2.048-2.048-1.024-3.072-2.048-5.12-2.048-11.264-4.096-22.528-4.096-33.792 0-2.048 1.024-3.072 1.024-5.12 2.048s-3.072 1.024-5.12 2.048l-462.848 307.2c0 0 0 0 0 0v0c-5.12 3.072-8.192 7.168-12.288 12.288 0 1.024-1.024 1.024-1.024 1.024s0 1.024-1.024 1.024c-3.072 5.12-5.12 10.24-6.144 15.36 0 1.024 0 2.048 0 3.072 0 2.048-1.024 5.12-1.024 7.168v312.32c0 2.048 1.024 5.12 1.024 7.168 0 1.024 0 2.048 0 3.072 1.024 5.12 3.072 10.24 6.144 15.36 0 0 0 1.024 1.024 1.024 0 1.024 1.024 1.024 1.024 1.024 3.072 4.096 7.168 9.216 12.288 12.288v0c0 0 0 0 0 0l462.848 307.2c2.048 1.024 3.072 2.048 5.12 2.048 2.048 1.024 3.072 2.048 5.12 2.048 5.12 2.048 11.264 3.072 16.384 3.072s11.264-1.024 16.384-3.072c2.048-1.024 3.072-1.024 5.12-2.048s3.072-1.024 5.12-2.048l463.872-307.2c1.024-1.024 1.024-2.048 2.048-2.048 2.048-1.024 3.072-3.072 5.12-4.096 1.024-1.024 3.072-3.072 4.096-5.12 1.024-1.024 2.048-2.048 2.048-3.072 0 0 0-1.024 1.024-1.024 3.072-5.12 5.12-10.24 6.144-15.36 0-1.024 0-2.048 0-3.072 0-2.048 1.024-5.12 1.024-7.168v-311.296zM512 609.28l-145.408-97.28 145.408-97.28 145.408 97.28-145.408 97.28zM560.128 329.728v-191.488l327.68 217.088-144.384 97.28-183.296-122.88zM463.872 329.728l-183.296 122.88-144.384-97.28 327.68-217.088v191.488zM193.536 512l-96.256 64.512v-130.048l96.256 65.536zM280.576 570.368l183.296 122.88v191.488l-327.68-217.088 144.384-97.28zM560.128 693.248l183.296-122.88 144.384 97.28-327.68 217.088v-191.488zM830.464 512l96.256-64.512v130.048l-96.256-65.536z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"codepen\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 246,\n        \"id\": 221,\n        \"name\": \"codepen\",\n        \"prevSize\": 32,\n        \"code\": 59671\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 37\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1019.904 548.864c-16.384-48.128-67.584-73.728-114.688-58.368l-93.184 30.72c-20.48-62.464-41.984-129.024-62.464-191.488 0 0 0 0 0 0s0 0 0 0c55.296-18.432 92.16-29.696 92.16-29.696 48.128-16.384 73.728-67.584 58.368-114.688-16.384-48.128-67.584-73.728-114.688-58.368l-92.16 29.696c-18.432-55.296-29.696-91.136-29.696-91.136-16.384-48.128-67.584-73.728-114.688-58.368-48.128 13.312-73.728 64.512-59.392 112.64l29.696 91.136-191.488 62.464c-18.432-55.296-29.696-91.136-29.696-91.136-16.384-48.128-67.584-73.728-114.688-58.368-48.128 16.384-73.728 67.584-58.368 114.688l29.696 92.16-94.208 30.72c-45.056 14.336-70.656 63.488-56.32 109.568 14.336 49.152 65.536 77.824 112.64 62.464 0 0 37.888-12.288 94.208-30.72l62.464 192.512-95.232 30.72c-44.032 16.384-69.632 64.512-56.32 110.592 14.336 49.152 65.536 77.824 112.64 62.464 0 0 37.888-12.288 95.232-30.72v0c0 0 0 0 0 0l30.72 94.208c16.384 44.032 64.512 69.632 110.592 56.32 49.152-14.336 77.824-65.536 62.464-112.64 0 0-12.288-36.864-30.72-94.208 0 0 0 0 0 0s0 0 0-1.024c62.464-20.48 129.024-41.984 191.488-62.464l30.72 95.232c16.384 44.032 64.512 69.632 110.592 56.32 49.152-14.336 77.824-65.536 62.464-112.64 0 0-12.288-37.888-30.72-94.208 0 0 1.024 0 1.024 0s0 0 0 0c55.296-18.432 92.16-29.696 92.16-29.696 48.128-16.384 74.752-67.584 59.392-114.688zM446.464 638.976c-20.48-62.464-41.984-129.024-62.464-191.488 0 0 0 0 0 0s0 0 0 0c62.464-20.48 129.024-41.984 191.488-62.464l62.464 191.488-191.488 62.464z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"slack\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 247,\n        \"id\": 220,\n        \"name\": \"slack\",\n        \"prevSize\": 32,\n        \"code\": 59672\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 38\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-282.624 0-512 229.376-512 512s229.376 512 512 512 512-229.376 512-512-229.376-512-512-512zM208.896 755.712c-65.536-80.896-95.232-182.272-83.968-285.696s61.44-195.584 142.336-261.12c58.368-47.104 128-75.776 202.752-83.968l5.12 50.176c-64.512 7.168-125.952 31.744-177.152 72.704-70.656 56.32-114.688 137.216-123.904 227.328s16.384 178.176 72.704 248.832l-37.888 31.744zM815.104 755.712l-38.912-31.744c40.96-51.2 66.56-111.616 72.704-176.128 10.24-96.256-21.504-186.368-78.848-254.976l-63.488 62.464c4.096 4.096 7.168 9.216 10.24 13.312 78.848 112.64 51.2 269.312-61.44 348.16-36.864 25.6-76.8 39.936-118.784 44.032v88.064c66.56-5.12 132.096-29.696 187.392-73.728l31.744 38.912c-69.632 57.344-156.672 86.016-243.712 86.016s-173.056-28.672-244.736-86.016l31.744-38.912c55.296 44.032 120.832 68.608 187.392 73.728v-88.064c-69.632-7.168-136.192-43.008-179.2-105.472-60.416-86.016-60.416-201.728 0-287.744l40.96 28.672c-48.128 68.608-48.128 160.768 0 229.376 63.488 90.112 188.416 112.64 278.528 49.152s112.64-188.416 49.152-278.528c-63.488-90.112-188.416-112.64-278.528-49.152l-28.672-39.936c94.208-65.536 218.112-57.344 302.080 12.288l62.464-62.464c-50.176-44.032-114.688-73.728-186.368-80.896l5.12-50.176c214.016 22.528 369.664 214.016 347.136 427.008-8.192 74.752-37.888 144.384-83.968 202.752zM569.344 493.568c-5.12-15.36-15.36-27.648-29.696-34.816s-30.72-8.192-46.080-4.096c-15.36 5.12-27.648 15.36-34.816 29.696-15.36 29.696-3.072 65.536 25.6 80.896l-22.528 45.056c-26.624-13.312-46.080-35.84-54.272-64.512-9.216-27.648-6.144-58.368 7.168-83.968 13.312-26.624 35.84-46.080 64.512-54.272 27.648-9.216 58.368-6.144 83.968 7.168 26.624 13.312 46.080 35.84 54.272 64.512 9.216 27.648 6.144 58.368-7.168 83.968-10.24 20.48-27.648 36.864-48.128 48.128l-22.528-45.056c11.264-6.144 20.48-14.336 25.6-25.6 7.168-16.384 8.192-31.744 4.096-47.104z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"openaigym\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 248,\n        \"id\": 219,\n        \"name\": \"openaigym\",\n        \"prevSize\": 32,\n        \"code\": 59673\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 39\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M354.304 647.168c0 0 0 0 0 0-1.024 16.384-1.024 31.744-1.024 48.128 0 90.112-1.024 181.248 0 271.36 0 34.816 9.216 44.032 44.032 45.056 32.768 1.024 65.536 1.024 97.28 0 46.080-1.024 55.296-10.24 55.296-57.344 0-87.040 0-175.104 0-262.144 0-54.272-1.024-109.568 11.264-163.84 17.408-72.704 76.8-111.616 155.648-104.448 61.44 5.12 98.304 50.176 105.472 123.904 7.168 80.896 3.072 161.792 4.096 242.688 1.024 59.392 0 118.784 1.024 179.2 0 30.72 10.24 40.96 41.984 41.984 35.84 1.024 71.68 1.024 107.52 1.024 38.912-1.024 47.104-9.216 47.104-48.128 0-78.848 1.024-157.696 0-235.52-1.024-82.944 5.12-166.912-4.096-249.856-13.312-107.52-67.584-179.2-161.792-201.728-104.448-24.576-203.776-16.384-284.672 66.56-15.36 16.384-23.552 13.312-31.744-8.192-2.048-5.12-4.096-10.24-4.096-16.384-1.024-26.624-18.432-34.816-41.984-35.84-32.768-1.024-65.536-1.024-97.28 0-34.816 1.024-44.032 11.264-44.032 47.104 0 106.496 0 211.968 0 316.416zM0 512c0 0 1.024 0 1.024 0 0 151.552 0 303.104 0 454.656 0 34.816 8.192 43.008 44.032 44.032 36.864 1.024 74.752 2.048 111.616 2.048 50.176 0 60.416-9.216 60.416-59.392 0-295.936 0-592.896-1.024-888.832 0-9.216-1.024-19.456-2.048-28.672-2.048-15.36-13.312-25.6-30.72-25.6-49.152 0-98.304 0-147.456 0-20.48 0-32.768 11.264-33.792 31.744-2.048 11.264-2.048 21.504-2.048 31.744 0 146.432 0 292.864 0 438.272z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"logmein\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 249,\n        \"id\": 218,\n        \"name\": \"logmein\",\n        \"prevSize\": 32,\n        \"code\": 59674\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 40\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M889.856 580.608c0-84.992 0-168.96 0-253.952 0-13.312-3.072-16.384-16.384-16.384-156.672 0-313.344 0-470.016 0-13.312 0-31.744 6.144-39.936-3.072-7.168-8.192-2.048-25.6-2.048-38.912 0-44.032 28.672-72.704 72.704-72.704 22.528 0 46.080 0 68.608 0 9.216 0 13.312-2.048 13.312-12.288-1.024-50.176-1.024-101.376 0-151.552 0-11.264-4.096-13.312-13.312-13.312-41.984 1.024-83.968 0-125.952 1.024-51.2 1.024-98.304 14.336-141.312 40.96-67.584 43.008-108.544 101.376-104.448 185.344 1.024 17.408 0 34.816 0 53.248 0 9.216-3.072 12.288-12.288 12.288-24.576 0-49.152 0-73.728 0-11.264 0-14.336 4.096-14.336 14.336 1.024 46.080 1.024 91.136 0 137.216 0 11.264 4.096 14.336 15.36 14.336 23.552-1.024 48.128 0 71.68 0 10.24 0 13.312 3.072 13.312 13.312-1.024 115.712-1.024 232.448-1.024 348.16 0 12.288-4.096 14.336-15.36 14.336-23.552-1.024-47.104 0-70.656 0-11.264 0-14.336 4.096-14.336 14.336 0 48.128 1.024 96.256 0 143.36 0 11.264 3.072 14.336 14.336 14.336 134.144 0 267.264 0 401.408 0 10.24 0 14.336-2.048 14.336-13.312-1.024-48.128-1.024-96.256 0-143.36 0-11.264-4.096-14.336-14.336-14.336-23.552 1.024-48.128 0-71.68 0-9.216 0-13.312-3.072-13.312-12.288 0-117.76 0-235.52 0-353.28 0-9.216 3.072-11.264 12.288-11.264 91.136 0 183.296 0 274.432 0 10.24 0 12.288 4.096 12.288 13.312 0 116.736 0 234.496 0 351.232 0 9.216-3.072 13.312-13.312 13.312-23.552-1.024-48.128 0-71.68 0-10.24 0-13.312 3.072-12.288 13.312 0 48.128 0 97.28 0 145.408 0 10.24 3.072 12.288 12.288 12.288 135.168 0 269.312 0 404.48 0 9.216 0 11.264-3.072 11.264-12.288 0-49.152 0-98.304 0-147.456 0-9.216-2.048-12.288-11.264-12.288-22.528 0-45.056 0-67.584 0-27.648 0-23.552 2.048-23.552-22.528 2.048-83.968 2.048-166.912 2.048-250.88zM662.528 114.688c0 62.464 50.176 111.616 112.64 111.616s112.64-50.176 112.64-112.64c1.024-63.488-49.152-113.664-112.64-113.664s-112.64 50.176-112.64 114.688z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"fiverr\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 250,\n        \"id\": 217,\n        \"name\": \"fiverr\",\n        \"prevSize\": 32,\n        \"code\": 59675\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 41\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M657.408 456.704c10.24 0 21.504 3.072 28.672 8.192 26.624 13.312 55.296 10.24 78.848-3.072 41.984-21.504 55.296-73.728 31.744-113.664-21.504-41.984-73.728-55.296-113.664-31.744-23.552 13.312-39.936 36.864-41.984 65.536 0 10.24-3.072 21.504-8.192 28.672-15.36 26.624-50.176 36.864-76.8 21.504s-36.864-50.176-21.504-76.8c5.12-8.192 13.312-15.36 21.504-21.504 23.552-15.36 36.864-39.936 36.864-68.608 0-47.104-39.936-83.968-83.968-83.968-47.104 0-83.968 39.936-83.968 83.968 0 26.624 13.312 53.248 36.864 68.608 8.192 5.12 15.36 13.312 21.504 21.504 13.312 26.624 5.12 60.416-21.504 76.8s-60.416 5.12-76.8-21.504c-5.12-8.192-8.192-18.432-8.192-28.672-3.072-26.624-18.432-53.248-41.984-65.536-39.936-21.504-90.112-8.192-113.664 31.744-21.504 39.936-8.192 90.112 31.744 113.664 23.552 13.312 55.296 15.36 78.848 3.072 8.192-5.12 18.432-8.192 28.672-8.192 28.672 0 55.296 23.552 55.296 55.296 0 28.672-23.552 55.296-55.296 55.296-10.24 0-21.504-3.072-28.672-8.192-26.624-13.312-55.296-10.24-78.848 3.072-41.984 21.504-55.296 73.728-31.744 113.664 21.504 41.984 73.728 55.296 113.664 31.744 23.552-13.312 39.936-36.864 41.984-65.536 0-10.24 3.072-21.504 8.192-28.672 15.36-26.624 50.176-36.864 76.8-21.504s36.864 50.176 21.504 76.8c-5.12 8.192-13.312 15.36-21.504 21.504-23.552 15.36-36.864 39.936-36.864 68.608 0 47.104 39.936 83.968 83.968 83.968 47.104 0 83.968-39.936 83.968-83.968 0-26.624-13.312-53.248-36.864-68.608-8.192-5.12-15.36-13.312-21.504-21.504-13.312-26.624-5.12-60.416 21.504-76.8 26.624-15.36 60.416-5.12 76.8 21.504 5.12 8.192 8.192 18.432 8.192 28.672 3.072 26.624 18.432 53.248 41.984 65.536 39.936 21.504 90.112 8.192 113.664-31.744 21.504-39.936 8.192-90.112-31.744-113.664-23.552-13.312-55.296-15.36-78.848-3.072-8.192 5.12-18.432 8.192-28.672 8.192-28.672 0-55.296-26.624-55.296-55.296s23.552-55.296 55.296-55.296z\",\n          \"M960.512 512c41.984-78.848 41.984-174.080-5.12-256-45.056-78.848-129.024-129.024-219.136-132.096-47.104-76.8-132.096-123.904-224.256-123.904s-177.152 47.104-224.256 123.904c-90.112 3.072-174.080 53.248-219.136 132.096-47.104 78.848-47.104 177.152-5.12 256-10.24 18.432-15.36 36.864-21.504 55.296-18.432 68.608-7.168 140.288 26.624 200.704 45.056 78.848 129.024 129.024 219.136 132.096 47.104 76.8 132.096 123.904 224.256 123.904s177.152-47.104 224.256-123.904c90.112-3.072 174.080-53.248 219.136-132.096 34.816-60.416 45.056-132.096 26.624-200.704-5.12-18.432-13.312-36.864-21.504-55.296zM891.904 590.848c13.312 45.056 5.12 90.112-13.312 132.096-31.744 53.248-87.040 87.040-150.528 87.040-13.312 0-28.672 0-45.056-5.12-21.504 73.728-87.040 129.024-168.96 129.024s-150.528-55.296-168.96-129.024c-13.312 3.072-28.672 5.12-45.056 5.12-60.416 0-118.784-34.816-150.528-87.040-23.552-39.936-31.744-87.040-18.432-132.096 8.192-31.744 23.552-58.368 45.056-78.848-55.296-55.296-68.608-140.288-28.672-210.944 31.744-53.248 87.040-87.040 150.528-87.040 13.312 0 28.672 0 45.056 5.12 21.504-73.728 87.040-129.024 168.96-129.024s150.528 55.296 168.96 129.024c13.312-3.072 28.672-5.12 45.056-5.12 60.416 0 118.784 34.816 150.528 87.040 39.936 71.68 26.624 155.648-28.672 210.944 20.48 21.504 35.84 47.104 44.032 78.848z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"gotomeeting\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 287,\n        \"id\": 216,\n        \"name\": \"gotomeeting\",\n        \"prevSize\": 32,\n        \"code\": 59676\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 42\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M523.264 688.128c20.48 0 51.2-3.072 80.896-8.192 237.568-38.912 421.888-259.072 419.84-500.736 0-28.672-19.456-49.152-45.056-50.176-25.6 0-45.056 20.48-46.080 49.152 0 20.48-2.048 41.984-5.12 61.44-32.768 189.44-176.128 328.704-366.592 351.232-155.648 18.432-282.624-37.888-380.928-159.744-59.392-73.728-87.040-159.744-89.088-253.952-1.024-29.696-20.48-49.152-46.080-49.152-26.624 1.024-46.080 21.504-45.056 52.224 1.024 27.648 3.072 55.296 7.168 81.92 44.032 248.832 256 427.008 516.096 425.984z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"aliexpress\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 288,\n        \"id\": 215,\n        \"name\": \"aliexpress\",\n        \"prevSize\": 32,\n        \"code\": 59677\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 43\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M651.264 610.304c157.696 41.984 276.48 135.168 361.472 272.384-3.072 3.072-5.12 2.048-6.144 2.048-45.056 0-89.088 0-134.144 0-4.096 0-7.168-1.024-9.216-4.096-69.632-79.872-155.648-134.144-259.072-157.696-101.376-22.528-199.68-11.264-292.864 32.768-62.464 29.696-115.712 70.656-159.744 122.88-3.072 4.096-7.168 6.144-12.288 6.144-44.032 0-87.040 0-131.072 0-2.048 0-4.096 0-8.192 0 83.968-142.336 206.848-230.4 363.52-274.432 0-1.024-2.048-1.024-3.072-1.024-89.088-23.552-166.912-67.584-234.496-130.048-28.672-27.648-54.272-58.368-77.824-90.112-2.048-3.072-2.048-5.12 0-8.192 16.384-24.576 34.816-47.104 55.296-67.584 26.624-27.648 56.32-52.224 87.040-73.728 3.072-2.048 4.096-4.096 5.12-8.192 7.168-37.888 29.696-63.488 65.536-77.824 33.792-13.312 65.536-5.12 92.16 18.432 32.768 27.648 44.032 68.608 30.72 105.472-14.336 39.936-51.2 65.536-93.184 65.536-11.264 0-22.528-1.024-32.768-7.168-2.048-1.024-4.096-2.048-6.144 0-16.384 14.336-33.792 25.6-50.176 40.96-8.192 7.168-7.168 8.192 0 14.336 37.888 33.792 77.824 63.488 123.904 83.968 69.632 29.696 141.312 43.008 217.088 36.864 97.28-8.192 183.296-44.032 257.024-109.568 7.168-6.144 13.312-12.288 20.48-17.408 2.048-2.048 1.024-4.096 1.024-6.144 0-13.312 0-27.648 4.096-40.96 13.312-44.032 52.224-71.68 101.376-70.656 56.32 2.048 86.016 43.008 94.208 80.896 9.216 43.008-14.336 89.088-55.296 109.568-17.408 8.192-35.84 11.264-54.272 10.24 0 0 0 0-1.024 0-9.216-5.12-14.336 2.048-19.456 7.168-68.608 63.488-146.432 109.568-237.568 132.096 0 2.048-1.024 2.048-2.048 3.072 0-1.024 0 0 0 0z\",\n          \"M444.416 242.688c0-28.672-6.144-55.296-22.528-78.848-3.072-4.096-5.12-8.192-7.168-12.288-2.048-3.072-1.024-4.096 2.048-5.12 15.36-2.048 29.696-3.072 45.056-4.096 39.936-4.096 78.848-3.072 117.76 2.048 86.016 11.264 164.864 40.96 237.568 89.088 4.096 3.072 8.192 6.144 13.312 9.216 2.048 1.024 3.072 2.048 0 4.096-31.744 23.552-49.152 55.296-58.368 92.16-1.024 5.12-3.072 2.048-5.12 1.024-17.408-13.312-35.84-24.576-55.296-33.792-52.224-26.624-106.496-43.008-165.888-47.104-26.624-2.048-53.248-2.048-79.872-1.024-6.144 0-12.288 1.024-19.456 3.072-3.072 1.024-3.072 0-3.072-3.072 1.024-6.144 1.024-10.24 1.024-15.36z\",\n          \"M612.352 393.216c0 55.296-43.008 98.304-99.328 98.304-50.176 0-98.304-48.128-97.28-99.328s47.104-97.28 99.328-97.28c54.272 0 97.28 43.008 97.28 98.304z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"guru\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 289,\n        \"id\": 214,\n        \"name\": \"guru\",\n        \"prevSize\": 32,\n        \"code\": 59678\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 44\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M996.352 784.384c-1.024-1.024-1.024-2.048-2.048-3.072 0 0 0 0 0-1.024-3.072-5.12-5.12-10.24-8.192-15.36 0 0 0 0 0 0-1.024-1.024-1.024-2.048-2.048-3.072 0 0 0 0 0 0-1.024-1.024-1.024-2.048-2.048-3.072 0 0 0 0 0 0-1.024-1.024-1.024-2.048-2.048-3.072 0 0 0 0 0 0-1.024-1.024-1.024-2.048-2.048-3.072 0 0 0 0 0 0-1.024-1.024-1.024-2.048-2.048-2.048 0 0 0 0 0 0-1.024-1.024-1.024-1.024-2.048-2.048 0 0 0 0 0 0-1.024-1.024-1.024-1.024-2.048-2.048 0 0 0 0 0 0-1.024-1.024-1.024-1.024-2.048-2.048 0 0 0 0 0 0-1.024-1.024-2.048-1.024-2.048-2.048 0 0 0 0 0 0-2.048-1.024-3.072-2.048-5.12-2.048-15.36-5.12-35.84 10.24-50.176 18.432s-36.864 17.408-39.936 33.792c-4.096 15.36 11.264 37.888 20.48 54.272 4.096 8.192 19.456 19.456 25.6 25.6 26.624 17.408 49.152 36.864 47.104 70.656 0 0 0 0 0 0 0 1.024 0 2.048 0 4.096s0 4.096-1.024 5.12c37.888-43.008 41.984-71.68 45.056-109.568 1.024-10.24-1.024-24.576-2.048-32.768-4.096-10.24-6.144-18.432-11.264-25.6z\",\n          \"M583.68 86.016c-1.024-1.024-1.024-2.048-2.048-3.072 0 0 0 0 0-1.024-1.024-1.024-2.048-2.048-2.048-3.072 0 0 0 0 0 0-1.024-1.024-2.048-2.048-3.072-2.048 0 0 0 0 0 0-1.024-1.024-2.048-1.024-3.072-2.048 0 0 0 0 0 0s0 0 0 0c-9.216-3.072-17.408-3.072-25.6 2.048l-51.2 29.696c-12.288 7.168-16.384 22.528-9.216 34.816l302.080 520.192 95.232-55.296-301.056-520.192z\",\n          \"M894.976 622.592c-1.024 0-2.048 1.024-2.048 1.024v0c-31.744 18.432-61.44 35.84-93.184 54.272l53.248 91.136 2.048 4.096 95.232-55.296-55.296-95.232z\",\n          \"M451.584 308.224l-96.256-53.248-256 451.584 96.256 54.272 2.048-4.096z\",\n          \"M491.52 237.568c7.168-12.288 3.072-27.648-9.216-34.816l-51.2-28.672c-9.216-5.12-19.456-4.096-26.624 1.024 0 0 0 0 0 0-1.024 1.024-2.048 1.024-3.072 2.048 0 0 0 0 0 0-1.024 1.024-2.048 2.048-2.048 3.072 0 0 0 0 0 1.024-1.024 1.024-1.024 2.048-2.048 3.072l-28.672 51.2 96.256 53.248 26.624-51.2z\",\n          \"M34.816 927.744l150.528-150.528c-31.744-18.432-63.488-35.84-96.256-54.272l-54.272 204.8z\",\n          \"M205.824 467.968v0l2.048-3.072h-205.824l-2.048 109.568h145.408z\",\n          \"M649.216 467.968l-2.048-2.048-258.048-1.024-2.048 3.072-59.392 107.52h384l-62.464-107.52z\",\n          \"M834.56 465.92l65.536 110.592h123.904v-110.592z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"appstore\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 290,\n        \"id\": 213,\n        \"name\": \"appstore\",\n        \"prevSize\": 32,\n        \"code\": 59679\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 45\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M103.424 614.4c0-64.512 0-129.024 0-193.536 0-10.24 0-10.24-9.216-15.36-12.288-7.168-25.6-13.312-37.888-20.48-4.096-1.024-5.12-3.072-5.12-7.168 0-33.792 0-68.608 0-102.4 0-6.144 0-6.144 6.144-3.072 11.264 6.144 23.552 11.264 34.816 17.408 30.72 15.36 61.44 30.72 92.16 47.104 65.536 32.768 130.048 65.536 195.584 99.328 17.408 8.192 33.792 17.408 51.2 26.624 6.144 3.072 6.144 3.072 10.24-2.048 40.96-45.056 81.92-91.136 123.904-136.192 36.864-40.96 74.752-81.92 111.616-122.88 1.024-1.024 2.048-2.048 3.072-3.072 4.096-4.096 4.096-4.096 9.216-1.024 15.36 8.192 31.744 15.36 47.104 23.552 39.936 20.48 79.872 39.936 119.808 60.416 36.864 18.432 74.752 37.888 111.616 56.32 4.096 2.048 6.144 5.12 6.144 10.24 0 32.768 0 65.536 0 98.304 0 0 0 1.024 0 1.024 0 5.12 0 6.144-6.144 3.072-11.264-6.144-22.528-11.264-34.816-17.408-2.048-1.024-4.096-2.048-6.144-3.072-4.096-1.024-5.12-1.024-5.12 3.072 0 2.048 0 5.12 0 7.168 0 122.88 0 245.76 0 368.64 0 2.048 0 4.096 0 6.144 1.024 5.12-2.048 7.168-6.144 9.216-28.672 14.336-57.344 28.672-86.016 43.008-78.848 39.936-157.696 79.872-236.544 119.808-24.576 12.288-49.152 24.576-72.704 36.864-5.12 3.072-9.216 3.072-15.36 0-66.56-33.792-134.144-67.584-200.704-101.376-64.512-32.768-128-64.512-192.512-97.28-2.048-1.024-3.072-2.048-5.12-2.048-2.048-1.024-3.072-3.072-3.072-5.12s0-4.096 0-6.144c-0-68.608-0-133.12-0-197.632zM748.544 609.28c1.024 2.048 1.024 5.12 1.024 7.168 0 56.32 0 112.64 0 167.936 0 8.192 1.024 9.216 8.192 5.12 27.648-13.312 54.272-27.648 81.92-40.96 1.024 0 1.024-1.024 2.048-1.024 4.096-2.048 6.144-4.096 6.144-9.216 0-2.048 0-4.096 0-6.144 0-63.488 0-125.952 0-189.44 0-49.152 0-98.304 0-147.456 0-6.144-2.048-9.216-7.168-12.288-41.984-21.504-83.968-43.008-125.952-63.488-1.024 0-2.048-1.024-3.072-1.024-4.096-1.024-5.12-1.024-7.168 0-1.024 1.024-2.048 2.048-3.072 3.072-36.864 39.936-73.728 79.872-109.568 119.808-41.984 46.080-84.992 93.184-126.976 139.264-5.12 5.12-5.12 5.12-11.264 2.048-31.744-16.384-63.488-31.744-95.232-48.128-48.128-24.576-97.28-49.152-145.408-73.728-10.24-5.12-10.24-5.12-10.24 6.144 0 93.184 0 186.368 0 278.528 0 2.048 0 3.072 0 5.12 0 3.072 1.024 5.12 4.096 6.144 1.024 1.024 3.072 1.024 4.096 2.048 84.992 43.008 171.008 84.992 256 128 12.288 6.144 25.6 12.288 37.888 19.456 5.12 3.072 9.216 3.072 14.336 0 12.288-6.144 24.576-12.288 36.864-18.432 28.672-14.336 57.344-28.672 86.016-43.008 5.12-2.048 7.168-5.12 6.144-10.24 0-2.048 0-4.096 0-6.144 0-55.296 0-109.568 0-164.864 0-5.12 2.048-8.192 6.144-10.24 28.672-14.336 58.368-28.672 87.040-43.008 3.072-0 5.12-2.048 7.168-1.024z\",\n          \"M228.352 133.12c0-17.408 0-34.816 0-53.248 0-4.096 1.024-8.192 4.096-11.264 19.456-21.504 38.912-43.008 59.392-65.536 4.096-4.096 4.096-4.096 9.216-2.048 32.768 16.384 64.512 32.768 97.28 49.152 4.096 2.048 5.12 4.096 5.12 8.192 0 31.744 0 62.464 0 94.208 0 4.096-2.048 7.168-4.096 10.24-20.48 22.528-40.96 46.080-61.44 68.608-2.048 2.048-4.096 5.12-6.144 7.168-4.096 4.096-4.096 4.096-9.216 2.048-13.312-6.144-25.6-13.312-38.912-19.456-16.384-8.192-31.744-16.384-48.128-23.552-5.12-2.048-6.144-5.12-6.144-10.24-1.024-18.432-1.024-36.864-1.024-54.272z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"homes\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 291,\n        \"id\": 212,\n        \"name\": \"homes\",\n        \"prevSize\": 32,\n        \"code\": 59680\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 46\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M306.176 228.352c-89.088 0-178.176 0-266.24 0-27.648 0-38.912 10.24-38.912 38.912 0 117.76-1.024 234.496 0 352.256 1.024 106.496 74.752 177.152 181.248 177.152 171.008 0 342.016 0 514.048 0 34.816 0 44.032-8.192 44.032-41.984 0-114.688 0-228.352 0-343.040 0-110.592-71.68-182.272-182.272-182.272-84.992-2.048-167.936-1.024-251.904-1.024zM1024 513.024c0 0 0 0 0 0 0-81.92 0-164.864 0-246.784 0-12.288-1.024-24.576-13.312-30.72-13.312-7.168-22.528 3.072-31.744 9.216-1.024 1.024-3.072 2.048-4.096 3.072-64.512 52.224-128 105.472-192.512 157.696-9.216 8.192-14.336 16.384-13.312 28.672 0 54.272 0 108.544 0 163.84 0 12.288 4.096 19.456 13.312 26.624 39.936 30.72 78.848 62.464 117.76 94.208 27.648 22.528 55.296 45.056 83.968 65.536 21.504 15.36 37.888 7.168 39.936-19.456 0-6.144 0-12.288 0-17.408-0-78.848-0-156.672-0-234.496z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"zoom\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 256,\n        \"id\": 211,\n        \"name\": \"zoom\",\n        \"prevSize\": 32,\n        \"code\": 59681\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 47\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M666.624 262.144c17.408 3.072 33.792 9.216 49.152 16.384 55.296 27.648 76.8 80.896 54.272 139.264-12.288 33.792-32.768 63.488-54.272 91.136-31.744 39.936-64.512 79.872-97.28 119.808-8.192 9.216-15.36 19.456-21.504 30.72-13.312 22.528-6.144 33.792 19.456 33.792 35.84-1.024 70.656-6.144 106.496-12.288 93.184-17.408 182.272-49.152 270.336-84.992 4.096-2.048 7.168-3.072 11.264-4.096 0 0 0 0 0 0 5.12-3.072 10.24-6.144 19.456-7.168-4.096 6.144-9.216 8.192-13.312 10.24-120.832 67.584-245.76 126.976-381.952 157.696-24.576 5.12-49.152 7.168-74.752 4.096-38.912-5.12-57.344-31.744-46.080-69.632 9.216-32.768 30.72-58.368 52.224-82.944 40.96-48.128 83.968-93.184 120.832-143.36 10.24-14.336 19.456-28.672 28.672-43.008 7.168-12.288 12.288-25.6 12.288-39.936 0 0 0 0 0 0s0 0 0 0c-1.024-3.072-1.024-5.12-2.048-8.192-5.12-15.36-16.384-24.576-29.696-32.768-31.744-17.408-67.584-26.624-102.4-36.864-7.168-2.048-12.288 3.072-17.408 6.144s0 5.12 2.048 7.168c8.192 7.168 16.384 13.312 25.6 21.504-30.72 6.144-59.392 11.264-88.064 17.408-81.92 17.408-160.768 40.96-239.616 68.608-7.168 3.072-11.264 5.12-6.144 13.312 13.312 19.456 8.192 34.816-10.24 49.152-11.264 8.192-20.48 19.456-31.744 30.72 70.656 18.432 134.144 7.168 192.512-30.72 6.144-4.096 4.096-6.144 0-10.24-3.072-3.072-6.144-5.12-9.216-8.192 19.456-4.096 41.984 19.456 41.984 44.032 0 5.12-3.072 6.144-7.168 6.144s-6.144 0-7.168-5.12c-4.096-17.408-4.096-17.408-18.432-8.192-64.512 39.936-132.096 50.176-204.8 29.696-9.216-2.048-14.336-4.096-13.312 9.216 1.024 16.384 5.12 33.792-1.024 47.104s-25.6 14.336-38.912 22.528c-17.408 11.264-33.792 22.528-47.104 39.936-9.216 12.288-13.312 24.576-10.24 39.936v0c3.072 3.072 5.12 7.168 5.12 11.264 25.6 19.456 55.296 23.552 84.992 24.576 71.68 3.072 141.312-11.264 209.92-27.648 2.048-1.024 4.096-1.024 7.168-1.024 1.024 0 1.024 1.024 4.096 1.024-38.912 19.456-76.8 36.864-116.736 48.128-52.224 15.36-105.472 24.576-159.744 23.552-23.552 0-46.080-5.12-68.608-13.312-50.176-20.48-72.704-62.464-61.44-115.712 6.144-36.864 23.552-66.56 43.008-95.232 80.896-119.808 193.536-197.632 327.68-246.784 53.248-19.456 107.52-33.792 162.816-40.96 0-1.024 64.512-7.168 129.024 4.096z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"alibaba\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 257,\n        \"id\": 210,\n        \"name\": \"alibaba\",\n        \"prevSize\": 32,\n        \"code\": 59682\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 48\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M4.096 570.368v1.024c1.024 7.168 2.048 14.336 3.072 21.504 2.048 11.264 4.096 21.504 6.144 33.792 5.12 23.552 12.288 47.104 21.504 69.632 6.144 16.384 13.312 32.768 21.504 48.128 8.192 16.384 17.408 32.768 27.648 48.128 16.384 24.576 34.816 48.128 55.296 69.632 25.6 27.648 55.296 52.224 86.016 73.728 20.48 13.312 40.96 25.6 62.464 36.864 29.696 14.336 61.44 26.624 94.208 34.816 13.312 3.072 26.624 6.144 39.936 9.216 9.216 2.048 18.432 3.072 29.696 4.096 10.24 1.024 20.48 2.048 28.672 3.072 2.048 0 4.096 0 7.168 0 2.048 0 4.096 0 6.144 0s3.072 0 5.12 0h27.648c2.048 0 3.072 0 5.12 0 3.072 0 5.12 0 8.192 0 4.096 0 8.192 0 12.288-1.024 7.168-1.024 14.336-1.024 20.48-2.048 7.168-1.024 15.36-2.048 22.528-3.072 9.216-1.024 19.456-3.072 29.696-6.144 14.336-3.072 28.672-7.168 43.008-11.264 21.504-7.168 41.984-15.36 61.44-24.576 22.528-10.24 45.056-23.552 66.56-37.888 23.552-16.384 46.080-33.792 67.584-53.248 27.648-25.6 52.224-54.272 72.704-86.016 24.576-35.84 44.032-75.776 59.392-116.736 7.168-21.504 13.312-44.032 18.432-65.536 2.048-12.288 4.096-23.552 6.144-35.84 2.048-13.312 3.072-24.576 3.072-34.816 0-5.12 0-11.264 1.024-16.384 0-8.192 0-17.408 0-25.6 0-7.168 0-14.336 0-21.504 0-6.144-1.024-11.264-1.024-17.408v-1.024c-1.024-5.12-1.024-11.264-2.048-16.384-1.024-7.168-2.048-15.36-4.096-25.6-3.072-17.408-7.168-34.816-12.288-52.224-8.192-26.624-18.432-53.248-29.696-78.848-10.24-20.48-21.504-40.96-33.792-59.392-15.36-23.552-33.792-47.104-53.248-67.584-26.624-28.672-56.32-54.272-89.088-75.776-29.696-20.48-62.464-37.888-96.256-51.2-21.504-8.192-44.032-15.36-66.56-21.504-14.336-3.072-26.624-6.144-38.912-8.192-10.24-2.048-19.456-3.072-29.696-4.096-6.144-1.024-12.288-1.024-18.432-1.024h-5.12c-14.336-2.048-27.648-2.048-41.984-2.048-9.216 0-18.432 0-27.648 1.024-11.264 1.024-21.504 2.048-30.72 3.072-33.792 4.096-67.584 12.288-99.328 23.552-22.528 8.192-44.032 17.408-65.536 27.648-35.84 18.432-69.632 40.96-100.352 67.584-11.264 10.24-22.528 20.48-32.768 30.72-27.648 27.648-51.2 59.392-71.68 92.16-17.408 30.72-32.768 62.464-44.032 95.232-8.192 22.528-14.336 46.080-18.432 68.608-3.072 13.312-5.12 26.624-6.144 38.912-1.024 11.264-2.048 21.504-3.072 30.72v6.144c0 2.048 0 5.12 0 7.168s0 4.096-1.024 6.144c0 1.024 0 2.048 0 2.048v23.552c0 3.072 0 6.144 1.024 9.216l1.024 8.192c0 5.12 1.024 11.264 1.024 16.384-1.024 4.096-1.024 8.192 0 12.288zM571.392 137.216v-8.192l6.144-3.072c5.12-2.048 9.216-1.024 10.24-1.024h2.048c4.096 1.024 9.216 2.048 13.312 3.072 23.552 6.144 47.104 13.312 68.608 23.552 24.576 11.264 48.128 25.6 70.656 40.96 15.36 11.264 29.696 23.552 43.008 36.864 28.672 28.672 53.248 61.44 72.704 97.28 16.384 30.72 28.672 63.488 35.84 97.28 3.072 12.288 5.12 24.576 6.144 36.864 1.024 11.264 2.048 22.528 3.072 32.768 0 7.168 0 13.312 0 19.456 0 10.24-1.024 19.456-1.024 28.672-1.024 12.288-2.048 24.576-4.096 35.84-6.144 34.816-17.408 69.632-31.744 101.376-5.12 11.264-11.264 22.528-17.408 32.768-1.024 1.024-2.048 4.096-5.12 6.144l-7.168 5.12-7.168-4.096v0c-1.024 0-1.024-1.024-2.048-1.024l-233.472-228.352c-5.12-5.12-11.264-10.24-16.384-16.384-4.096-3.072-5.12-8.192-5.12-13.312 0-24.576 0-48.128 0-72.704v-246.784c-1.024-1.024-1.024-2.048-1.024-3.072zM570.368 655.36l1.024-3.072 5.12-13.312 12.288 8.192c1.024 0 2.048 1.024 3.072 2.048 2.048 2.048 4.096 3.072 5.12 5.12l149.504 151.552c0 0 1.024 1.024 1.024 1.024l5.12 6.144-3.072 8.192c-2.048 4.096-5.12 5.12-6.144 6.144l-5.12 3.072c-4.096 3.072-9.216 6.144-13.312 9.216-23.552 15.36-48.128 27.648-76.8 37.888-20.48 7.168-41.984 13.312-63.488 18.432-1.024 0-2.048 0-3.072 0h-3.072l-5.12-2.048-3.072-6.144v-3.072c0-75.776 0-151.552 0-226.304v-3.072zM453.632 659.456c0 1.024 0 2.048 0 3.072l-2.048 223.232c0 1.024 0 1.024 0 2.048l-1.024 7.168-6.144 4.096c-2.048 1.024-4.096 1.024-6.144 1.024s-3.072 0-4.096 0c-15.36-3.072-29.696-6.144-43.008-11.264-17.408-5.12-33.792-12.288-50.176-19.456-22.528-11.264-45.056-23.552-65.536-38.912-1.024-1.024-1.024-1.024-2.048-2.048l-2.048-1.024-4.096-7.168 3.072-7.168 161.792-161.792 3.072-1.024 12.288-6.144 4.096 13.312c1.024-2.048 2.048 0 2.048 2.048zM119.808 456.704c5.12-39.936 17.408-77.824 33.792-114.688 16.384-33.792 36.864-65.536 61.44-93.184 25.6-28.672 54.272-53.248 86.016-72.704s65.536-34.816 100.352-44.032c8.192-2.048 28.672-8.192 36.864-8.192 0 0 0 0 0 0h9.216l2.048 9.216c0 1.024 1.024 2.048 1.024 4.096s0 3.072 0 4.096v79.872c0 33.792 0 66.56 0 100.352 0 25.6 0 51.2 0 75.776 0 19.456 0 39.936 0 59.392v1.024c0 5.12-1.024 8.192-5.12 12.288l-1.024 1.024c-10.24 10.24-19.456 19.456-29.696 28.672l-219.136 220.16c0 0-1.024 1.024-2.048 1.024l-9.216 7.168-8.192-8.192c-6.144-7.168-20.48-35.84-27.648-51.2-14.336-32.768-23.552-66.56-28.672-101.376-5.12-35.84-5.12-73.728-0-110.592z\",\n          \"M738.304 818.176v0 0z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"craigslist\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 258,\n        \"id\": 209,\n        \"name\": \"craigslist\",\n        \"prevSize\": 32,\n        \"code\": 59683\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 49\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1019.904 104.448c-4.096-4.096-9.216-6.144-15.36-8.192-5.12-1.024-11.264-1.024-17.408-1.024-5.12 0-10.24 0-13.312 0v0c-21.504 0-44.032 0-65.536 0-15.36 0-30.72 0-46.080 0v0 0c-19.456 0-37.888 7.168-54.272 17.408s-31.744 22.528-44.032 33.792c-22.528 19.456-41.984 43.008-60.416 65.536-7.168-17.408-15.36-33.792-23.552-49.152-14.336-26.624-39.936-52.224-71.68-59.392-8.192 0-16.384-1.024-24.576-1.024s-15.36 0-22.528 0c-4.096 0-11.264 0-18.432 0-14.336 0-30.72 0-30.72 0s-16.384 0-30.72 0c-7.168 0-14.336 0-18.432 0-7.168 0-14.336 0-22.528 0s-16.384 0-24.576 2.048c-31.744 6.144-57.344 32.768-71.68 59.392v0c-8.192 15.36-16.384 31.744-23.552 48.128-18.432-23.552-37.888-46.080-60.416-65.536-13.312-11.264-27.648-23.552-44.032-33.792s-34.816-17.408-54.272-17.408v0c-15.36 0-30.72 0-46.080 0-21.504 0-44.032 0-65.536 0v0c-3.072 0-8.192 0-13.312 0-7.168 0-15.36 0-22.528 3.072-4.096 2.048-7.168 3.072-10.24 6.144s-4.096 8.192-4.096 12.288c0 3.072 1.024 6.144 1.024 9.216 2.048 4.096 4.096 8.192 7.168 11.264s5.12 6.144 7.168 8.192c4.096 6.144 9.216 12.288 12.288 17.408v0c6.144 10.24 12.288 20.48 18.432 30.72 14.336 24.576 26.624 51.2 40.96 76.8 31.744 56.32 64.512 111.616 105.472 161.792 28.672 35.84 63.488 71.68 106.496 91.136-31.744 60.416-64.512 121.856-97.28 182.272-28.672 54.272-58.368 107.52-89.088 160.768v0c-1.024 2.048-3.072 5.12-4.096 8.192-2.048 4.096-4.096 8.192-6.144 13.312s-4.096 10.24-4.096 16.384v0 0c0 6.144 2.048 11.264 6.144 14.336 5.12 5.12 12.288 7.168 19.456 8.192s13.312 1.024 18.432 1.024c1.024 0 3.072 0 4.096 0 12.288 0 23.552 0 35.84 0 23.552 0 46.080-1.024 69.632-1.024 2.048 0 4.096 0 6.144 0 3.072 0 6.144 0 10.24 0 8.192 0 17.408 0 25.6-1.024 35.84-3.072 69.632-21.504 91.136-51.2 1.024-1.024 3.072-4.096 5.12-8.192 16.384-26.624 66.56-108.544 89.088-144.384 5.12-8.192 14.336-23.552 23.552-36.864 4.096-6.144 8.192-12.288 11.264-17.408 3.072 4.096 7.168 10.24 11.264 17.408 8.192 13.312 18.432 28.672 23.552 36.864 12.288 20.48 33.792 56.32 53.248 88.064 10.24 15.36 18.432 30.72 25.6 41.984 3.072 6.144 6.144 10.24 9.216 14.336 2.048 4.096 4.096 6.144 5.12 8.192 21.504 29.696 54.272 48.128 91.136 51.2 8.192 1.024 17.408 1.024 25.6 1.024 3.072 0 6.144 0 10.24 0 2.048 0 4.096 0 6.144 0 22.528 0 46.080 1.024 69.632 1.024 11.264 0 23.552 0 35.84 0 1.024 0 3.072 0 4.096 0 6.144 0 16.384 0 25.6-3.072 4.096-1.024 9.216-3.072 12.288-7.168 4.096-3.072 6.144-8.192 6.144-14.336v0c0-6.144-2.048-11.264-4.096-16.384s-5.12-10.24-7.168-13.312c-1.024-3.072-3.072-5.12-4.096-8.192v0c-30.72-53.248-59.392-107.52-89.088-160.768-34.816-59.392-67.584-120.832-100.352-181.248 43.008-19.456 77.824-55.296 106.496-91.136 40.96-50.176 74.752-105.472 105.472-161.792 14.336-25.6 26.624-52.224 40.96-76.8 6.144-10.24 12.288-20.48 18.432-30.72v0c4.096-6.144 8.192-12.288 12.288-17.408v0c2.048-2.048 4.096-5.12 7.168-8.192s5.12-6.144 7.168-11.264c1.024-3.072 2.048-6.144 2.048-9.216-0-4.096-1.024-9.216-4.096-12.288zM439.296 225.28c3.072 0 5.12 6.144 6.144 20.48 0 1.024-6.144 0-12.288 0-3.072 0-6.144-1.024-7.168-1.024-3.072-1.024-6.144-2.048-9.216-3.072-8.192-3.072-13.312-7.168-17.408-10.24-3.072-2.048-5.12-5.12-6.144-6.144 20.48 1.024 35.84 1.024 46.080 0zM446.464 326.656c0 0 0 0 0 0s0 0 0 0 0 0 0 0zM453.632 310.272c0 5.12-2.048 11.264-6.144 15.36-5.12 5.12-11.264 7.168-17.408 8.192s-13.312 2.048-19.456-1.024c-7.168-4.096-10.24-12.288-11.264-19.456-2.048-9.216-5.12-18.432-4.096-27.648 0-5.12 2.048-10.24 4.096-15.36s5.12-8.192 7.168-10.24c9.216-6.144 22.528-7.168 30.72 1.024 4.096 4.096 6.144 8.192 8.192 13.312 5.12 11.264 8.192 23.552 8.192 35.84zM535.552 342.016c-1.024 1.024-2.048 2.048-3.072 2.048-6.144 4.096-13.312 6.144-21.504 6.144s-15.36-2.048-21.504-6.144c-1.024-1.024-2.048-2.048-3.072-2.048 0 0-1.024-1.024-1.024-1.024s0-1.024 0-1.024c1.024-1.024 2.048-1.024 2.048 0 1.024 1.024 2.048 1.024 3.072 2.048 0 0 0 0 0 0 5.12 4.096 12.288 6.144 19.456 6.144 8.192 0 14.336-2.048 19.456-6.144v0c1.024-1.024 2.048-1.024 3.072-2.048s2.048-1.024 3.072 0c1.024 1.024 1.024 2.048 0 2.048zM574.464 326.656c0 0 0 0 0 0s0 0 0 0 0 0 0 0zM622.592 313.344c-2.048 7.168-5.12 15.36-11.264 19.456-6.144 3.072-13.312 2.048-19.456 1.024s-13.312-3.072-17.408-8.192c-4.096-4.096-6.144-9.216-6.144-15.36-1.024-12.288 3.072-24.576 7.168-35.84 2.048-5.12 5.12-9.216 8.192-13.312 8.192-8.192 21.504-8.192 30.72-1.024 3.072 2.048 5.12 5.12 8.192 10.24 2.048 5.12 4.096 10.24 4.096 15.36 0 9.216-2.048 18.432-4.096 27.648zM621.568 232.448c-4.096 3.072-9.216 7.168-17.408 10.24-3.072 1.024-6.144 2.048-9.216 3.072-1.024 0-4.096 1.024-7.168 1.024-5.12 1.024-12.288 1.024-12.288 0 1.024-14.336 3.072-21.504 6.144-20.48 10.24 1.024 24.576 1.024 45.056 1.024 0-0-2.048 3.072-5.12 5.12z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"wix\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 259,\n        \"id\": 208,\n        \"name\": \"wix\",\n        \"prevSize\": 32,\n        \"code\": 59684\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 50\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M888.832 970.752c-14.336-7.168-31.744-17.408-73.728-88.064l-83.968-137.216-99.328-161.792-7.168-13.312c3.072 0 10.24-3.072 14.336-3.072 112.64-38.912 179.2-140.288 179.2-288.768 0-73.728-27.648-140.288-83.968-190.464-7.168-7.168-17.408-14.336-24.576-21.504-77.824-49.152-179.2-66.56-313.344-66.56h-257.024c-14.336 0-17.408 10.24-10.24 17.408s14.336 17.408 14.336 46.080v808.96c-3.072 31.744-10.24 41.984-14.336 49.152-7.168 7.168-3.072 17.408 14.336 17.408h186.368v-340.992h83.968l59.392 102.4 73.728 126.976 34.816 63.488c41.984 70.656 80.896 115.712 147.456 126.976 7.168 0 41.984 7.168 56.32 7.168h14.336c27.648 0 56.32-10.24 73.728-17.408 0 0 3.072-3.072 7.168-3.072 25.6-15.36 18.432-29.696 8.192-33.792zM449.536 464.896h-119.808v-330.752h119.808c59.392 0 105.472 7.168 137.216 38.912 14.336 10.24 21.504 24.576 27.648 41.984 7.168 21.504 14.336 46.080 14.336 77.824-0 40.96-4.096 172.032-179.2 172.032z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"redfin\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 260,\n        \"id\": 207,\n        \"name\": \"redfin\",\n        \"prevSize\": 32,\n        \"code\": 59685\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 51\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M865.28 257.024c28.672 0 58.368 0 87.040 0 7.168-52.224 14.336-104.448 20.48-156.672 0-3.072 0-6.144 0-9.216-1.024-12.288-10.24-22.528-21.504-25.6 0-11.264 0-21.504 0-32.768 0-5.12-1.024-10.24-3.072-14.336-4.096-11.264-16.384-18.432-28.672-18.432-112.64 0-225.28 0-337.92 0-5.12 0-11.264 0-16.384 2.048-11.264 5.12-19.456 16.384-19.456 29.696 0 11.264 0 22.528 0 33.792-10.24 4.096-18.432 12.288-20.48 23.552-1.024 5.12-1.024 10.24 0 14.336 7.168 51.2 14.336 102.4 20.48 152.576 39.936 0 79.872 0 120.832 0 0-4.096 0-7.168 0-11.264v0c12.288 0 24.576 1.024 35.84-4.096 9.216-4.096 16.384-13.312 17.408-22.528s0-20.48-5.12-27.648c-4.096-6.144-12.288-10.24-19.456-11.264-10.24-1.024-21.504 0-29.696 6.144s-13.312 16.384-12.288 26.624c-8.192 0-15.36 0-23.552 0 0-4.096 0-8.192 2.048-12.288 3.072-11.264 9.216-20.48 18.432-26.624 10.24-7.168 22.528-11.264 34.816-12.288 12.288 0 25.6 2.048 35.84 8.192 8.192 5.12 15.36 13.312 19.456 22.528s5.12 19.456 4.096 29.696c-2.048 15.36-14.336 28.672-28.672 34.816 2.048 1.024 4.096 1.024 6.144 2.048s3.072 0 5.12 0c33.792 0 67.584 0 101.376 0-3.072 0-7.168 0-10.24 0-28.672 0-56.32 0-84.992 0-3.072 0-5.12 0-8.192 0 6.144 3.072 11.264 7.168 15.36 12.288 7.168 9.216 10.24 20.48 9.216 31.744-1.024 12.288-5.12 23.552-12.288 32.768-8.192 10.24-21.504 15.36-33.792 17.408-13.312 2.048-26.624 1.024-38.912-4.096-10.24-4.096-18.432-10.24-24.576-19.456-5.12-8.192-8.192-18.432-8.192-27.648 7.168 0 15.36 0 22.528 0 0 4.096 1.024 7.168 2.048 11.264 2.048 8.192 9.216 15.36 16.384 18.432 10.24 4.096 21.504 5.12 32.768 1.024 8.192-2.048 16.384-9.216 19.456-17.408 3.072-9.216 4.096-19.456 1.024-28.672-3.072-8.192-9.216-15.36-17.408-18.432-12.288-5.12-25.6-3.072-37.888-4.096 0-2.048 0-5.12 0-7.168-39.936 0-79.872 0-119.808 0-3.072 48.128-6.144 97.28-10.24 145.408 0 7.168-2.048 15.36 0 22.528v0c3.072 10.24 11.264 19.456 21.504 22.528 4.096 1.024 9.216 1.024 14.336 1.024 116.736 0 234.496 0 351.232 0 6.144 0 12.288 0 17.408-1.024 10.24-3.072 18.432-11.264 21.504-21.504v0c2.048-6.144 1.024-11.264 1.024-17.408-3.072-50.176-7.168-100.352-10.24-151.552-29.696 0-60.416 0-90.112 0-3.072 0-7.168 0-10.24 0-1.024 1.024 3.072 1.024 8.192 1.024zM850.944 257.024v0c0 32.768 0 64.512 0 96.256-8.192 0-16.384 0-23.552 0 0-31.744 0-63.488 0-96.256v0c0-22.528 0-44.032 0-66.56-16.384 5.12-31.744 11.264-48.128 16.384 0-7.168 0-14.336 0-21.504 22.528-8.192 44.032-15.36 66.56-23.552 2.048-1.024 4.096-1.024 6.144-1.024-1.024 31.744-1.024 63.488-1.024 96.256z\",\n          \"M925.696 531.456h-355.328c-8.192 0-21.504-1.024-35.84-5.12-30.72-9.216-56.32-31.744-69.632-60.416l-4.096-4.096-4.096-14.336c-5.12-19.456-4.096-35.84-3.072-44.032 0-1.024 0-2.048 0-2.048v-2.048c1.024-21.504 3.072-43.008 4.096-63.488 2.048-24.576 3.072-49.152 5.12-72.704-4.096-28.672-7.168-56.32-11.264-84.992l-6.144-43.008h-292.864c-56.32 0-102.4 46.080-102.4 102.4v684.032c0 56.32 46.080 102.4 102.4 102.4h688.128c56.32 0 102.4-46.080 102.4-102.4v-391.168c-5.12 1.024-10.24 1.024-14.336 1.024h-3.072zM320.512 929.792c-106.496 0-192.512-84.992-192.512-191.488s86.016-192.512 192.512-192.512c50.176 0 94.208 19.456 128 50.176l-54.272 54.272c-20.48-17.408-46.080-27.648-74.752-27.648-63.488 0-115.712 52.224-115.712 115.712s52.224 115.712 115.712 115.712c53.248 0 90.112-31.744 103.424-76.8h-102.4v-73.728h180.224c15.36 75.776-12.288 226.304-180.224 226.304z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"googlecalendar\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 261,\n        \"id\": 206,\n        \"name\": \"googlecalendar\",\n        \"prevSize\": 32,\n        \"code\": 59686\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 52\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M654.336 1024l308.224-67.584c0 0-110.592-752.64-112.64-756.736-1.024-5.12-5.12-8.192-9.216-8.192-3.072 0-82.944-6.144-82.944-6.144l-60.416-60.416c-1.024-1.024-3.072-2.048-5.12-3.072 1.024 0-37.888 902.144-37.888 902.144zM678.912 121.856c-1.024 0-2.048 0-3.072 1.024-1.024 0-12.288 3.072-30.72 9.216-17.408-53.248-51.2-100.352-107.52-100.352h-5.12c-15.36-22.528-34.816-31.744-52.224-31.744-132.096 0-195.584 164.864-214.016 248.832-51.2 15.36-87.040 27.648-92.16 28.672-28.672 9.216-29.696 9.216-32.768 36.864-4.096 21.504-79.872 601.088-79.872 601.088l578.56 108.544c0 0 38.912-902.144 38.912-902.144zM529.408 161.792v6.144c-31.744 9.216-67.584 21.504-102.4 31.744 20.48-75.776 56.32-112.64 89.088-125.952 8.192 19.456 13.312 49.152 13.312 88.064zM477.184 35.84c6.144 0 12.288 2.048 16.384 6.144-43.008 20.48-87.040 69.632-107.52 169.984-28.672 8.192-55.296 17.408-79.872 24.576 22.528-75.776 75.776-200.704 171.008-200.704zM499.712 483.328c0 0-33.792-17.408-75.776-17.408-61.44 0-64.512 38.912-64.512 48.128 0 53.248 138.24 73.728 138.24 197.632 0 98.304-62.464 160.768-145.408 160.768-100.352 0-151.552-62.464-151.552-62.464l27.648-89.088c0 0 53.248 45.056 97.28 45.056 29.696 0 40.96-22.528 40.96-39.936 0-69.632-113.664-71.68-113.664-186.368 0-95.232 68.608-189.44 207.872-189.44 53.248 0 79.872 15.36 79.872 15.36l-40.96 117.76zM552.96 66.56c29.696 3.072 48.128 36.864 61.44 75.776-14.336 5.12-31.744 9.216-49.152 15.36v-10.24c-1.024-33.792-5.12-60.416-12.288-80.896z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"shopify\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 300,\n        \"id\": 205,\n        \"name\": \"shopify\",\n        \"prevSize\": 32,\n        \"code\": 59687\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 53\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M601.088 131.072l69.632 98.304 353.28-98.304zM234.496 892.928l191.488-186.368-114.688-122.88zM572.416 131.072l-102.4 92.16 172.032 6.144zM176.128 131.072l36.864 74.752 201.728 12.288zM283.648 520.192l149.504-278.528-433.152-22.528zM301.056 538.624l141.312 151.552 155.648-152.576 48.128-283.648-189.44-9.216z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"freelancer\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 263,\n        \"id\": 204,\n        \"name\": \"freelancer\",\n        \"prevSize\": 32,\n        \"code\": 59688\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 54\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M875.52 151.552c-4.096 28.672-38.912 246.784-96.256 441.344-19.456 53.248-41.984 97.28-66.56 122.88-107.52 106.496-283.648 102.4-395.264-9.216s-115.712-287.744-9.216-394.24c24.576-24.576 69.632-47.104 122.88-66.56 194.56-57.344 412.672-92.16 441.344-96.256-199.68-199.68-523.264-198.656-722.944 0-181.248 181.248-197.632 464.896-50.176 665.6 13.312 21.504 29.696 41.984 48.128 60.416s38.912 34.816 60.416 48.128c0 0 0 0 0 0 200.704 148.48 484.352 132.096 665.6-50.176 199.68-198.656 200.704-522.24 2.048-721.92z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"seedrs\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 292,\n        \"id\": 203,\n        \"name\": \"seedrs\",\n        \"prevSize\": 32,\n        \"code\": 59689\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 55\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M102.4 0c77.824 23.552 156.672 48.128 234.496 71.68 0 192.512 0 386.048 0 578.56-75.776 67.584-151.552 135.168-227.328 202.752 185.344-97.28 370.688-194.56 555.008-291.84-51.2-23.552-102.4-46.080-154.624-69.632-34.816-75.776-69.632-150.528-104.448-226.304 173.056 52.224 344.064 105.472 516.096 157.696 0 83.968 0 167.936 0 251.904-195.584 116.736-391.168 232.448-585.728 349.184-77.824-54.272-155.648-108.544-233.472-163.84 0-286.72 0-573.44 0-860.16z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"bing\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 293,\n        \"id\": 202,\n        \"name\": \"bing\",\n        \"prevSize\": 32,\n        \"code\": 59690\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 56\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 855.040c-111.616 0-157.696-93.184-157.696-196.608 0-104.448 46.080-197.632 157.696-197.632s157.696 93.184 157.696 197.632c0 103.424-46.080 196.608-157.696 196.608zM676.864 0v317.44c-50.176-17.408-105.472-25.6-164.864-25.6-231.424 0-407.552 134.144-407.552 366.592 0 231.424 176.128 365.568 407.552 365.568 59.392 0 122.88-25.6 164.864-52.224v35.84h241.664v-1007.616h-241.664zM676.864 0z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"doodle\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 294,\n        \"id\": 201,\n        \"name\": \"doodle\",\n        \"prevSize\": 32,\n        \"code\": 59691\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 57\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M481.28 0c0 4.096-1.024 9.216-1.024 13.312 0 117.76 0 234.496 0 352.256 0 4.096 0 9.216 1.024 17.408 13.312-13.312 22.528-24.576 33.792-33.792 121.856-106.496 320.512-80.896 403.456 76.8 28.672 54.272 43.008 112.64 48.128 173.056 6.144 70.656 2.048 141.312-17.408 209.92-17.408 59.392-45.056 112.64-93.184 153.6-106.496 91.136-269.312 79.872-363.52-25.6-9.216-10.24-13.312-9.216-22.528 0-20.48 21.504-40.96 41.984-61.44 62.464-6.144 6.144-13.312 9.216-21.504 9.216-74.752 0-150.528 0-225.28 0-13.312 0-16.384-4.096-16.384-16.384 0-257.024 0-514.048 0-770.048 0-21.504 0-21.504-20.48-21.504-17.408 0-34.816-1.024-51.2 0-13.312 1.024-17.408-3.072-17.408-16.384 1.024-61.44 0-122.88 0-184.32 141.312 0 282.624 0 424.96 0zM480.256 654.336c0 34.816 0 68.608 0 103.424 0 16.384 4.096 30.72 11.264 45.056 12.288 24.576 31.744 34.816 58.368 34.816s44.032-13.312 54.272-35.84c8.192-18.432 11.264-36.864 11.264-57.344 0-59.392 0-119.808 0-179.2 0-16.384-2.048-32.768-8.192-49.152-10.24-28.672-30.72-43.008-59.392-43.008s-50.176 14.336-60.416 43.008c-4.096 11.264-7.168 23.552-7.168 36.864-0 33.792-0 67.584-0 101.376z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"bonanza\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 295,\n        \"id\": 200,\n        \"name\": \"bonanza\",\n        \"prevSize\": 32,\n        \"code\": 59692\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 58\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M645.12 320.512c13.312-13.312 13.312-35.84 0-49.152s-35.84-13.312-49.152 0l-324.608 324.608c-46.080 46.080-120.832 46.080-166.912 0s-46.080-120.832 0-166.912l261.12-261.12c13.312-13.312 13.312-35.84 0-49.152s-35.84-13.312-49.152 0l-261.12 260.096c-72.704 72.704-72.704 192.512 0 265.216s192.512 72.704 265.216 0l324.608-323.584z\",\n          \"M162.816 536.576c13.312 13.312 35.84 13.312 49.152 0l324.608-324.608c46.080-46.080 120.832-46.080 166.912 0 13.312 13.312 35.84 13.312 49.152 0s13.312-35.84 0-49.152c-72.704-72.704-192.512-72.704-265.216 0l-324.608 324.608c-13.312 13.312-13.312 35.84 0 49.152z\",\n          \"M861.184 487.424c-13.312-13.312-35.84-13.312-49.152 0l-324.608 324.608c-46.080 46.080-120.832 46.080-166.912 0-13.312-13.312-35.84-13.312-49.152 0s-13.312 35.84 0 49.152c72.704 72.704 192.512 72.704 265.216 0l324.608-324.608c13.312-13.312 13.312-35.84 0-49.152z\",\n          \"M703.488 378.88l-324.608 324.608c-13.312 13.312-13.312 35.84 0 49.152s35.84 13.312 49.152 0l324.608-324.608c46.080-46.080 120.832-46.080 166.912 0s46.080 120.832 0 166.912l-260.096 261.12c-13.312 13.312-13.312 35.84 0 49.152s35.84 13.312 49.152 0l260.096-260.096c72.704-72.704 72.704-192.512 0-265.216-72.704-73.728-191.488-73.728-265.216-1.024z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"squarespace\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 296,\n        \"id\": 199,\n        \"name\": \"squarespace\",\n        \"prevSize\": 32,\n        \"code\": 59693\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 59\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M864.256 424.96l-430.080-429.056-86.016 87.040 160.768 160.768-347.136 347.136 429.056 429.056 87.040-87.040-161.792-160.768 348.16-347.136zM354.304 606.208l258.048-258.048 53.248 53.248-258.048 258.048-53.248-53.248z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"toptal\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 269,\n        \"id\": 198,\n        \"name\": \"toptal\",\n        \"prevSize\": 32,\n        \"code\": 59694\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 60\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M997.376 276.48c-3.072 3.072-157.696 180.224-387.072 310.272-2.048 2.048-3.072-2.048-2.048-3.072 76.8-54.272 142.336-118.784 198.656-175.104 12.288-12.288 12.288-34.816-2.048-47.104l-11.264-13.312c-92.16 95.232-217.088 219.136-372.736 296.96-2.048 2.048-3.072-2.048-2.048-3.072 68.608-47.104 139.264-107.52 200.704-168.96 12.288-12.288 14.336-34.816 0-47.104l-12.288-12.288c-104.448 103.424-219.136 208.896-332.8 262.144-2.048 2.048-3.072-2.048-2.048-3.072 68.608-44.032 142.336-111.616 180.224-147.456 14.336-12.288 14.336-34.816 2.048-47.104l-9.216-9.216c0 0-162.816 165.888-254.976 207.872-91.136 41.984-153.6 40.96-186.368 34.816-3.072 0-5.12 3.072-2.048 5.12 37.888 14.336 107.52 34.816 210.944 31.744 292.864-9.216 586.752-187.392 801.792-409.6 14.336-14.336 12.288-35.84-3.072-48.128l-14.336-14.336z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"gust\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 270,\n        \"id\": 197,\n        \"name\": \"gust\",\n        \"prevSize\": 32,\n        \"code\": 59695\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 61\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1022.249 368.589c-1.28-1.28-3.84-1.28-7.68 0-7.68 1.28-52.48 5.12-72.96 7.68-7.68 1.28-11.52 3.84-15.36 10.24s-103.68 175.36-103.68 175.36 76.8-409.6 78.080-419.84c2.56-14.080 0-17.92-11.52-17.92s-64 5.12-71.68 6.4c-10.24 1.28-14.080 5.12-16.64 17.92-1.28 8.96-113.92 614.4-115.2 625.92-2.56 16.64-2.56 17.92 12.8 15.36 8.96-1.28 53.76-8.96 71.68-11.52 5.12-1.28 8.96-1.28 10.24-10.24s35.84-185.6 35.84-185.6 57.6 162.56 60.16 168.96c2.56 6.4 3.84 8.96 12.8 7.68 20.48-3.84 67.84-11.52 72.96-11.52 7.68-1.28 8.96-3.84 7.68-10.24-2.56-7.68-61.44-175.36-61.44-175.36s108.8-176.64 112.64-184.32c3.84-3.84 3.84-7.68 1.28-8.96zM670.249 415.949c-14.080-5.12-42.24-14.080-76.8-10.24-51.2 6.4-87.040 28.16-106.24 64s-15.36 75.52-8.96 96c6.4 20.48 23.040 43.52 44.8 62.72 49.92 43.52 48.64 78.080 40.96 92.16-8.96 17.92-33.28 32-66.56 24.32s-44.8-29.44-44.8-29.44-16.64 57.6-20.48 69.12c-3.84 15.36-2.56 19.2 11.52 25.6 19.2 7.68 55.040 16.64 113.92 5.12 39.68-7.68 76.8-39.68 93.44-72.96 17.92-34.56 29.44-102.4-26.88-153.6-46.080-40.96-51.2-48.64-55.040-57.6-8.96-16.64-1.28-35.84 6.4-46.080 7.68-8.96 17.92-14.080 33.28-12.8 16.64 1.28 44.8 23.040 44.8 23.040s20.48-58.88 21.76-62.72c3.84-7.68 2.56-12.8-5.12-16.64zM201.769 673.229l97.28-229.12 1.28 213.76-98.56 15.36zM352.809 212.429c-1.28-17.92-16.64-15.36-23.040-1.28-21.76 46.080-323.84 669.44-327.68 677.12-5.12 11.52-1.28 12.8 10.24 11.52 7.68-1.28 74.24-11.52 94.72-15.36 6.4-1.28 8.96-2.56 11.52-7.68 1.28-2.56 48.64-115.2 48.64-115.2l133.12-20.48c0 0 1.28 85.76 1.28 101.12 0 6.4 1.28 10.24 11.52 8.96 12.8-2.56 65.28-10.24 71.68-11.52 12.8-2.56 14.080-5.12 14.080-17.92-1.28-8.96-42.24-565.76-46.080-609.28z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"ask\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 271,\n        \"id\": 196,\n        \"name\": \"ask\",\n        \"prevSize\": 32,\n        \"code\": 59696\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 62\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-162.816 1.024-267.264 109.568-267.264 275.456 0 136.192 89.088 252.928 140.288 431.104 28.672 101.376 45.056 226.304 53.248 318.464h149.504c8.192-92.16 23.552-216.064 53.248-318.464 51.2-177.152 140.288-293.888 140.288-431.104-2.048-165.888-106.496-274.432-269.312-275.456zM513.024 419.84c-67.584 0-122.88-55.296-122.88-122.88s55.296-122.88 122.88-122.88c67.584 0 122.88 55.296 122.88 122.88s-55.296 122.88-122.88 122.88z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"trulia\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 272,\n        \"id\": 195,\n        \"name\": \"trulia\",\n        \"prevSize\": 32,\n        \"code\": 59697\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 63\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M961.536 345.088c-18.432-30.72-39.936-59.392-66.56-83.968-9.216-9.216-13.312-18.432-12.288-31.744 1.024-28.672 0-56.32 0-84.992 0-26.624 0-53.248 0-79.872 0-6.144 0-13.312-1.024-19.456-5.12-35.84-38.912-54.272-71.68-38.912-6.144 3.072-12.288 7.168-19.456 11.264-48.128 29.696-97.28 58.368-145.408 89.088-14.336 9.216-27.648 11.264-44.032 8.192-40.96-6.144-81.92-11.264-122.88-5.12-22.528 3.072-40.96-3.072-59.392-14.336-40.96-26.624-82.944-50.176-123.904-75.776-9.216-7.168-18.432-12.288-28.672-15.36-43.008-13.312-90.112 13.312-100.352 57.344-2.048 9.216-2.048 18.432-2.048 27.648 0 38.912-1.024 76.8 0 115.712 0 17.408-4.096 30.72-18.432 43.008-25.6 21.504-47.104 46.080-65.536 73.728-91.136 136.192-106.496 279.552-34.816 429.056 48.128 101.376 128 172.032 229.376 220.16 104.448 50.176 215.040 62.464 329.728 45.056 116.736-17.408 218.112-68.608 299.008-154.624 77.824-81.92 120.832-180.224 121.856-294.912-0-78.848-22.528-152.576-63.488-221.184zM888.832 746.496c-35.84 57.344-83.968 100.352-141.312 134.144-60.416 34.816-145.408 62.464-218.112 60.416-128 0-228.352-33.792-315.392-105.472-61.44-51.2-104.448-115.712-122.88-193.536-24.576-103.424-1.024-197.632 60.416-282.624 18.432-25.6 40.96-49.152 66.56-68.608 18.432-14.336 26.624-30.72 25.6-54.272-1.024-37.888 0-76.8 0-115.712 0-7.168 0-14.336 0-21.504 1.024-9.216 5.12-12.288 12.288-8.192s14.336 8.192 21.504 12.288c41.984 25.6 84.992 51.2 126.976 76.8 14.336 9.216 29.696 13.312 47.104 11.264 32.768-3.072 65.536-4.096 98.304-2.048 113.664 9.216 211.968 52.224 291.84 134.144 60.416 62.464 94.208 137.216 99.328 223.232 5.12 72.704-13.312 139.264-52.224 199.68z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"calendy loomly\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 273,\n        \"id\": 194,\n        \"name\": \"loomly\",\n        \"prevSize\": 32,\n        \"code\": 59698\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 64\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M51.2 819.2h308.224c26.624 0 48.128 21.504 48.128 48.128v108.544c0 26.624-21.504 48.128-48.128 48.128h-308.224c-26.624 0-48.128-21.504-48.128-48.128v-108.544c0-26.624 21.504-48.128 48.128-48.128z\",\n          \"M659.456 819.2h308.224c26.624 0 48.128 21.504 48.128 48.128v108.544c0 26.624-21.504 48.128-48.128 48.128h-308.224c-26.624 0-48.128-21.504-48.128-48.128v-108.544c0-26.624 21.504-48.128 48.128-48.128z\",\n          \"M51.2 409.6h916.48c26.624 0 48.128 21.504 48.128 48.128v108.544c0 26.624-21.504 48.128-48.128 48.128h-916.48c-26.624 0-48.128-21.504-48.128-48.128v-108.544c0-26.624 21.504-48.128 48.128-48.128z\",\n          \"M51.2 0h512c26.624 0 48.128 21.504 48.128 48.128v108.544c0 26.624-21.504 48.128-48.128 48.128h-512c-26.624 0-48.128-21.504-48.128-48.128v-108.544c0-26.624 21.504-48.128 48.128-48.128z\",\n          \"M861.184 0h106.496c26.624 0 48.128 21.504 48.128 48.128v108.544c0 26.624-21.504 48.128-48.128 48.128h-106.496c-26.624 0-48.128-21.504-48.128-48.128v-108.544c0-26.624 21.504-48.128 48.128-48.128z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"ghost\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 274,\n        \"id\": 193,\n        \"name\": \"ghost\",\n        \"prevSize\": 32,\n        \"code\": 59699\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 65\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M791.552 214.016c-108.544 0-192.512 70.656-226.304 186.368-52.224-77.824-92.16-172.032-114.688-251.904h-116.736v303.104c0 59.392-49.152 108.544-108.544 108.544s-108.544-49.152-108.544-108.544v-302.080h-116.736v303.104c0 123.904 101.376 226.304 225.28 226.304s225.28-102.4 225.28-226.304v-51.2c22.528 47.104 50.176 95.232 83.968 137.216l-71.68 335.872h119.808l52.224-242.688c45.056 28.672 97.28 47.104 157.696 47.104 128 0 232.448-104.448 232.448-232.448-1.024-128-105.472-232.448-233.472-232.448zM791.552 561.152c-47.104 0-91.136-19.456-131.072-52.224l10.24-46.080v-2.048c9.216-49.152 35.84-130.048 120.832-130.048 63.488 0 115.712 52.224 115.712 115.712s-51.2 114.688-115.712 114.688z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"upwork\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 275,\n        \"id\": 192,\n        \"name\": \"upwork\",\n        \"prevSize\": 32,\n        \"code\": 59700\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 66\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M494.592 206.848h260.096v-206.848h-490.496v1024h229.376v-409.6h265.216v-212.992h-264.192v-194.56z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"fundable\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 276,\n        \"id\": 191,\n        \"name\": \"fundable\",\n        \"prevSize\": 32,\n        \"code\": 59701\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 67\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M548.864 483.328c11.264-10.24 23.552-19.456 34.816-29.696 94.208-90.112 99.328-258.048 8.192-353.28-59.392-61.44-148.48-86.016-232.448-88.064-84.992 0-169.984 0-256 0-55.296-2.048-106.496 49.152-103.424 105.472 0 297.984 0 595.968 0 893.952 122.88 0 245.76 0 367.616 0 105.472-2.048 220.16-40.96 281.6-132.096 56.32-82.944 61.44-197.632 17.408-286.72-24.576-50.176-68.608-84.992-117.76-109.568zM193.536 252.928c1.024-21.504 2.048-45.056 19.456-59.392 19.456-19.456 49.152-15.36 74.752-16.384 43.008 1.024 91.136-6.144 128 20.48 54.272 39.936 56.32 124.928 18.432 177.152-19.456 25.6-51.2 38.912-81.92 39.936-52.224 1.024-105.472 0-157.696 0-1.024-53.248-1.024-107.52-1.024-161.792zM478.208 780.288c-19.456 36.864-61.44 59.392-103.424 60.416-60.416 1.024-120.832 0-181.248 0 0-65.536 0-131.072 0-196.608 1.024-22.528 4.096-49.152 24.576-61.44 25.6-16.384 56.32-10.24 84.992-11.264 50.176 0 106.496-4.096 148.48 30.72 50.176 41.984 56.32 121.856 26.624 178.176z\",\n          \"M1022.976 886.784c-3.072-68.608-78.848-121.856-144.384-101.376-54.272 13.312-92.16 69.632-83.968 124.928 5.12 60.416 65.536 108.544 125.952 101.376 60.416-4.096 109.568-64.512 102.4-124.928z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"booking\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 277,\n        \"id\": 190,\n        \"name\": \"booking\",\n        \"prevSize\": 32,\n        \"code\": 59702\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 68\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M757.76 731.136l-66.56-66.56c-57.344-57.344-244.736-258.048-244.736-446.464 0-29.696 4.096-58.368 12.288-86.016h-301.056c-60.416 0-108.544 48.128-108.544 108.544v675.84c0 60.416 48.128 108.544 108.544 108.544h675.84c60.416 0 108.544-48.128 108.544-108.544v-388.096c-32.768 43.008-71.68 88.064-117.76 135.168l-66.56 67.584zM335.872 929.792c-106.496 0-192.512-84.992-192.512-191.488s86.016-192.512 192.512-192.512c50.176 0 94.208 19.456 128 50.176l-54.272 54.272c-20.48-17.408-46.080-27.648-74.752-27.648-63.488 0-115.712 52.224-115.712 115.712s52.224 115.712 115.712 115.712c53.248 0 90.112-31.744 103.424-76.8h-102.4v-73.728h180.224c15.36 75.776-12.288 226.304-180.224 226.304z\",\n          \"M974.848 217.088c0-119.808-97.28-217.088-218.112-217.088s-217.088 97.28-217.088 217.088 113.664 277.504 217.088 379.904c123.904-124.928 218.112-259.072 218.112-379.904zM665.6 206.848c0-50.176 40.96-91.136 91.136-91.136s91.136 40.96 91.136 91.136c0 50.176-40.96 91.136-91.136 91.136s-91.136-40.96-91.136-91.136z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"googlemaps\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 278,\n        \"id\": 189,\n        \"name\": \"googlemaps\",\n        \"prevSize\": 32,\n        \"code\": 59703\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 69\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M558.080 103.424c-56.32 26.624-220.16 153.6-308.224 220.16 107.52-35.84 365.568-93.184 497.664-96.256-41.984-29.696-157.696-108.544-189.44-123.904zM43.008 920.576c36.864-16.384 380.928-131.072 698.368-149.504 7.168-26.624 41.984-116.736 48.128-140.288-328.704 22.528-595.968 120.832-703.488 169.984l-43.008 119.808zM771.072 244.736c0 0-319.488 321.536-369.664 367.616 97.28-34.816 296.96-76.8 422.912-84.992 14.336-45.056 30.72-77.824 30.72-77.824l168.96-17.408c0 1.024-129.024-103.424-252.928-187.392zM98.304 766.976c100.352-104.448 463.872-439.296 463.872-439.296-188.416 44.032-386.048 103.424-455.68 136.192l-106.496 108.544c88.064-18.432 116.736-22.528 181.248-31.744l-82.944 226.304z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"zillow\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 279,\n        \"id\": 188,\n        \"name\": \"zillow\",\n        \"prevSize\": 32,\n        \"code\": 59704\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 70\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M935.936 231.424h-342.016l177.152-177.152c5.12-5.12 5.12-14.336 0-20.48l-29.696-29.696c-5.12-5.12-14.336-5.12-20.48 0l-211.968 211.968-211.968-211.968c-5.12-5.12-14.336-5.12-20.48 0l-29.696 29.696c-5.12 5.12-5.12 14.336 0 20.48l177.152 177.152h-335.872c-38.912 0-70.656 31.744-70.656 70.656v543.744c0 38.912 31.744 70.656 70.656 70.656h91.136c0 1.024 1.024 2.048 2.048 2.048l83.968 99.328c3.072 3.072 6.144 5.12 10.24 5.12 0 0 0 0 0 0 4.096 0 7.168-2.048 10.24-4.096l94.208-99.328c1.024-1.024 2.048-2.048 2.048-3.072h252.928c0 1.024 1.024 2.048 2.048 2.048l83.968 99.328c3.072 3.072 6.144 5.12 10.24 5.12 0 0 0 0 0 0 4.096 0 7.168-2.048 10.24-4.096l94.208-99.328c1.024-1.024 2.048-2.048 2.048-3.072h96.256c38.912 0 70.656-31.744 70.656-70.656v-543.744c2.048-38.912-29.696-70.656-68.608-70.656zM382.976 393.216c0 0-191.488 19.456-195.584 210.944v28.672c0 38.912-37.888 69.632-76.8 69.632 0 0 0 0 0 0v0c0 0 0 0 0 0-38.912 0-56.32-31.744-56.32-70.656v-292.864c0-38.912 31.744-70.656 70.656-70.656h258.048c38.912 0 70.656 5.12 70.656 51.2 1.024 38.912-11.264 70.656-70.656 73.728z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"niconico\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 280,\n        \"id\": 187,\n        \"name\": \"niconico\",\n        \"prevSize\": 32,\n        \"code\": 59705\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 71\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1020.928 572.416c-3.072-27.648-8.192-55.296-15.36-81.92-19.456-66.56-50.176-126.976-93.184-180.224-24.576-30.72-52.224-58.368-83.968-82.944-38.912-30.72-81.92-54.272-126.976-73.728-60.416-24.576-123.904-35.84-195.584-35.84-20.48 0-47.104 2.048-73.728 6.144-51.2 7.168-99.328 23.552-145.408 46.080-90.112 45.056-161.792 110.592-214.016 196.608-40.96 68.608-65.536 143.36-70.656 224.256-3.072 40.96-1.024 82.944 5.12 123.904 6.144 37.888 17.408 74.752 31.744 109.568 6.144 15.36 13.312 30.72 21.504 46.080 4.096 7.168 8.192 13.312 13.312 18.432 20.48 18.432 44.032 21.504 69.632 16.384 22.528-5.12 39.936-18.432 51.2-37.888 10.24-18.432 12.288-37.888 5.12-58.368-3.072-9.216-8.192-18.432-12.288-27.648-18.432-40.96-28.672-82.944-31.744-126.976-2.048-30.72 0-61.44 5.12-91.136 9.216-49.152 28.672-94.208 57.344-135.168 25.6-36.864 56.32-67.584 93.184-93.184 50.176-34.816 105.472-54.272 165.888-60.416 30.72-3.072 60.416-2.048 91.136 2.048 29.696 4.096 58.368 12.288 86.016 24.576 55.296 23.552 100.352 59.392 138.24 105.472 21.504 26.624 38.912 55.296 53.248 87.040 15.36 34.816 23.552 71.68 26.624 110.592 2.048 28.672 1.024 57.344-4.096 86.016-5.12 29.696-13.312 58.368-25.6 84.992-4.096 8.192-6.144 17.408-11.264 24.576-7.168 12.288-9.216 25.6-7.168 38.912 5.12 28.672 21.504 49.152 48.128 60.416 21.504 8.192 43.008 6.144 64.512-3.072 12.288-6.144 20.48-16.384 28.672-26.624 2.048-3.072 3.072-6.144 4.096-10.24 27.648-56.32 45.056-114.688 51.2-177.152 4.096-37.888 4.096-73.728 0-109.568z\",\n          \"M518.144 607.232c-70.656 0-128 57.344-129.024 126.976 0 69.632 57.344 128 128 126.976 67.584 1.024 126.976-56.32 126.976-125.952 1.024-70.656-57.344-128-125.952-128z\"\n        ],\n        \"attrs\": [\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"toneden\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 281,\n        \"id\": 186,\n        \"name\": \"toneden\",\n        \"prevSize\": 32,\n        \"code\": 59706\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 72\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M923.648 224.256l-368.64-212.992c-26.624-15.36-59.392-15.36-87.040 0l-368.64 212.992c-26.624 15.36-43.008 44.032-43.008 74.752v424.96c0 30.72 16.384 59.392 43.008 74.752l368.64 212.992c13.312 8.192 28.672 11.264 43.008 11.264 15.36 0 29.696-4.096 43.008-11.264l368.64-212.992c26.624-15.36 43.008-44.032 43.008-74.752v-424.96c1.024-30.72-15.36-59.392-41.984-74.752zM512 512v325.632l-281.6-162.816v-325.632l281.6-162.816 281.6 162.816-281.6 162.816z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"augment\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 186,\n        \"id\": 185,\n        \"name\": \"augment\",\n        \"prevSize\": 32,\n        \"code\": 59656\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 73\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M944.128 113.664c-6.144-9.216-14.336-17.408-23.552-23.552-19.456-15.36-41.984-26.624-64.512-35.84-49.152-19.456-100.352-31.744-151.552-39.936-63.488-10.24-126.976-14.336-194.56-14.336-60.416 0-122.88 4.096-185.344 14.336-44.032 7.168-88.064 16.384-130.048 30.72-27.648 9.216-55.296 21.504-79.872 37.888-12.288 7.168-23.552 16.384-31.744 27.648-11.264 14.336-16.384 29.696-13.312 48.128 6.144 35.84 10.24 70.656 16.384 105.472 8.192 52.224 17.408 104.448 25.6 155.648 10.24 57.344 20.48 115.712 29.696 173.056 2.048 13.312 8.192 24.576 17.408 34.816 6.144 6.144 12.288 12.288 18.432 17.408 23.552 19.456 50.176 32.768 78.848 44.032 67.584 26.624 137.216 38.912 209.92 43.008 52.224 3.072 104.448 1.024 156.672-6.144 44.032-6.144 87.040-15.36 130.048-30.72 31.744-11.264 61.44-25.6 88.064-45.056 11.264-8.192 22.528-17.408 30.72-28.672 6.144-8.192 10.24-16.384 11.264-25.6 13.312-75.776 26.624-151.552 38.912-226.304 11.264-70.656 22.528-140.288 33.792-210.944 2.048-16.384-2.048-31.744-11.264-45.056v0zM510.976 634.88c-77.824 0-140.288-63.488-140.288-141.312s63.488-140.288 141.312-140.288c77.824 0 141.312 63.488 140.288 142.336 0 76.8-63.488 139.264-141.312 139.264v0zM792.576 142.336c-4.096 4.096-9.216 8.192-14.336 11.264-14.336 8.192-30.72 13.312-47.104 17.408-30.72 8.192-62.464 12.288-94.208 15.36-40.96 4.096-82.944 6.144-122.88 6.144-48.128 0-94.208-2.048-140.288-8.192-34.816-4.096-68.608-9.216-101.376-20.48-10.24-3.072-19.456-7.168-28.672-12.288-5.12-2.048-9.216-6.144-12.288-10.24-6.144-7.168-6.144-14.336 0-21.504 4.096-4.096 8.192-7.168 13.312-10.24 13.312-8.192 28.672-12.288 44.032-16.384 31.744-8.192 64.512-13.312 97.28-16.384 54.272-4.096 107.52-6.144 160.768-4.096 49.152 1.024 98.304 5.12 147.456 14.336 22.528 4.096 45.056 9.216 66.56 17.408 7.168 3.072 15.36 7.168 21.504 11.264 4.096 2.048 7.168 5.12 9.216 8.192 6.144 6.144 6.144 12.288 1.024 18.432v0zM845.824 735.232c0 3.072 0 6.144-1.024 9.216-10.24 52.224-19.456 103.424-29.696 155.648-3.072 17.408-11.264 31.744-23.552 44.032-13.312 14.336-29.696 24.576-47.104 32.768-31.744 16.384-65.536 26.624-99.328 33.792-44.032 9.216-89.088 13.312-115.712 13.312-77.824 0-135.168-6.144-191.488-22.528-25.6-7.168-51.2-17.408-74.752-30.72-12.288-7.168-23.552-15.36-33.792-25.6-12.288-12.288-20.48-27.648-23.552-45.056-9.216-52.224-19.456-103.424-29.696-155.648 0-3.072-1.024-5.12-1.024-8.192 1.024-12.288 12.288-19.456 23.552-13.312 1.024 1.024 2.048 1.024 3.072 2.048 37.888 27.648 79.872 46.080 124.928 60.416 40.96 13.312 82.944 20.48 124.928 24.576 49.152 4.096 98.304 3.072 146.432-3.072 64.512-9.216 125.952-27.648 184.32-59.392 11.264-6.144 22.528-14.336 32.768-20.48 2.048-1.024 3.072-2.048 5.12-3.072 14.336-6.144 25.6-0 25.6 11.264v0zM582.656 493.568c0 38.912-31.744 70.656-70.656 70.656s-70.656-31.744-69.632-70.656c0-38.912 31.744-70.656 70.656-70.656 37.888-0 69.632 31.744 69.632 70.656v0zM582.656 493.568z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"bitbucket\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 187,\n        \"id\": 184,\n        \"name\": \"bitbucket\",\n        \"prevSize\": 32,\n        \"code\": 59657\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 74\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M433.152 651.264c-17.408-9.216-33.792-18.432-50.176-26.624-39.936-19.456-76.8-44.032-105.472-76.8-35.84-39.936-55.296-88.064-61.44-140.288-11.264-90.112 17.408-167.936 87.040-226.304 32.768-27.648 70.656-49.152 108.544-68.608 69.632-35.84 139.264-69.632 210.944-100.352 91.136-38.912 186.368 27.648 200.704 115.712 9.216 53.248-3.072 102.4-39.936 141.312-14.336 15.36-35.84 24.576-55.296 34.816-40.96 21.504-81.92 41.984-123.904 62.464-3.072 1.024-5.12 3.072-10.24 6.144 9.216 5.12 17.408 9.216 25.6 13.312 47.104 23.552 91.136 50.176 126.976 89.088 92.16 101.376 87.040 264.192-10.24 360.448-25.6 24.576-55.296 44.032-87.040 59.392-70.656 34.816-141.312 70.656-211.968 105.472-27.648 13.312-55.296 23.552-86.016 23.552-68.608 0-131.072-49.152-146.432-115.712-13.312-56.32-4.096-108.544 36.864-152.576 18.432-20.48 45.056-29.696 68.608-41.984 37.888-19.456 75.776-37.888 112.64-57.344 3.072-1.024 6.144-3.072 10.24-5.12zM665.6 483.328c-1.024-22.528-9.216-40.96-29.696-51.2-24.576-12.288-48.128-25.6-73.728-36.864-5.12-2.048-12.288-1.024-17.408 1.024-34.816 17.408-69.632 34.816-104.448 53.248-27.648 14.336-53.248 32.768-71.68 59.392-19.456 28.672-10.24 66.56 20.48 81.92 23.552 12.288 48.128 23.552 71.68 35.84 8.192 4.096 14.336 4.096 22.528 0 39.936-21.504 80.896-41.984 119.808-64.512 17.408-10.24 31.744-24.576 46.080-38.912 10.24-10.24 16.384-23.552 16.384-39.936z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"fyuse\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 188,\n        \"id\": 183,\n        \"name\": \"fyuse\",\n        \"prevSize\": 32,\n        \"code\": 59658\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 75\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M768 179.2l-256 132.096-257.024-133.12c-84.992 44.032-169.984 89.088-254.976 132.096v269.312c171.008 88.064 340.992 177.152 512 265.216 171.008-88.064 342.016-177.152 512-265.216 0-89.088 0-179.2 0-268.288-84.992-44.032-171.008-88.064-256-132.096zM12.288 325.632l235.52 121.856-235.52 121.856v-243.712zM248.832 695.296l-224.256-116.736 224.256-116.736v233.472zM248.832 425.984v7.168l-229.376-117.76 229.376-118.784v229.376zM768 432.128v-238.592c68.608 44.032 137.216 88.064 206.848 132.096l-206.848 108.544v-2.048zM262.144 425.984v-229.376l235.52 121.856-235.52 122.88h-1.024v-15.36zM262.144 458.752v-3.072h1.024l231.424 120.832-232.448 119.808v-237.568zM505.856 827.392l-235.52-121.856 235.52-121.856v243.712zM507.904 568.32l-231.424-119.808 235.52-121.856 232.448 119.808-236.544 121.856zM755.712 461.824v242.688l-237.568 122.88v-249.856l237.568-122.88v7.168zM755.712 431.104v6.144l-230.4-118.784 229.376-119.808v232.448zM768 698.368v-238.592l230.4 119.808-230.4 118.784zM1010.688 570.368l-239.616-123.904 239.616-124.928v248.832z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"youtube gaming\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 189,\n        \"id\": 182,\n        \"name\": \"yt-gaming\",\n        \"prevSize\": 32,\n        \"code\": 59659\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 76\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M446.464 1024l-367.616-211.968v-428.032l367.616 198.656v441.344zM512 481.28l-435.2-230.4 435.2-250.88 435.2 250.88-435.2 230.4zM947.2 813.056l-366.592 210.944v-440.32l366.592-197.632v427.008z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"sketchfab\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 190,\n        \"id\": 181,\n        \"name\": \"sketchfab\",\n        \"prevSize\": 32,\n        \"code\": 59660\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 77\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M773.12 115.712v146.432h-124.928v249.856h-125.952v-249.856h-271.36v-146.432h-250.88v792.576h250.88v-396.288h124.928v249.856h272.384v-249.856h124.928v396.288h250.88v-792.576z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"mobcrush\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 191,\n        \"id\": 180,\n        \"name\": \"mobcrush\",\n        \"prevSize\": 32,\n        \"code\": 59661\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 78\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 0h487.424c0 162.816 0 324.608 0 487.424-162.816 0-324.608 0-487.424 0v-487.424z\",\n          \"M536.576 0h487.424c0 162.816 0 324.608 0 487.424-162.816 0-324.608 0-487.424 0 0-162.816 0-324.608 0-487.424v0z\",\n          \"M0 536.576c162.816 0 324.608 0 487.424 0 0 162.816 0 324.608 0 487.424h-487.424v-487.424z\",\n          \"M536.576 536.576c162.816 0 324.608 0 487.424 0 0 162.816 0 324.608 0 487.424h-487.424c0-162.816 0-324.608 0-487.424v0z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"microsoft\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 185,\n        \"id\": 179,\n        \"name\": \"microsoft\",\n        \"prevSize\": 32,\n        \"code\": 59662\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 79\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M79.872 512c0-165.888 0-331.776 0-496.64 0-15.36 0-15.36 14.336-15.36 151.552 0 303.104 0 454.656 0 63.488 0 125.952 11.264 184.32 35.84 83.968 34.816 145.408 91.136 181.248 175.104 16.384 37.888 24.576 77.824 27.648 118.784 4.096 47.104 1.024 94.208-8.192 140.288-16.384 78.848-54.272 145.408-114.688 198.656-40.96 35.84-88.064 59.392-138.24 76.8-54.272 17.408-109.568 26.624-166.912 29.696-32.768 2.048-64.512 1.024-97.28 1.024-12.288 0-12.288 0-12.288 12.288 0 61.44 0 121.856 0 183.296 0 15.36-4.096 28.672-15.36 38.912-8.192 8.192-18.432 12.288-30.72 12.288-89.088 0-177.152 0-266.24 0-12.288 0-12.288 0-12.288-12.288 0-165.888 0-332.8 0-498.688z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"pandora\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 184,\n        \"id\": 178,\n        \"name\": \"pandora\",\n        \"prevSize\": 32,\n        \"code\": 59655\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 80\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-280.576 0-508.928 211.968-508.928 474.112 0 149.504 73.728 282.624 189.44 369.664v180.224l173.056-95.232c46.080 13.312 95.232 19.456 146.432 19.456 280.576 0 508.928-211.968 508.928-474.112s-228.352-474.112-508.928-474.112zM562.176 637.952l-129.024-138.24-252.928 138.24 278.528-296.96 133.12 139.264 249.856-139.264-279.552 296.96z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"facebook messenger\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 183,\n        \"id\": 177,\n        \"name\": \"messenger\",\n        \"prevSize\": 32,\n        \"code\": 59654\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 81\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M811.008 813.056c-8.192-11.264-19.456-19.456-30.72-26.624-3.072-1.024-3.072-2.048-1.024-5.12 11.264-11.264 21.504-22.528 30.72-34.816 26.624-33.792 47.104-70.656 60.416-111.616 1.024-3.072 2.048-4.096 5.12-2.048 7.168 4.096 14.336 8.192 22.528 11.264 12.288 4.096 23.552 7.168 36.864 4.096 21.504-4.096 36.864-16.384 47.104-34.816 7.168-12.288 10.24-25.6 8.192-39.936-3.072-20.48-14.336-35.84-29.696-49.152-11.264-9.216-23.552-14.336-38.912-13.312-8.192 1.024-17.408 2.048-25.6 4.096-5.12 3.072-5.12 3.072-5.12-3.072 0-19.456-2.048-39.936-5.12-59.392-6.144-36.864-17.408-72.704-33.792-106.496-2.048-3.072-1.024-4.096 2.048-5.12 9.216-3.072 17.408-7.168 26.624-11.264 12.288-7.168 22.528-15.36 29.696-28.672 7.168-15.36 8.192-31.744 4.096-48.128-4.096-15.36-11.264-28.672-25.6-36.864-9.216-6.144-19.456-9.216-29.696-11.264-17.408-4.096-33.792-1.024-49.152 10.24-10.24 8.192-18.432 17.408-25.6 28.672-2.048 2.048-2.048 3.072-5.12 1.024-6.144-6.144-12.288-11.264-18.432-17.408-15.36-14.336-32.768-26.624-50.176-37.888-24.576-15.36-50.176-28.672-77.824-37.888-3.072-1.024-3.072-2.048-2.048-4.096 3.072-5.12 6.144-10.24 8.192-16.384 5.12-12.288 8.192-25.6 6.144-38.912-4.096-20.48-14.336-35.84-31.744-47.104-12.288-8.192-25.6-11.264-39.936-10.24-12.288 1.024-23.552 5.12-34.816 12.288-14.336 9.216-24.576 21.504-28.672 38.912-3.072 13.312-3.072 27.648 0 40.96 1.024 3.072 0 4.096-3.072 4.096-12.288 0-24.576 1.024-36.864 2.048-26.624 2.048-52.224 8.192-77.824 16.384-17.408 5.12-34.816 12.288-52.224 20.48-3.072 1.024-4.096 1.024-5.12-2.048-1.024-6.144-3.072-11.264-6.144-16.384-6.144-14.336-14.336-26.624-27.648-33.792-18.432-10.24-38.912-12.288-58.368-5.12-22.528 7.168-35.84 24.576-43.008 47.104-6.144 21.504-3.072 40.96 11.264 58.368 7.168 9.216 15.36 16.384 25.6 22.528 3.072 2.048 3.072 3.072 1.024 5.12-5.12 4.096-9.216 9.216-13.312 14.336-21.504 23.552-38.912 49.152-54.272 77.824-9.216 17.408-17.408 35.84-23.552 54.272-1.024 3.072-3.072 4.096-5.12 2.048-3.072-2.048-7.168-4.096-11.264-5.12-10.24-4.096-21.504-8.192-32.768-8.192-28.672-1.024-57.344 20.48-64.512 49.152-6.144 21.504-2.048 40.96 11.264 59.392 10.24 15.36 24.576 23.552 43.008 26.624 11.264 2.048 22.528 1.024 33.792-1.024 3.072-1.024 4.096 0 5.12 3.072 2.048 15.36 4.096 30.72 6.144 45.056 4.096 28.672 10.24 56.32 20.48 82.944 5.12 12.288 9.216 25.6 13.312 38.912 1.024 3.072 0 4.096-3.072 5.12-2.048 0-5.12 1.024-7.168 2.048-16.384 5.12-30.72 13.312-40.96 28.672-8.192 12.288-10.24 25.6-10.24 43.008 0 16.384 5.12 31.744 19.456 44.032 11.264 10.24 25.6 15.36 40.96 18.432s29.696 0 41.984-8.192c11.264-8.192 20.48-18.432 28.672-29.696 3.072-5.12 3.072-5.12 7.168-1.024 10.24 10.24 22.528 19.456 33.792 28.672 20.48 15.36 41.984 28.672 65.536 40.96 15.36 7.168 29.696 14.336 46.080 19.456 3.072 1.024 4.096 2.048 2.048 5.12s-4.096 7.168-6.144 11.264c-5.12 11.264-9.216 23.552-9.216 35.84 0 25.6 12.288 44.032 32.768 57.344 13.312 8.192 27.648 11.264 41.984 9.216 13.312-2.048 24.576-7.168 34.816-14.336 8.192-6.144 14.336-13.312 18.432-22.528 5.12-12.288 6.144-25.6 6.144-38.912 0-6.144-1.024-12.288-2.048-19.456 0-2.048 1.024-3.072 3.072-3.072 9.216-1.024 19.456-2.048 28.672-3.072 31.744-3.072 63.488-9.216 94.208-20.48 15.36-5.12 30.72-10.24 45.056-15.36 3.072-1.024 4.096-1.024 4.096 2.048 0 2.048 1.024 4.096 1.024 6.144 4.096 16.384 12.288 30.72 25.6 40.96 14.336 11.264 30.72 13.312 47.104 14.336 12.288 1.024 23.552-4.096 33.792-11.264 16.384-11.264 25.6-27.648 29.696-47.104 6.144-19.456 3.072-34.816-8.192-50.176zM508.928 811.008c-157.696 0-300.032-134.144-297.984-299.008-2.048-162.816 134.144-301.056 299.008-300.032 163.84 1.024 300.032 136.192 299.008 299.008-1.024 165.888-134.144 300.032-300.032 300.032z\",\n          \"M894.976 700.416c-27.648-1.024-51.2 22.528-52.224 50.176 0 29.696 24.576 53.248 51.2 52.224 27.648 0 51.2-22.528 52.224-50.176 0-28.672-22.528-52.224-51.2-52.224z\",\n          \"M271.36 844.8c-26.624-1.024-51.2 20.48-51.2 51.2s24.576 51.2 50.176 51.2c28.672 0 52.224-21.504 52.224-52.224 1.024-28.672-22.528-50.176-51.2-50.176z\",\n          \"M749.568 182.272c27.648 0 51.2-23.552 51.2-51.2s-23.552-51.2-51.2-51.2c-27.648 0-51.2 21.504-51.2 51.2-1.024 27.648 22.528 51.2 51.2 51.2z\",\n          \"M406.528 124.928c26.624 0 52.224-22.528 51.2-50.176 0-29.696-21.504-52.224-50.176-52.224s-52.224 22.528-52.224 51.2c0 28.672 22.528 50.176 51.2 51.2z\",\n          \"M899.072 409.6c0 28.672 20.48 52.224 51.2 53.248 27.648 0 51.2-23.552 51.2-51.2 0-29.696-24.576-51.2-51.2-50.176-26.624-3.072-51.2 19.456-51.2 48.128z\",\n          \"M123.904 617.472c0-29.696-21.504-51.2-51.2-51.2-28.672 0-51.2 22.528-51.2 51.2s22.528 51.2 50.176 51.2c28.672 0 52.224-23.552 52.224-51.2z\",\n          \"M614.4 900.096c-28.672 0-52.224 23.552-51.2 51.2-1.024 26.624 21.504 52.224 51.2 51.2 27.648 0 51.2-23.552 51.2-51.2s-23.552-51.2-51.2-51.2z\",\n          \"M129.024 325.632c28.672 0 51.2-22.528 51.2-51.2 1.024-25.6-20.48-51.2-50.176-51.2-30.72 0-52.224 24.576-52.224 51.2-0 27.648 23.552 51.2 51.2 51.2z\",\n          \"M989.184 785.408c-18.432 0-34.816 15.36-34.816 34.816 0 18.432 16.384 34.816 34.816 34.816 19.456 0 34.816-15.36 34.816-34.816s-16.384-34.816-34.816-34.816z\",\n          \"M99.328 147.456c0 24.576 15.36 37.888 33.792 37.888 19.456 0 33.792-15.36 34.816-34.816 0-18.432-15.36-34.816-34.816-34.816-17.408 1.024-33.792 15.36-33.792 31.744z\",\n          \"M733.184 935.936c-19.456 0-35.84 15.36-34.816 33.792 0 17.408 14.336 33.792 35.84 34.816 17.408 0 32.768-15.36 32.768-33.792-1.024-18.432-15.36-34.816-33.792-34.816z\",\n          \"M923.648 874.496c0-19.456-14.336-32.768-33.792-32.768-18.432-1.024-34.816 15.36-34.816 32.768 0 18.432 16.384 35.84 32.768 34.816 19.456-0 36.864-14.336 35.84-34.816z\",\n          \"M68.608 208.896c0-18.432-16.384-35.84-33.792-35.84-18.432 0-33.792 15.36-33.792 33.792s15.36 34.816 33.792 34.816c17.408 0 33.792-15.36 33.792-32.768z\",\n          \"M839.68 936.96c-20.48 0-34.816 15.36-34.816 32.768 0 19.456 15.36 35.84 33.792 35.84s34.816-15.36 34.816-33.792c0-18.432-15.36-34.816-33.792-34.816z\",\n          \"M1006.592 695.296c0-18.432-14.336-33.792-32.768-33.792-19.456 0-34.816 15.36-34.816 34.816s14.336 33.792 33.792 33.792c19.456-1.024 33.792-16.384 33.792-34.816z\",\n          \"M46.080 366.592c18.432 0 33.792-17.408 33.792-35.84 0-17.408-16.384-32.768-32.768-32.768-19.456 0-34.816 15.36-34.816 32.768 0 19.456 15.36 35.84 33.792 35.84z\",\n          \"M286.72 86.016c19.456 0 34.816-14.336 34.816-32.768s-15.36-33.792-33.792-33.792c-18.432 0-33.792 14.336-33.792 31.744 0 20.48 14.336 34.816 32.768 34.816z\",\n          \"M183.296 90.112c18.432 0 32.768-14.336 32.768-33.792 0-18.432-14.336-33.792-33.792-33.792-18.432 0-34.816 15.36-33.792 33.792s16.384 33.792 34.816 33.792z\",\n          \"M988.16 953.344c-9.216 0-17.408 8.192-17.408 17.408s8.192 17.408 18.432 17.408c9.216 0 16.384-7.168 16.384-17.408-1.024-10.24-8.192-17.408-17.408-17.408z\",\n          \"M990.208 926.72c8.192 0 15.36-8.192 15.36-17.408 0-10.24-7.168-17.408-16.384-17.408s-17.408 7.168-17.408 16.384c-1.024 9.216 8.192 18.432 18.432 18.432z\",\n          \"M923.648 954.368c-9.216 0-17.408 8.192-17.408 17.408s9.216 17.408 19.456 17.408c8.192 0 15.36-8.192 15.36-17.408 0-10.24-8.192-17.408-17.408-17.408z\",\n          \"M33.792 135.168c9.216 0 16.384-7.168 16.384-16.384 0-8.192-7.168-17.408-16.384-16.384-9.216 0-17.408 7.168-17.408 16.384 1.024 8.192 8.192 16.384 17.408 16.384z\",\n          \"M33.792 72.704c9.216 0 16.384-7.168 16.384-16.384s-7.168-16.384-16.384-16.384c-9.216 0-17.408 8.192-17.408 16.384 1.024 9.216 8.192 16.384 17.408 16.384z\",\n          \"M99.328 72.704c9.216 0 16.384-7.168 16.384-16.384s-7.168-16.384-16.384-16.384c-8.192 0-16.384 8.192-16.384 16.384 0 9.216 7.168 16.384 16.384 16.384z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"gamewisp\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 182,\n        \"id\": 176,\n        \"name\": \"gamewisp\",\n        \"prevSize\": 32,\n        \"code\": 59653\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 82\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M534.528 498.688c78.848-16.384 143.36-87.040 143.36-191.488 0-110.592-80.896-211.968-239.616-211.968h-438.272v832.512h452.608c159.744 0 242.688-100.352 242.688-225.28-1.024-103.424-70.656-189.44-160.768-203.776zM177.152 251.904h222.208c60.416 0 97.28 35.84 97.28 87.040 0 53.248-37.888 87.040-97.28 87.040h-222.208v-174.080zM407.552 772.096h-230.4v-189.44h229.376c68.608 0 106.496 41.984 106.496 95.232 0 59.392-39.936 94.208-105.472 94.208zM913.408 97.28c-53.248 0-98.304 45.056-98.304 98.304s37.888 90.112 84.992 90.112c10.24 0 19.456-1.024 23.552-4.096-10.24 45.056-56.32 97.28-96.256 118.784l68.608 56.32c76.8-54.272 128-138.24 128-232.448 0-80.896-52.224-126.976-110.592-126.976z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"bloglovin\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 181,\n        \"id\": 175,\n        \"name\": \"bloglovin\",\n        \"prevSize\": 32,\n        \"code\": 59652\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 83\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M34.816 405.504c0-9.216 7.168-16.384 16.384-16.384h453.632c81.92 0 148.48 66.56 148.48 148.48v132.096c0 9.216-7.168 16.384-16.384 16.384 0 0-1.024 0-1.024 0h-453.632c-81.92 0-148.48-66.56-148.48-148.48v-132.096z\",\n          \"M843.776 389.12h130.048c9.216 0 16.384 7.168 16.384 16.384v132.096c0 81.92-66.56 148.48-148.48 148.48h-130.048c-9.216 0-16.384-7.168-16.384-16.384v-132.096c0-81.92 66.56-148.48 148.48-148.48z\",\n          \"M636.928 728.064h-262.144c-9.216 0-16.384 7.168-16.384 16.384v264.192c0 9.216 7.168 16.384 16.384 16.384h130.048c81.92 0 148.48-66.56 148.48-148.48v-132.096c0-9.216-7.168-16.384-16.384-16.384z\",\n          \"M674.816 168.96c0 93.184-75.776 168.96-168.96 168.96s-168.96-75.776-168.96-168.96c-0-93.184 75.776-168.96 168.96-168.96s168.96 75.776 168.96 168.96z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"tunein\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 180,\n        \"id\": 174,\n        \"name\": \"tunein\",\n        \"prevSize\": 32,\n        \"code\": 59651\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 84\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M210.8 963.8h60.2v60.2h-60.2v-60.2z\",\n          \"M271.1 0v120.5h-60.2v120.5h-60.2v120.5h-60.3v120.5h-60.3v120.5h361.4v120.5h-60.2v120.5h-60.2v120.5h60.2v-60.2h60.2v-60.2h60.2v-60.2h60.3v-60.2h60.2v-60.2h60.2v-60.2h60.2v-60.2h60.2v-60.2h60.2v-60.2h60.2v-60.2h60.2v-60.2h-180.5v-60.2h60.2v-60.2h60.2v-60.2h60.2v-61h60.2v-60.2h-722.6zM692.7 481.9h-60.2v-60.2h60.2v60.2zM752.9 180.7h-60.2v60.2h-60.2v60.2h-60.2v60.2h-60.3v60.2h60.2v60.2h-60.2v-60.2h-60.2v60.2h-60.2v-60.2h-60.2v60.2h-60.2v-60.2h-60.2v-60.2h60.2v-120.4h60.2v-120.4h421.6v60.2z\",\n          \"M271.1 361.4h60.2v60.2h-60.2v-60.2z\",\n          \"M391.5 361.4h60.2v60.2h-60.2v-60.2z\"\n        ],\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"gamejolt\"\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"order\": 179,\n        \"id\": 173,\n        \"name\": \"gamejolt\",\n        \"prevSize\": 32,\n        \"code\": 59649\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 85\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M896 0h-768c-70.7 0-128 57.3-128 128v768c0 70.7 57.3 128 128 128h768c70.7 0 128-57.3 128-128v-768c0-70.7-57.3-128-128-128zM445.4 775.7c0 33.9-27.5 61.4-61.4 61.4h-189.5c-33.9 0-61.4-27.5-61.4-61.4v-581.2c0-33.9 27.5-61.4 61.4-61.4h189.5c33.9 0 61.4 27.5 61.4 61.4v581.2zM890.9 519.6c0 34-27.5 61.5-61.4 61.5h-189.5c-33.9 0-61.4-27.5-61.4-61.5v-325c0-34 27.5-61.5 61.4-61.5h189.5c33.9 0 61.4 27.5 61.4 61.5v325z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"trello\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 178,\n        \"id\": 172,\n        \"name\": \"trello\",\n        \"prevSize\": 32,\n        \"code\": 59650\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 86\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M334.264 89.764c59.238 59.249 118.753 118.764 178.729 178.739 59.361-59.986 118.477-119.726 177.265-179.128 111.555 111.575 222.802 222.822 333.742 333.752-170.179 170.168-340.695 340.695-511.498 511.488-170.752-170.117-341.832-340.552-512.502-510.597 111.503-111.503 222.74-222.74 334.264-334.254zM690.34 244.152c-58.819 59.433-117.934 119.173-177.94 179.804-60.099-60.119-119.798-119.818-179.579-179.61-58.737 59.361-117.647 118.897-175.677 177.562 119.327 119.337 238.264 238.254 357.038 357.038 118.18-118.18 236.954-236.964 355.471-355.471-59.597-59.597-119.337-119.337-179.313-179.323z\"\n        ],\n        \"attrs\": [\n          {}\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"grid\": 16,\n        \"tags\": [\n          \"spreadshirt\"\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"order\": 177,\n        \"id\": 171,\n        \"name\": \"spreadshirt\",\n        \"prevSize\": 32,\n        \"code\": 59648\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 87\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M252.928 672.768c0 1.024 5.12 15.36 8.192 22.528 16.384 39.936 40.96 75.776 71.68 106.496s66.56 55.296 106.496 71.68c40.96 17.408 84.992 26.624 130.048 26.624s89.088-9.216 130.048-26.624c39.936-16.384 75.776-40.96 106.496-71.68s55.296-66.56 71.68-106.496c17.408-40.96 26.624-84.992 26.624-130.048s-9.216-89.088-26.624-130.048c-16.384-39.936-40.96-75.776-71.68-106.496s-66.56-55.296-106.496-71.68c-40.96-17.408-84.992-26.624-130.048-26.624-46.080 0-91.136 9.216-132.096 26.624-32.768 13.312-88.064 49.152-119.808 82.944v0-277.504h463.872c16.384 0 16.384-23.552 16.384-31.744s0-31.744-17.408-31.744l-499.712 1.024c-13.312 0-22.528 11.264-22.528 21.504v388.096c0 12.288 15.36 21.504 29.696 24.576 28.672 6.144 34.816-3.072 41.984-12.288l1.024-1.024c10.24-15.36 44.032-49.152 44.032-49.152 51.2-51.2 120.832-79.872 194.56-79.872s142.336 28.672 193.536 79.872c52.224 52.224 79.872 120.832 79.872 193.536s-28.672 141.312-79.872 193.536c-51.2 51.2-121.856 79.872-194.56 79.872-49.152 0-97.28-13.312-138.24-37.888v-236.544c0-31.744 13.312-65.536 36.864-91.136 26.624-29.696 62.464-46.080 101.376-46.080 37.888 0 73.728 14.336 100.352 40.96 26.624 25.6 40.96 60.416 40.96 97.28 0 78.848-62.464 140.288-141.312 140.288-15.36 0-43.008-7.168-44.032-7.168-16.384-5.12-22.528 17.408-24.576 24.576-8.192 27.648 4.096 33.792 7.168 34.816 25.6 8.192 41.984 9.216 64.512 9.216 111.616 0 202.752-91.136 202.752-202.752 0-110.592-91.136-201.728-202.752-201.728-54.272 0-106.496 20.48-144.384 59.392-36.864 35.84-58.368 83.968-58.368 132.096v1.024c0 6.144 0 147.456 0 193.536v0c-21.504-23.552-41.984-59.392-55.296-95.232-5.12-14.336-17.408-11.264-33.792-6.144-9.216 3.072-31.744 9.216-26.624 25.6v0zM491.52 617.472c0 7.168 6.144 12.288 10.24 16.384v1.024c6.144 6.144 12.288 9.216 18.432 9.216 5.12 0 7.168-2.048 8.192-3.072 3.072-3.072 34.816-34.816 37.888-37.888l35.84 34.816c3.072 4.096 7.168 5.12 11.264 6.144 6.144 0 12.288-3.072 18.432-10.24 15.36-15.36 7.168-23.552 4.096-27.648l-35.84-35.84 36.864-37.888c8.192-9.216 1.024-18.432-6.144-25.6-10.24-10.24-20.48-13.312-26.624-7.168l-36.864 36.864-37.888-37.888c-2.048-2.048-4.096-3.072-7.168-3.072-5.12 0-11.264 3.072-17.408 10.24-11.264 11.264-14.336 19.456-8.192 25.6l37.888 37.888-36.864 37.888c-5.12 3.072-6.144 7.168-6.144 10.24zM573.44 109.568c-60.416 0-123.904 12.288-171.008 32.768-5.12 2.048-8.192 6.144-8.192 11.264-1.024 5.12 1.024 12.288 4.096 21.504 3.072 7.168 10.24 27.648 25.6 21.504 48.128-18.432 101.376-28.672 149.504-28.672 55.296 0 107.52 10.24 157.696 31.744 39.936 16.384 76.8 40.96 117.76 76.8 3.072 3.072 6.144 4.096 9.216 4.096 8.192 0 15.36-8.192 22.528-15.36 11.264-12.288 18.432-22.528 7.168-32.768-38.912-36.864-81.92-64.512-134.144-87.040-57.344-23.552-117.76-35.84-180.224-35.84zM896 850.944v0c-7.168-7.168-13.312-11.264-18.432-13.312s-10.24 0-14.336 3.072l-3.072 4.096c-36.864 36.864-80.896 66.56-129.024 87.040-50.176 21.504-103.424 31.744-157.696 31.744s-107.52-10.24-157.696-31.744c-48.128-20.48-91.136-49.152-129.024-87.040-38.912-38.912-67.584-81.92-87.040-129.024-18.432-45.056-24.576-79.872-26.624-91.136 0-1.024 0-2.048 0-2.048-2.048-13.312-14.336-14.336-31.744-11.264-7.168 1.024-29.696 4.096-27.648 20.48v0c6.144 36.864 16.384 72.704 30.72 107.52 23.552 55.296 57.344 105.472 99.328 147.456 43.008 43.008 92.16 76.8 147.456 99.328 57.344 24.576 118.784 36.864 181.248 36.864s123.904-12.288 181.248-36.864c55.296-23.552 105.472-57.344 147.456-99.328 0 0 2.048-2.048 4.096-4.096 6.144-4.096 10.24-13.312-9.216-31.744z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"500px\"\n        ],\n        \"defaultCode\": 57421,\n        \"grid\": 16,\n        \"attrs\": [\n          {}\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"id\": 78,\n        \"order\": 12,\n        \"ligatures\": \"\",\n        \"name\": \"500px\",\n        \"prevSize\": 32,\n        \"code\": 57344\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 88\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M282 462c-156 0-282 126-282 280 0 156 126 282 282 282 154 0 280-126 280-282 0-78 0-46 0-80h-100c0 0 0 2 0 80 0 50-20 96-54 128-32 32-76 52-126 52s-96-20-128-52c-34-32-54-78-54-128s20-94 54-128c32-32 78-52 128-52 92 0 364 0 460 0 156 0 282-126 282-280 0-156-126-282-282-282-154 0-280 126-280 282 0 78 0 80 0 80h100c0 0 0-2 0-80 0-50 20-96 54-128 32-32 76-52 126-52s96 20 128 52c34 32 54 78 54 128s-20 94-54 128c-32 32-78 52-128 52h-460z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"8tracks\"\n        ],\n        \"defaultCode\": 57425,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 82,\n        \"order\": 13,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57345,\n        \"name\": \"8tracks\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 89\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M976 726c-6-12-10-24-16-36-8-18-16-36-24-52v-2c-72-154-148-310-226-464l-4-6c-8-16-16-32-24-48-10-18-22-38-38-56-34-40-80-62-130-62-52 0-98 22-132 62-16 18-26 38-36 56-10 16-18 32-26 48l-4 6c-78 154-154 310-226 464v2c-8 16-16 34-24 52-4 12-10 24-14 36-14 38-18 74-14 112 12 76 62 140 134 170 26 10 56 16 84 16 10 0 18 0 28-2 34-4 68-16 102-34 42-24 82-58 128-106 44 48 86 82 126 106 34 18 70 30 104 34 8 2 18 2 26 2 30 0 58-6 84-16 72-30 122-94 134-170 4-38 0-74-12-112zM514 780c-56-70-92-136-104-190-6-24-6-44-4-64 2-16 8-30 16-42 20-28 54-44 92-44 36 0 70 16 90 44 8 12 14 26 16 42 4 20 2 40-4 64-12 54-48 120-102 190zM922 828c-6 54-42 98-92 120-24 10-52 12-80 10-26-4-50-12-78-28-36-20-74-52-116-98 68-84 110-160 124-228 8-32 10-60 4-88-4-26-12-48-26-70-32-46-86-72-144-72-60 0-114 26-146 72-14 22-22 44-26 70-4 28-4 56 4 88 16 68 58 144 124 228-42 46-80 78-116 98-26 16-52 24-78 28-28 2-54 0-80-10-48-22-84-66-92-120-4-26-2-52 8-80 4-10 8-20 14-32 8-16 16-34 24-50v-2c70-154 146-308 224-462l4-6c8-16 16-32 24-46 10-18 18-32 30-46 22-26 50-38 82-38s60 12 80 38c12 14 20 28 30 44 8 16 16 32 24 48l4 6c78 154 154 308 224 462v0c8 18 16 34 24 52 6 12 10 22 14 32 10 28 12 54 8 80z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"airbnb\"\n        ],\n        \"defaultCode\": 57446,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 103,\n        \"order\": 22,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57346,\n        \"name\": \"airbnb\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 90\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M140 208c0 0 0-2 2-2 12-10 24-16 42-14 12 2 22 6 36 10 14 6 26 12 42 16 8 4 18 6 26 6 28 0 46-20 44-46 0 0 0-2 2-2 4 6 12 10 20 12 12 2 22 0 32-4 16-6 24-18 20-36 0-6-2-12-4-18 0-6 0-8 4-8 10 0 20 0 30 2 20 4 38 14 56 24 4 2 8 4 14 8 0-6-2-10-2-16-2-14-2-26 4-38 0-6 2-10 6-10 2 0 2 4 4 8 4 12 2 26 2 40 0 4-2 8-2 12 4 0 6-2 6-4 12-6 24-14 38-18 18-8 38-12 56-10 6 2 6 2 4 8s-2 12-4 16c-2 20 6 34 24 38 18 6 36 4 52-8 0 2 0 4 0 4-2 20 14 40 34 42 10 2 20 0 28-2 16-4 30-10 44-16 14-4 26-8 38-10 18-2 34-2 46 12 0 2 2 4 6 2-6-12-16-18-30-22-14-2-30 0-44 2-18 2-34 6-52 6-12 0-24 0-36-8-4-2-8-4-8-8 2-4 8-6 12-6 8-2 16 0 24 2 6 0 14 2 22 0-30-20-62-24-94-26 16-6 32-12 50-22-4 0-6 0-10 0-18 2-38 2-58-2-6-2-6-2-2-8 6-10 16-14 28-18 8-4 16-4 24-6-6-4-14-6-22-6-22-2-44 0-66 6-18 2-34 6-52 8-4 0-6-2-6-6 0-14 4-24 14-30 8-6 18-10 28-12 2-2 6-2 10-4-2 0-4 0-6 0-22 0-42 6-60 18-4 2-6 2-10 0-14-10-22-24-26-40-2-8-2-14-2-24-4 4-2 8-6 12-2-4-2-8-6-14 0 8 0 16 0 22-4 18-12 34-28 44-4 2-6 2-10 0-12-8-26-14-40-16-8-2-16-2-24 0 2 0 4 2 6 2 12 2 22 6 32 12 8 10 14 20 12 34 0 4-2 6-6 4-14-2-30-4-44-8-26-4-50-8-74-6-8 2-14 2-22 6 0 2 2 0 4 0 10 2 20 4 32 8 6 4 14 8 18 16 2 4 2 6-4 6-20 4-40 4-60 2-2 0-4 0-6 2 18 8 34 14 52 22-34 0-68 4-96 26 2 2 4 0 6 0 12 0 22-4 34-4 4 0 8 2 14 4 4 2 4 4 0 8-8 6-18 10-28 10-14 2-28 0-44-2-18-4-34-6-52-6-10 0-16 0-24 4-8 2-12 8-16 16 0 2-2 2 0 4 0 2 0 0 2 0zM396 464c-8 8-16 12-22 18-6 8-12 16-12 26-2 48 18 84 54 112 4 4 8 6 14 8 22 10 48 4 64-16 18-18 20-44 8-66-6-8-12-16-18-22-8-10-16-18-22-28-12-18-14-36-8-56 4-10 8-20 14-28 8-16 14-34 14-50 0-6 0-6-6-6-10 2-16 6-24 10-8 2-14 6-20 8-18 2-28-4-34-18-2-6-4-10-4-16-2-14-4-26-6-38-2-4 0-4 2-6 12-2 22 0 32 8 6 4 10 8 16 12 16 12 36 16 56 18-2 0-2 0-2-2-24-14-42-30-60-52-4-6-10-10-16-16-16-12-32-12-46 4-2 2-4 6-6 8-12 16-18 38-20 58 0 22 8 36 26 44 6 2 10 4 18 8 6 2 10 4 16 8 22 12 26 34 12 54-8 6-14 12-20 16zM620 392c8-4 16-10 24-12 6-4 14-6 20-10 10-6 14-12 16-22 6-36-8-64-32-88 0-2-2-2-2-2-8-6-16-6-22-4-8 6-16 10-22 16-10 8-18 16-26 24-10 14-24 24-38 32-2 2-6 2-8 6 20-2 40-6 56-18 6-4 12-10 18-14 10-6 20-8 30-8 4 2 6 2 4 6-2 6-4 12-4 18-2 10-4 20-6 32-6 20-20 26-40 22-6-2-12-6-18-8-8-4-14-6-24-8-4-2-6 0-6 4 2 18 6 34 14 50 4 4 6 10 10 16 6 16 10 30 6 48-2 16-10 26-20 38-8 10-18 18-24 28-24 34-12 72 24 88 22 8 40 4 58-8 30-24 48-54 52-94 2-22-4-40-22-52-6-6-12-12-18-16-6-6-10-10-14-18-10-16-4-34 14-46zM190 650c4-6 8-12 12-18 4-10 8-20 14-28 4-12 10-24 16-34 10-18 24-24 44-18 4 0 10 4 14 6 0 0 2 2 4 0-4-12-10-20-22-24-8-4-18-4-26-4-20 0-38 6-56 16-2 2-4 4-4 0-4-32-6-64 0-96 4-30 20-54 46-70 6-2 12-6 20-10 8-6 16-10 22-16 4-4 10-8 12-14 0 0-2-2-2-2-2 0-2 0-4 0-26-2-50 0-76 8-4 2-4 0-6-2 0-8-4-14-10-16-4-2-6-4-10-4s-4-2-4-6c0-2 0-2 2-4 4-22 16-38 34-50 12-8 26-14 40-18 2-2 4-2 2-4-14-14-28-24-46-30-12-2-24-2-34 4-4 0-6 2-6 6 0 10 4 18 12 24 6 6 6 6 0 12-12 8-20 20-26 32-20 32-32 66-32 102 0 4 2 6 4 8 6 4 12 6 18 8 2 0 4 0 2 2-2 12 4 20 10 28 2 2 4 4 2 6-8 52-4 104 4 156 2 10 2 10-6 14-16 8-24 22-20 40 2 2 2 4 4 6 20 8 38 8 52-10zM868 612c-4-2-6-2-4-6 10-54 14-108 4-160 0-4 0-4 2-6 8-8 12-18 10-28 0-2 0-4 4-4s10-2 16-6c4-2 6-6 6-10-2-42-16-78-40-110-6-8-14-14-20-22s-6-8 2-14c4-4 8-8 10-12 2-14 0-16-14-18-22-6-56 10-72 32 2 0 4 2 6 2 16 6 30 12 44 22 16 14 26 30 28 50 0 4 0 6-4 6-12 0-20 6-22 20-2 4-2 4-6 2-26-8-52-10-76-8-2 0-4 0-6 2 2 2 4 6 6 8 8 8 16 12 24 18 12 6 20 10 30 18 20 12 32 28 38 50 10 38 8 74 4 110 0 2-2 4-4 2-18-14-42-18-68-16-10 0-18 4-26 10-6 4-8 10-10 18 6-2 10-4 14-4 18-8 32-4 44 10 4 4 6 8 8 12 6 10 10 22 16 32 6 12 10 24 16 36 14 20 36 26 58 16 2-2 4-2 4-6 4-12 2-22-6-32-6-8-10-12-16-14zM646 788c-10 2-14 6-18 14-4 10-4 18-6 26-4 20-12 38-26 54-16 20-34 38-56 54-2 4-6 6-10 8-10 6-22 6-34 2-6-4-14-8-20-14-22-16-40-38-58-60-8-12-14-26-16-42 0-8-2-18-6-28-2-6-8-12-18-12-8-2-14 2-20 10-4 6-6 16-8 24-2 14 0 28 6 42 4 6 10 12 18 12 0-2 0-2-2-4-6-10-10-24-8-38 0-4 2-8 4-12 4-2 6-2 8 2 2 2 2 6 2 10 2 20 12 36 22 50 8 14 18 26 28 38 2 4 4 6 2 10-2 16 0 30 6 44 2 4 6 8 10 12 0-4-2-6-2-10-2-8-4-16-2-24 0-4 4-8 10-8 12 0 24 6 32 14 8 6 6 6 2 12-6 6-12 16-16 24s-6 16-2 28c2-6 4-10 8-14 2-2 6-6 8-8 6-4 12-8 16-12 10-6 10-6 22 0 12 8 24 16 30 30 0 0 2 0 2 0 2-12-2-22-8-32-4-6-8-14-12-20-2-2-4-4-2-6 8-6 16-14 30-16 16-2 18 0 18 16 0 6-2 12-2 20 0 2-2 2-2 6 4-4 6-8 10-12 8-14 8-30 6-46-2-4 0-6 2-10 12-14 24-28 32-44 8-14 14-28 16-42 0-4 2-6 4-10 0-2 2-4 4-4s4 2 4 4c8 12 6 32-2 42-2 2-2 4-4 6s-2 2-2 4c2 0 2 0 4 0 6-2 10-6 14-10 10-22 12-44 0-66-2-10-8-14-18-14zM846 704c-6-4-14-8-22-14-6-2-10-6-14-14-2-2-4-4-2-8 4-2 6-4 10-2 4 0 8 2 12 2 2 2 4 2 8 0-6-2-10-6-14-10-4-2-8-4-14-2-4 0-4-2-4-4 2-8 2-18 2-26-2-18-10-34-24-44-18-12-38-10-52 2 12 4 12 4 24 16 4 4 8 8 16 6 4 0 6 2 6 6-2 16-4 34-8 52-10 46-34 88-62 128-2 2-4 2-4 0-8-8-14-16-22-22-8-10-16-16-26-22-10-4-20-4-30 0-6 4-12 6-20 6-2 0-2 0-2 2 2 16 14 24 28 20 6 0 12-4 16-4 18-8 28-2 34 18 0 0 2 2 2 4 2 12 2 24 2 36 2 12 2 28 8 40 0 4 2 6 6 10 0-2 0-4 0-6-2-24 4-46 14-66 10-18 24-32 40-46 6-4 6-4 10 2 6 6 8 12 12 16 2 4 6 8 12 10-8-20-10-42-8-62 0-14 4-28 12-40 2-4 4-4 8 0 4 2 6 6 6 10 0 8 0 16 0 22s2 12 6 16c0-4 2-8 2-12s0-8 2-10c2-10 10-12 18-10 10 2 16 8 22 16 4 10 2 18-6 24-2 2-6 4-8 6 6 0 10-2 14-2 16-8 20-26 8-38-6 0-12-4-18-6zM380 774c6 2 12 4 18 6 4 0 10-2 14-4 4-4 6-12 8-16 2-2 0-4-2-4-6 0-12-2-16-4-14-8-26-6-38 2-10 6-18 14-26 22-6 6-10 10-16 16-2 2-4 2-6 0-14-20-26-40-36-62-18-36-30-76-32-118 0-4 0-6 6-6 6 2 10 0 14-4 8-8 14-16 26-18-18-14-42-12-58 2-10 8-14 22-16 34-2 10-2 22 0 32 0 2 2 4-2 4-14-4-22 6-30 12 2 0 4 0 8 0 4-2 8-4 12-4s8 2 10 4c2 4 0 6-2 8-4 4-6 8-10 12-8 4-16 8-22 12-8 4-14 8-20 14-6 8-8 18-2 28 4 8 14 12 24 12-2-2-4-4-8-6-8-6-10-12-4-22 2-6 8-12 14-16 14-8 24-4 28 12 0 4 0 8 2 12 0 0 0 2 2 2 2-4 2-8 4-14 0-8 0-16 0-22 2-6 2-10 6-12 4-4 6-4 10 2 2 4 4 8 6 14 6 18 6 38 4 58-2 10-4 20-6 30 6-4 10-8 14-14 4-4 6-12 10-16 2-2 4-2 6 0 24 20 42 44 52 74 4 14 6 30 4 44 2 0 2-2 2-2 6-12 8-24 8-36 4-16 2-32 6-48 2-22 12-28 34-20zM576 702c6-10 8-20 8-32 0-8-2-10-10-12-2 0-4 0-8 0-6 0-12 0-20 0-14 2-18-2-24-16 0-6-2-10-6-12-4-4-6-4-10 0-2 4-4 10-6 14-4 10-10 14-20 14-4 0-10 0-16 0s-14-2-20 2c-4 0-4 2-6 6 0 14 4 28 12 40 6 6 10 14 16 22 8 10 10 20 10 32 0 0 0 2 2 2 4-2 4-8 6-12 2-6 2-12 4-16s6-4 10-2c2 0 6 2 4 8s0 14 2 22c4 12 12 24 14 36 2-4 2-10 2-14-2-8-4-18-6-26 0-6 0-12 2-20 4-6 8-8 12-8 6 2 8 6 10 10 0 6 2 10 2 16 2 2 2 6 6 6-4-16 2-26 12-38 8-8 12-16 18-22zM474 462c-6 2-8 4-6 8 0 16 6 30 16 42 8 10 16 18 24 28 2 2 4 2 6 0 8-8 18-16 26-26 10-14 16-28 16-44 0-4 0-6-6-8-12-2-24-4-38-4s-26 2-38 4zM484 246c-4 6-8 14-10 22-4 10-2 18 4 26 16 18 36 20 56 10 2 0 4-2 8-4 12-8 16-20 10-34-2-6-6-10-8-14-10-12-12-24-10-38 0-4 0-8-2-12-4 8-8 16-10 24-2 10-2 20-2 28 0 6 0 12-2 16-2 2-4 4-8 4-2 0-2-2-4-6-4-10-4-22-4-32 0-8 0-16-2-24-2-4-4-8-8-10 2 8 2 16 0 24s-6 14-8 20zM524 358c-2 2-2 6-2 8-2 10 2 20 4 28 4 8 6 16 6 24 0 2 0 4-4 6-8 4-18 6-28 4-8-4-10-6-8-14 2-10 6-18 8-28 2-8 4-16 0-26-4 14-14 28-20 40s-8 26-8 40c0 4 0 6 4 8 24 10 50 10 72 0 4-2 6-4 6-8 0-12-2-24-6-36-8-16-20-30-24-46zM140 468c0-6-2-10-10-8s-10 6-12 12c-4 14-2 26 4 38 0-10 4-18 10-26 4-6 6-10 8-16zM906 470c-2-6-6-10-14-12-4 0-6 0-8 6 0 8 2 12 6 18 4 8 12 16 12 26 6-12 8-24 4-38z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"alliance\"\n        ],\n        \"defaultCode\": 57344,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 1,\n        \"order\": 23,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57347,\n        \"name\": \"alliance\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 91\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M910 764c-126 54-262 80-388 80-184 0-362-50-506-134-12-8-22 6-12 14 134 122 310 194 506 194 140 0 304-44 416-126 18-14 2-36-16-28zM1020 702c-12-16-118-28-182 16-10 8-8 16 4 16 36-4 116-14 130 4s-16 94-30 128c-4 10 6 14 14 6 60-50 76-156 64-170zM568 324c-58 6-134 10-188 34-64 28-108 82-108 164 0 104 66 156 150 156 72 0 110-18 166-74 18 28 24 40 56 68 8 4 18 4 24-2v0c20-18 56-50 78-66 8-8 6-18 0-28-18-24-38-46-38-92v-156c0-66 4-126-44-172-38-36-102-50-150-50-96 0-202 36-224 154-2 12 6 18 14 20l98 10c8 0 16-8 18-18 8-40 42-60 80-60 20 0 44 8 56 26 14 20 12 48 12 72v14zM548 532c-14 28-40 46-68 46-38 0-62-30-62-74 0-84 78-100 150-100v22c0 38 0 70-20 106z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"amazon\"\n        ],\n        \"defaultCode\": 57426,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 83,\n        \"order\": 24,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57348,\n        \"name\": \"amazon\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 92\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M506 404c46-6 80-14 102-24 36-14 54-40 54-70 0-40-14-68-42-82-28-16-70-24-124-24-60 0-102 16-128 44-18 22-30 52-36 90h-244c4-86 28-154 70-208 68-86 182-130 346-130 108 0 202 22 286 64 82 42 124 122 124 238v446c0 30 0 68 2 112 2 32 6 56 14 68 10 12 22 22 38 30v36h-276c-8-20-14-38-16-56-4-18-6-36-8-58-34 38-76 70-122 96-54 32-116 48-184 48-88 0-162-24-220-74s-86-122-86-214c0-120 46-206 138-260 52-28 126-50 224-62zM662 522c-16 10-34 18-50 24s-38 14-68 18l-58 10c-54 10-92 22-116 36-40 22-60 58-60 106 0 44 12 76 36 96 24 18 54 28 90 28 54 0 106-16 152-48 48-32 72-90 74-176z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"amplement\"\n        ],\n        \"defaultCode\": 57345,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 2,\n        \"order\": 14,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57349,\n        \"name\": \"amplement\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 93\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M888 320c-34 0-62 30-62 64v248c0 34 28 62 62 62s62-28 62-62v-248c0-34-28-64-62-64zM136 320c-34 0-62 30-62 64v248c0 34 28 62 62 62s62-28 62-62v-248c0-34-28-64-62-64zM236 322v452c0 28 22 50 48 50h56v136c0 36 28 64 62 64s62-28 62-64v-136h98v136c0 36 28 64 62 64s62-28 62-64v-136h56c26 0 48-22 48-50v-452zM644 88l50-74c4-4 2-10-2-12-4-4-8-2-12 2l-52 78c-36-14-74-22-116-22s-80 8-116 22l-52-78c-4-4-8-6-12-2-4 2-6 8-2 12l50 74c-80 38-138 110-146 194h556c-8-84-66-156-146-194zM396 206c-18 0-32-14-32-30 0-18 14-32 32-32 16 0 30 14 30 32 0 16-14 30-30 30zM632 206c-16 0-30-14-30-30 0-18 14-32 30-32 18 0 32 14 32 32 0 16-14 30-32 30z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"android\"\n        ],\n        \"defaultCode\": 57406,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 63,\n        \"order\": 15,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57350,\n        \"name\": \"android\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 94\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M152 726c0-42 10-74 28-98 16-20 40-36 74-44-10-28-16-48-16-60 0-22 12-46 36-70s48-36 70-36c10 0 24 4 40 10-32-92-56-162-70-210-16-54-24-92-24-114 0-32 8-58 24-76s40-28 68-28c48 0 106 98 174 296l16 50c4-10 8-22 12-34 68-196 128-292 180-292 28 0 48 8 64 26s24 42 24 70c0 20-8 58-24 114-14 48-36 116-66 200 38 10 66 28 82 54 18 30 28 74 28 134 0 120-36 216-108 292s-162 114-274 114c-44 0-86-8-128-24-40-14-74-36-108-66-34-32-58-66-76-100-16-36-26-72-26-108zM218 722c0 16 4 36 14 60 8 20 22 42 40 66 26 36 58 62 96 82 38 18 82 28 130 28 86 0 158-32 218-98 58-64 88-146 88-244 0-30-2-54-6-70s-10-26-20-36c-18-14-54-28-106-40-54-12-110-18-170-18-14 0-24 2-28 6-4 2-6 10-6 20 0 28 16 48 46 60 34 14 88 20 166 20h28c10 0 18 4 22 12 6 4 10 14 12 30-12 12-30 22-56 32-24 8-42 16-52 26-28 18-48 42-64 68s-24 52-24 76c0 14 4 30 10 50 8 22 12 36 12 44v6l-4 14c-30-2-52-16-66-40-10-22-16-50-18-82-2 0-6 0-12 0h-12c2 4 2 8 2 12 0 20-8 38-24 52-14 14-32 20-54 20-30 0-62-14-94-44-34-32-50-62-50-92 0-4 2-10 4-16 0-4 6-12 16-22 16 22 28 36 34 44 28 40 54 60 76 60 6 0 12-2 18-6 4-4 6-8 6-10 0-6-4-16-12-30-6-10-18-28-38-54-18-24-34-40-44-50-10-8-18-14-22-14-14 0-26 8-38 22-12 16-18 34-18 56zM308 530c0 8 6 24 16 46 10 18 24 40 46 68 20 26 38 48 56 62 16 14 28 20 36 20 4 0 10-2 14-8 4-4 6-10 6-16 0-8-6-26-18-58-14-34-28-64-46-92-14-24-28-40-38-50-12-10-22-14-32-14-8 0-16 4-24 14-10 12-16 20-16 28zM354 96c0 24 8 58 24 108 14 48 36 110 66 190 6-4 16-6 28-6 0 0 2 0 6 2 4 0 8 0 10 0 4 0 12 0 28 2l-70-202c-18-52-34-88-44-104-10-14-18-20-26-20-6 0-12 2-16 8s-6 14-6 22zM520 608c6 16 12 32 20 50 12-14 26-28 40-38-4 0-10-2-16-2-6-2-12-2-14-2-14-4-24-6-30-8zM626 404l66 12c30-84 54-150 70-200 16-54 26-86 26-96 0-12-4-20-8-26-2-4-8-6-16-6s-18 8-30 26c-12 20-28 54-44 102z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"angellist\"\n        ],\n        \"defaultCode\": 57432,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 89,\n        \"order\": 16,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57351,\n        \"name\": \"angellist\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 95\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M926 344c-72 24-120 124-120 198 0 96 54 196 142 220-24 84-92 190-154 234-26 18-56 26-94 26-24 0-52-4-90-20-30-14-58-20-76-20-16 0-50 10-96 28-26 8-48 14-62 14-42 0-78-18-116-48-118-108-184-266-184-432 0-162 102-318 260-318 48 0 82 10 114 26 30 18 56 24 84 24 22 0 48-4 72-14 62-24 102-36 126-36 60 0 108 18 148 54 16 16 32 38 46 64zM506 232c0-56 24-106 62-154 38-42 90-68 146-78 0 58-20 116-58 162-44 48-92 70-150 70z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"apple\"\n        ],\n        \"defaultCode\": 57477,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 134,\n        \"order\": 17,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57352,\n        \"name\": \"apple\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 96\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 126l-512 772h104l116-178h584l116 178h104zM288 630l224-338 224 338z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"appnet\"\n        ],\n        \"defaultCode\": 57450,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 107,\n        \"order\": 25,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57353,\n        \"name\": \"appnet\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 97\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M656 326c82 12 134-76 146-142 10-66-44-144-102-158-58-12-130 80-136 142-8 74 10 148 92 158zM184 540c112-24 96-158 94-186-6-46-60-124-130-118-90 8-104 138-104 138-12 60 30 190 140 166zM390 316c62 0 112-70 112-158s-50-158-112-158c-60 0-110 70-110 158s50 158 110 158zM302 772c-2 8-10 32-4 54 12 46 54 48 54 48h58v-142h-62c-28 8-42 30-46 40zM982 438c0-32-26-128-124-128-100 0-112 92-112 156 0 60 6 146 128 142 120-2 108-138 108-170zM858 718c0 0-128-98-202-204-100-158-244-94-292-14s-122 130-132 144c-10 12-154 90-122 230 32 142 144 138 144 138s82 8 176-12c96-22 178 4 178 4s224 76 284-68c60-144-34-218-34-218zM476 932h-144c-62-14-88-56-90-64-4-6-22-40-12-98 26-88 104-94 104-94h76v-96l66 2zM746 930h-166c-66-16-68-62-68-62v-184l68-2v166c4 18 26 22 26 22h68v-186h72z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"baidu\"\n        ],\n        \"defaultCode\": 57431,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 88,\n        \"order\": 21,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57354,\n        \"name\": \"baidu\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 98\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 664h380l178-310h-380zM756 468c-8-12-18-20-34-26-12-6-28-8-46-8-6 0-14 0-20 2s-12 4-20 6c-6 4-10 8-16 12-4 4-8 8-12 14v0-114h-50v310h46v-32h2c4 8 8 14 14 20 6 4 12 8 18 10 8 4 16 6 24 6 8 2 14 2 24 2 16 0 30-4 44-10 12-6 22-16 30-26 8-12 14-24 18-38s6-28 6-44c0-16-2-32-6-46-6-14-14-26-22-38zM730 580c-2 10-8 18-12 26-6 8-12 14-20 18-8 6-18 8-28 8s-20-2-26-6c-10-4-16-10-22-16-4-8-10-16-12-26-2-8-4-20-4-32 0-22 6-42 16-56s28-22 48-22c10 0 20 2 28 8 8 4 14 10 20 16 4 8 10 16 12 26 4 10 4 20 4 30-2 8-2 18-4 26zM956 618c-10 8-22 12-38 12-10 0-20-2-28-6-6-4-14-10-18-18-4-6-8-16-10-24-2-10-2-18-2-28 0-18 2-30 6-42 4-10 8-18 14-24s14-10 22-12c6-2 14-4 20-4 14 0 26 4 34 10 10 8 16 18 18 32h50c-2-14-6-26-10-36-6-10-14-18-22-26-10-6-20-10-32-14s-26-6-38-6c-18 0-36 4-50 10s-26 14-34 24c-10 12-16 24-22 40-4 14-8 30-8 46 0 18 4 32 8 48 6 14 12 26 22 36 8 10 20 18 34 24s30 10 48 10c30 0 52-8 70-24s28-38 34-68h-50c-2 18-8 30-18 40z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"bandcamp\"\n        ],\n        \"defaultCode\": 57346,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 3,\n        \"order\": 20,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57355,\n        \"name\": \"bandcamp\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 99\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1012 592c-6-14-14-26-22-38-28-32-60-58-92-80-4-2-6-6-10-4 22-2 40-6 60-16 14-8 20-20 18-38 0-14-6-26-12-40-16-24-38-42-60-58-12-8-24-14-38-22-4-2-6-4-2-8 4-6 6-10 8-16 18-34 38-68 54-104 4-10 10-20 12-32 0-4 0-10 0-14 0-2 0-2-2-4-2 0-4 2-4 2-2 4-4 10-8 14-14 22-28 48-44 70-14 24-28 48-44 72-2 4-4 4-8 2-26-10-50-18-74-26-32-10-66-18-98-22-4 0-8-2-10-6-2-6-6-12-10-18-34-60-74-118-124-166-22-20-48-38-82-42-2 0-4 0-8 0-10 2-18 4-26 10-16 10-26 24-32 42-16 32-24 66-28 102 0 12-2 24-2 36-4 0-4-4-6-6-10-12-22-24-36-32-10-8-22-8-36-2-18 8-30 24-40 42-10 26-16 52-16 80 0 12 0 24 0 36 0 4-2 6-6 6-6 0-12 0-18 0-24 2-50 2-74 4-22 0-44 2-64 6-6 0-12 2-18 6-2 0-6 2-4 4 0 2 4 2 6 2 32 2 62 2 96 2 24 2 46 2 70 2 2 0 4 0 6 2 10 0 10 0 10 10 8 58 22 114 44 168 2 4 0 8-2 10-6 12-12 22-20 34-28 48-50 98-64 152-8 30-14 58-10 88s22 48 48 56c18 4 38 4 56 0 32-6 64-16 94-30 10-4 16-8 26-12-2 6-4 10-6 16-4 10-8 20-8 32-4 22 2 36 24 46 6 2 14 4 20 6 16 2 34 0 48-2 32-8 58-22 86-38 4-4 6-4 10 2 16 26 32 52 50 78 12 20 26 40 40 56 6 6 12 10 20 10 2-4 0-6-2-8-6-8-10-16-14-22-6-14-14-24-20-36-16-32-34-62-50-92-4-8-4-8 4-14 20-16 40-32 60-52 22-20 44-42 64-68 4-6 8-6 14-6 26 0 52 0 80-2s52-4 78-8c38-6 74-14 108-32 22-12 42-28 44-56 0 0 0 0 0 0-2-4-2-8 0-12 0 0 0-2 0-2-2-6-2-14-4-20zM402 248c4-28 10-56 22-82 6-12 10-22 20-30 12-16 30-18 46-12 10 2 18 8 26 14 30 24 54 58 74 92-68 0-132 14-190 50-2-12 0-22 2-32zM242 310c2-22 4-44 12-64 4-10 10-20 18-26 16-14 44-10 52 10 2 0 2 2 2 4 0 24 2 48 6 74 0 4-2 2-4 2-14 0-26 0-40 0 0 0 0 2 0 2-14 0-26 0-40 0-4 2-6 2-6-2zM298 744c-12 2-22 2-32 0-26-4-40-20-42-46 0-18 4-34 8-50 8-26 18-52 34-78 34 58 76 106 134 140 0 2-2 2-2 2-32 14-66 26-100 32zM508 830c-22 12-44 20-68 22-4 0-6 0-8 0-32-4-40-28-30-54 0-2 2-4 4-4 10-6 20-14 30-20 10-8 20-14 30-20 4 6 8 12 12 20 10 16 20 34 32 52 0 0 4 2-2 4zM622 742c-26 24-52 48-80 68-4 4-6 4-8-2-10-20-20-42-32-62 0-2-2-4-2-8 42 2 80-8 116-28-36 10-74 14-112 12 0-4 2-4 4-6 80-68 152-144 216-228 4-6 4-8-2-10-8-4-16-10-24-14-2 0-4-2-6 2-24 34-54 62-84 90-58 50-120 94-184 138-4 2-6 2-10 0-44-26-74-62-98-104-30-48-46-102-58-160-8-26-12-54-14-82-2-6 0-8 6-8 24 4 50 4 72 6 6 0 6 2 4 6-20 34-30 68-30 106 0 2 0 4 0 4 10-34 22-68 44-100 4 22 8 42 12 60 20 84 46 164 78 242 2 6 4 6 8 4 8-6 16-10 24-14 2-2 4-4 2-6-18-38-26-76-34-116-16-74-24-148-28-222 0-6 0-8 6-12 36-22 76-32 118-34 64-4 128 8 188 26 30 10 58 20 84 32 2 2 4 2 2 6-14 22-26 42-42 64-18-36-46-64-80-82 12 12 26 26 36 42 10 14 20 30 28 48-8-2-18-6-26-8-24-10-48-16-72-24-68-18-136-32-204-40-14-2-14-2-14 12 0 8 0 14 0 20 0 4 0 4 4 4 48 4 94 20 140 36 64 22 126 50 186 80 2 2 2 4 2 8 0 46-14 88-36 130-26 48-60 88-100 124zM864 648c-12 10-26 16-40 20-32 8-66 12-100 12 34-58 56-120 56-188 2 0 4 2 6 2 30 24 58 46 82 78 6 8 10 16 14 26 4 20 0 36-18 50zM870 446c-8 4-16 4-24 0-18-12-40-20-60-30-2 0-4-2-2-6 12-22 26-46 38-70 2-2 2-4 6-2 18 14 38 26 52 46 6 10 12 20 12 32 0 14-8 26-22 30z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"battlenet\"\n        ],\n        \"defaultCode\": 57347,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 4,\n        \"order\": 19,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57356,\n        \"name\": \"battlenet\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 100\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M232.060 155.36c-31.52-42.58-93.44-49.22-133.82-12.72-34.84 32.080-37.6 86.26-9.4 124.42l181.92 243.84-183.020 246.060c-28.2 38.16-25.98 92.34 9.4 124.42 40.36 36.5 102.3 29.86 133.82-12.72l255.46-343.38c6.080-8.3 6.080-19.9 0-28.2l-254.36-341.72z\",\n          \"M792.74 155.36c31.52-42.58 93.44-49.22 133.82-12.72 34.84 32.080 37.6 86.26 9.4 124.42l-181.92 243.84 183.020 246.060c28.2 38.16 25.98 92.34-9.4 124.42-40.36 36.5-102.3 29.86-133.82-12.72l-254.9-343.94c-6.080-8.3-6.080-19.9 0-28.2l253.8-341.16z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"beam mixer\"\n        ],\n        \"defaultCode\": 57348,\n        \"grid\": 16,\n        \"attrs\": [\n          {},\n          {}\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"id\": 5,\n        \"order\": 26,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57357,\n        \"name\": \"mixer\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 101\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M320 532c42-18 60-92 222-128 0-26-84-304-258-390-180-82-208 218-132 348 6 24 126 186 168 170zM474 182c40 72 56 140 62 144s40 34 42 30c10-34 14-54 16-62-72-370-230-254-230-254s68 68 110 142zM802 284c-6-4-12-6-20-10l2-2 82 22c0 0 14 2 16-14 4-14-6-22-6-22s-76-20-84-22c-16-4-44 6-62 14-2-2-4-2-6-2-4-8-20-46-12-50 6-4 104-8 104-8s14-8 12-24c0-14-20-16-20-16s-116 8-122 8c-26 4-14 36-14 36l12 50c-22 0-42 12-56 36-36 58-22 174 48 216s192 54 226-4c34-58-30-164-100-208zM842 436c-22 18-68 2-98-36-32-38-40-84-16-104 22-18 68-2 98 36 32 38 40 84 16 104zM242 792c0 0-34 92 22 226 186 24 252-52 252-52s-110-42-160-76c-48-30-114-98-114-98zM340 556c0 0-88 54-90 162 0 10 90 136 324 212 60-26 72-166 72-166s-118-58-172-88c-54-28-134-120-134-120zM570 440c-126 18-170 88-170 88s88 118 234 166c2-2-2-132 4-146 8-12 28-20 28-20s-32-24-52-46c-24-22-12-44-44-42z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"bebee\"\n        ],\n        \"defaultCode\": 57349,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 6,\n        \"order\": 28,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57358,\n        \"name\": \"bebee\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 102\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M564 1024h-104c-226 0-408-184-408-410v-512c0-56 46-102 102-102s102 46 102 102v512c0 114 92 206 204 206h104c112 0 204-82 204-180 0-100-56-180-102-180h-206c-56 0-102-46-102-102s46-102 102-102h206c170 0 306 172 306 384s-182 384-408 384z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"bebo\"\n        ],\n        \"defaultCode\": 57397,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 54,\n        \"order\": 6,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57359,\n        \"name\": \"bebo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 103\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M922 296h-256v-60h256zM498 538c20 28 30 60 30 100 0 32-6 60-18 82-14 24-30 42-50 58-22 14-46 24-72 32-26 6-54 10-82 10h-306v-636h296c30 0 58 6 84 12 24 6 44 16 62 28s32 30 42 50c10 18 14 44 14 74s-6 58-22 78c-14 22-36 40-64 52 40 12 68 32 86 60zM134 440h144c26 0 46-2 62-14s24-28 24-56c0-14-2-26-8-36-6-8-12-16-22-22-8-4-18-10-30-12s-24-4-36-4h-134zM390 630c0-32-10-54-28-68s-42-20-72-20h-156v174h152c14 0 28-2 40-4 12-4 22-8 32-14s18-14 22-26c6-10 10-24 10-42zM1024 624h-330c0 32 12 70 32 88 18 18 46 28 80 28 26 0 48-8 66-22 18-12 28-22 34-42h110c-18 62-46 96-82 120s-80 38-132 38c-36 0-68-6-98-18-28-12-52-28-72-48-20-22-36-48-48-78-10-28-16-60-16-96 0-34 6-66 18-96 10-30 26-54 46-76 22-22 46-38 74-52 30-12 62-18 96-18 38 0 72 8 102 22 28 16 52 36 70 60 20 26 32 56 40 88s12 72 10 102zM898 542c-4-30-14-54-28-70-16-18-42-26-72-26-20 0-36 4-50 12-12 6-24 14-32 24s-12 20-16 32c-4 10-6 18-6 28z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"behance\"\n        ],\n        \"defaultCode\": 57470,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 127,\n        \"order\": 7,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57360,\n        \"name\": \"behance\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 104\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M8 864c18-2 20-18 24-32 4-18 8-36 8-56 0-16 4-32 2-48-2-22-4-44-6-68 0-24 0-46 0-70 0-18 0-34 0-54 0-2 2-6 4-8 0-2 4-6 4-8 0-14 2-24-4-36-4-6-2-16-2-24 2-12 0-22 6-36 4-8 4-18-2-28-2-2-4-6-4-10 0-46 0-92 0-138 0-4 4-6 4-10 2-6 2-14 2-20 0-2-6-2-10-2-2 0-4 0-4-2-10-10-18-18-28-28-6-4-2-12 0-18 0-6 6-6 12-6 14 2 30-4 44-4 16-2 34-2 50-2s32-2 48-2c12 0 26-2 38-2 6 0 10 2 12 8 6 6 14 12 24 14 6 0 12 4 16 8 16 16 22 34 22 56 0 12 2 24 4 36 2 10 0 18-4 26-6 8-10 16-16 26-10 22-22 40-40 58-4 6-4 8 2 12 8 2 14 6 22 8 6 2 8 6 6 12 0 4-2 6-4 12-4 6-2 12 6 14 2 0 2 0 4 0 6 8 14 16 12 30-6 16-6 34 0 52 0 4 2 8 4 10 6 4 6 10 6 18 2 24 2 50 4 74 0 12-2 24-8 34-2 6-2 12-2 18 6 28 0 52-14 72-12 18-16 36-18 56-2 6-4 8-6 10-18 8-32 18-48 28-2 2-4 4-6 6-6 8-14 12-22 12-10 2-18 6-28 8-2 0-4-2-6-2-6-6-12-8-18 0s-16 6-24 6c-14 0-26-2-40-2-8 0-16 0-22 0-2 0-4-2-6-4 2-2 2-2 2-4zM108 804c12 0 20-4 30-10 10-10 22-14 30-28 2-2 4-4 6-6 2-4 6-8 6-12 2-26 8-50 14-74 4-14 2-28 0-44 0-4-4-8-4-14s0-12 2-18c4-10 4-18-2-26-2-4-2-8-4-12-2-14 8-26 4-40 0-4 0-10-2-16 0-6-4-12-4-16 2-12-4-16-10-22-12-10-24-20-34-28-4-2-6-6-10-8 0 6 0 10 0 14 0 20 2 40-4 60-2 6 0 16 2 24 2 14-2 28-8 40-2 2-2 8 0 12 0 4 2 8 2 10 0 32 0 64 0 96 0 4-2 6-4 10-2 6-4 10-4 16 0 14 0 28 2 42 0 16 0 32-10 46 2 2 2 2 2 4zM202 248c0-2 0-2 0-2-4-2-6-2-10-2-6-2-14-4-18-10 0-2-4-4-8-4s-8 2-14 2c-4 2-6 2-6-4-6 0-8 4-8 8 0 2-2 6-2 8-2 2-4 6-4 10 0 34 0 68 0 104 0 2 0 4 0 6 2 0 6 0 8 0 10 4 14-2 18-10 2-2 2-6 4-10 4-8 12-14 22-14 6-2 8-4 8-10 0-14-2-30 4-42 0-2 0-4 0-6-4-8-8-20 6-24zM388 806c14 0 30 0 46 0 2 0 4-2 6-4 8-8 16-12 28-8 10 2 20 4 30 6 12 2 26 0 38-8 4-4 10-4 16-6 12 0 24-2 34-2 24 0 46 0 68 0 26 0 52 0 80 0 6 0 6 2 6 8 0 20 0 36 0 54 0 10 2 18 6 26 2 2 2 4 4 8-2 0-4 0-6 0-22 0-42 0-60 0-4 0-8-2-12-4 0 0-2-2-2-2-10 2-18-2-28-6-2 0-4 0-6-2-4-6-12-4-18-4-14 0-28 0-42 0-6 0-8-2-12-6-6-4-14-4-22-4-40 0-82 0-122-2-6 0-10-2-14-4-16-6-32-8-46 2-10 8-20 16-28 22-2 2-4 2-6 2-16 0-32 0-48 0-2 0-4-2-6-4 2-8 8-16 16-18 2-2 6-4 8-6 16-8 22-18 20-36 0-4 2-6 2-10 4-4 4-6 0-10-2-4-2-6-2-10 0-10 0-20 0-30 0-4 0-10 4-14 2-2 0-10 2-14 0-4 2-6 4-10 4-4 2-14-4-20-6-4-6-10-6-16 0-20 0-40 0-60 0-4 2-6 2-10 2-2 2-4 2-8-2-16 0-30 2-48 2-8 2-16 4-24 0-10 0-22 2-32 0-4 2-6 2-8 6-8 6-16 0-24-2-2-2-6-2-10 0-26 0-50 0-76 0-4-2-6-4-10 0-2-2-6-2-8 0-8 0-16 0-24 0-10 2-18 10-24 0-2 2-4 2-6 0-12 0-24 0-36 0-2 0-4 0-4-8-6-4-12 0-18 10-18 2-36-6-52-2-2-8-4-12-4-4-2-6-2-10-6-6-10-16-18-24-28 0 0 0-2 2-2 4-8 4-8 12-2 2 0 6 2 8 2 10 0 22 0 34 0 2 0 8 2 10 4 6 6 10 10 16 8 2 0 4 0 6 2 8 8 16 16 22 24 2 2 4 4 4 6 0 16 0 32 0 48 0 2-2 6-2 8-6 6-6 10 0 16s8 10 8 18c-2 6 2 14-6 18 0 2 0 4 0 6 0 40 0 80 0 118 0 2 0 6 2 8 12 6 12 18 12 28 0 36-2 70-4 106 0 0 0 2 0 4-10 16-6 36-2 54 2 10 2 22 2 32 0 0-2 2-4 2-8 6-8 16-4 24 2 4 2 10 0 12-4 6-4 12-4 16 0 8 2 16-4 22-2 0-2 4-2 6 0 6 0 14 0 22 0 6 0 12-4 16s-4 8 0 12c4 4 4 10 6 14-2 0-2 0-2 0zM790 308c-4-2-4-6-4-12 2-4 2-10 0-16s0-12 4-16c2-4 4-8 4-12 0-28 0-58 0-88 0-14 0-12 12-12 60 0 118 0 178 0 4 0 10-2 14 4 0 2 4 2 6 4-6 14-14 28-20 40-4 6-6 10-6 18 2 10-2 18-10 26-4 4-8 8-6 18 2 6-2 12-8 18-4 4-4 10-6 16-2 20-6 38-14 56-4 10-2 22-2 34s0 24-2 34c0 10-4 16-8 24-4 12-6 24-14 36-2 4-2 10 0 16 0 6-2 10-6 14-10 8-14 16-12 28 0 2 0 4 0 6 2 34-2 66-16 98-2 4-2 8-2 14 2 22-6 42-14 60-6 10-10 22-14 32 0 4-2 8-4 12 0 2 0 6 2 6 2 2 6 0 8 0s6-2 8-2c10 0 18 0 28-2 2 0 6-4 6-6 0-14 12-20 24-24 16-8 32-16 48-24 6-2 12-10 18-16 8 8 18 4 26 6 6 0 10 2 14 6 4 6 4 10 0 14-4 8-4 16 0 24 2 6 4 10 4 16 0 14 0 26 0 40 0 8-8 16-16 16-22 0-46 0-68 0-4 0-8-4-12-6-4 0-10-2-16-4-2 0-6 0-10 0-2 0-6 0-10 2-10 10-18 14-30 12-14 0-24 0-36 2-8 0-16 4-24 8-14 6-16-2-16-14 0-8 2-18 2-26 0-2 0-4 2-6 6-4 6-12 4-20 0-2 2-6 4-8 8-6 10-12 8-22 0-4 2-8 2-10 2-4 4-10 4-14 2-6 0-10 2-14 8-22 8-42-2-64-6-14-8-30-6-48 0-16 2-34 6-50 2-14 8-28 14-40 6-16 12-36 20-52 2-4 2-8-2-12-2-2-2-10 0-12 4-6 6-12 6-20 0-4 4-10 6-14 8-16 16-30 14-50 0-2 0-4 0-6 10-24 20-50 38-72 2-2 2-4 2-6 0-8 0-16 6-22 2-2-2-10-8-10-8 0-16 0-22 0-2 0-6 0-6-2-4-6-10-8-18-8-22 4-24 4-32 22-6 16-8 34-12 52 0 4-2 8-4 14s-4 8-10 8-12 4-16 6zM730 616c4 8 8 6 12 2s8-10 10-16c4-12 4-12 18-10 0 10 2 20 2 30 0 2-2 2-2 4-10 10-14 22-14 34 0 22 0 44 2 66 0 6-2 8-6 10-4 0-6 2-8 4-8 6-16 6-24 6-14 0-26 0-40 0-6 0-10 0-14-6-4-4-18 0-22 4-10 10-14 10-24 4-4-2-10-4-16-4-10-2-18-2-28 0-6 0-10-2-12-8 0 0 0 0 0 0 12-12 8-24 8-38 0-4-2-10 4-14 2-2 2-8 2-10 0-4-2-6-4-8-4-8-8-14-4-22 2-2 0-6 0-8-8-16-2-32 0-50 4-14 6-30 10-46 4-12 12-22 20-34 2-6 4-12 8-16 6-12 12-24 18-34 2-6 4-10 6-14 6-20 12-38 16-56 2-8 6-12 12-18 4-2 6-6 10-10 6-8 14-14 18-24 2-2 4-6 4-8 0-8-2-16-2-24 0-6 4-10 6-12 4-8 10-14 16-22 4-4 6-10 10-14 10-8 12-16 12-26-2-10 0-20 0-28-10-2-20-2-28-2-6 0-14 0-22 0-16-2-28 4-40 12s-16 16-18 28c0 4-2 6-6 8-2 2-6 4-10 6-4 4-8 10-6 16 0 10-2 20 0 28 0 14-4 26-14 36 0 0-2 0-2-2-4-16-8-32-12-48 0-6 4-14 4-20 2-12 2-22-8-30-2-2-2-4-2-6 0-16-2-30 0-44 0-6 4-14 6-20 56 0 114 0 172 0 0 10 0 18 0 26 0 4 2 8 2 12 2 4 2 6 2 10 0 34 0 66 0 98 0 2 0 6 0 6-8 10-8 22-6 34 0 4-2 6-2 8-6 14-14 26-20 40-6 10-10 18-12 30-2 6-2 14-2 20s0 8-6 12c-6 2-10 4-14 8-12 8-12 22-12 34 0 2 0 6 0 6-8 12-16 20-22 30-8 20-18 42-26 62 0 4-2 8-2 12 0 12-4 20-8 32-8 22-18 46-26 66-2 6 2 12 8 10 6 0 10-2 14-4 10-6 22-10 34-12 10 0 18-6 22-14 6-10 12-18 18-26s14-14 22-16c2 0 6-4 6-6 4-6 4-12 6-18 4-4 6-6 6-6zM412 168c4-8 6-8 12-8 34 0 68 0 102 0 6 0 8 4 10 8s0 8-4 10c-12 6-24 12-26 26-2 4 0 10 2 16 4 4 6 10 0 14-6 6-6 12-6 18 0 16 0 28 0 42 2 30 2 60 2 88 0 6 0 12-2 16 0 10 2 22 6 32 0 4 2 8 2 14 0 2-2 4-2 6-2 6-8 10-6 16 0 22 4 42 4 62 2 10 4 20-6 28-4 2-6 10-4 14 2 14 2 28 8 42 8 16 4 34 2 52 0 2-2 6-4 8-4 4-6 8-4 16 0 4 2 10 4 14 2 6 6 10 10 12 6 6 14 10 22 14s10 12 10 20c-20 0-40 0-58 0-8 0-18 0-26 2-6 2-12 4-18 8-8 6-8 6-16-4 8-6 16-14 24-22 2-2 4-6 4-10 2-22 4-46 6-68 0-4 2-6 2-10 2-6 4-12 2-16-8-12-6-24 2-38 0-2 0-6 0-8 0-32 0-64 0-96 0-48 0-96 0-144 0-2-2-6 0-6 8-6 2-10 0-18-4-10-2-22-4-32 0-20-2-40-2-62 0-8-2-18-2-28 0-6-4-10-10-12-6-4-12-4-18-10-6-2-12-2-18-6z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"blizzard\"\n        ],\n        \"defaultCode\": 57350,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 7,\n        \"order\": 8,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57361,\n        \"name\": \"blizzard\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 105\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M952 390h-44c-44 0-68-30-68-62v-28c0-146-162-300-300-300h-216c-182 0-324 144-324 326v388c0 170 146 310 298 310h410c168 0 316-142 316-314v-246c0-46-16-74-72-74zM324 266h186c32 0 60 28 60 62 0 32-28 62-60 62h-186c-32 0-60-30-60-62s28-62 60-62zM694 758h-370c-32 0-60-24-60-56 0-34 28-56 60-56h370c32 0 60 22 60 56 0 32-28 56-60 56z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"blogger\"\n        ],\n        \"defaultCode\": 57463,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 120,\n        \"order\": 30,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57362,\n        \"name\": \"blogger\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 106\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1006 778c-2-2-6-4-8-6-26-12-54-24-80-36-22-12-46-12-70 0-100 46-200 94-300 140-24 10-48 12-70 0-100-46-202-94-302-140-24-12-48-12-72 0s-50 24-74 34c-8 4-20 8-20 20 0 10 12 12 20 16 148 70 296 140 446 208 24 12 48 12 70 2 150-70 300-140 450-210 4-2 8-4 10-6 10-6 10-16 0-22zM16 246c4 2 10 6 14 8 150 68 298 138 446 208 24 10 48 10 72 0 148-70 298-140 446-208 4-4 10-6 14-10 8-4 8-12 0-18-4-4-10-6-14-10-148-68-296-138-444-206-26-12-50-12-76 0-148 68-296 138-444 208-6 2-10 4-14 6-8 6-8 16 0 22zM1006 502c-2-2-6-4-8-6-26-12-54-24-80-36-22-12-46-12-70 0-100 46-200 94-300 140-24 10-48 10-70 0-100-46-202-94-302-140-24-12-48-12-72 0s-50 24-74 34c-8 4-20 8-20 18 0 12 12 14 20 18 148 70 296 140 446 208 24 12 48 12 70 2 150-70 300-140 450-210 4-2 8-4 10-6 10-6 10-16 0-22z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"buffer\"\n        ],\n        \"defaultCode\": 57455,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 112,\n        \"order\": 31,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57363,\n        \"name\": \"buffer\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 107\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M704 512c0 106-86 192-192 192s-192-86-192-192c0-106 86-192 192-192s192 86 192 192zM514 286h462c-84-170-260-286-460-286-164 0-310 76-404 196l176 300c8-118 106-210 226-210zM988 320h-352c64 40 104 110 104 190 0 38-10 76-28 108l-232 404c12 0 22 0 34 0 282 0 510-228 510-512 0-66-14-132-36-190zM520 742c-100 0-186-64-216-152l-216-366c-56 82-88 180-88 286 0 262 194 478 444 512l180-306c-32 16-66 26-104 26z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"chrome\"\n        ],\n        \"defaultCode\": 57351,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 8,\n        \"order\": 32,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57364,\n        \"name\": \"chrome\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 108\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M894 304c72 0 128-58 128-128s-56-128-128-128c-70 0-126 58-126 128s56 128 126 128zM894 384c-70 0-126 58-126 128s56 128 126 128c72 0 128-58 128-128s-56-128-128-128zM894 720c-70 0-126 58-126 128s56 128 126 128c72 0 128-58 128-128s-56-128-128-128zM508 48c-70 0-128 58-128 128s58 128 128 128c70 0 128-58 128-128s-58-128-128-128zM508 384c-70 0-128 58-128 128s58 128 128 128c70 0 128-58 128-128s-58-128-128-128zM126 48c-70 0-128 58-128 128s58 128 128 128c70 0 128-58 128-128s-58-128-128-128z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"coderwall\"\n        ],\n        \"defaultCode\": 57449,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 106,\n        \"order\": 33,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57365,\n        \"name\": \"coderwall\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 109\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M848 680c-32-96-84-122-84-122 26 36 32 90 14 132-16 32-70 76-98 32-10-14-10-30-8-48 4-14 6-30 14-46 8-14 18-30 28-42 12-18 20-38 24-60 4-18 2-56-16-68 6 22-10 44-28 54-4 2-6 2-8 4-6 0-12 0-16 0-14-2-30-14-36-28-10-22-4-48 14-66 14-14 32-18 52-10-10-56-48-92-76-134-38-54-56-118-32-178 0 0 0-2 0-4 24-52 86-88 144-98-4 0-6 0-10 0-96 0-176 52-176 52-138 94-46 230-34 250s4 60-36 62c-58 4-70-88-70-88-42 46-32 126 34 182 42 36 42 88 28 136-8 26-22 50-42 66-48 34-106 10-134-34-46-74 2-144 2-144-70 28-108 68-122 114 0 0 0 2-2 2 0 6-2 14-4 18s-2 8-2 12c0 2-2 4-2 8-4 46 0 126 70 192 102 96 180 90 222 100 42 12 82 36 110 100 0 0 18-36 44-54 40-28 104-28 162-66s106-136 74-226z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"curse\"\n        ],\n        \"defaultCode\": 57352,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 9,\n        \"order\": 34,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57366,\n        \"name\": \"curse\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 110\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M886 0l-218 44v322c-48-64-118-94-206-94-94 0-178 34-246 102-76 74-118 168-118 274 0 116 44 214 128 290 66 58 142 86 232 86 86 0 152-24 218-86v82h208v-1020zM506 828c-112 0-192-78-192-182 0-98 80-182 184-182 100 0 178 80 178 186 0 102-78 178-170 178z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"dailymotion\"\n        ],\n        \"defaultCode\": 57507,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 164,\n        \"order\": 35,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57367,\n        \"name\": \"dailymotion\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 111\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 742h186v56h-186zM0 668h186v56h-186zM0 594h186v56h-186zM0 520h186v56h-186zM0 446h186v56h-186zM208 742h188v56h-188zM208 668h188v56h-188zM208 594h188v56h-188zM418 742h188v56h-188zM418 668h188v56h-188zM418 594h188v56h-188zM418 520h188v56h-188zM418 446h188v56h-188zM418 374h188v56h-188zM418 300h188v56h-188zM628 742h186v56h-186zM628 668h186v56h-186zM628 594h186v56h-186zM628 520h186v56h-186zM628 446h186v56h-186zM838 742h186v56h-186zM838 668h186v56h-186zM838 594h186v56h-186zM838 520h186v56h-186zM838 446h186v56h-186zM838 374h186v56h-186zM838 300h186v56h-186zM838 226h186v56h-186z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"deezer\"\n        ],\n        \"defaultCode\": 57353,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 10,\n        \"order\": 36,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57368,\n        \"name\": \"deezer\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 112\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 512h-512v512h-512v-512h512v-512h512z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"delicious\"\n        ],\n        \"defaultCode\": 57471,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 128,\n        \"order\": 37,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57369,\n        \"name\": \"delicious\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 113\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M816.128 6.144v0 0h-174.080l-18.432 18.432-89.088 168.96-25.6 15.36h-301.056v252.928h160.768l16.384 16.384-177.152 337.92v202.752h174.080l18.432-18.432 89.088-168.96 25.6-14.336h300.032v-253.952h-160.768l-16.384-16.384 177.152-337.92v-202.752z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"deviantart\"\n        ],\n        \"defaultCode\": 57472,\n        \"grid\": 16,\n        \"attrs\": [\n          {}\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"id\": 129,\n        \"order\": 27,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57370,\n        \"name\": \"deviantart\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 114\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M826 396c-28-12-54-36-88-46 32 46 68 96 64 180-4 64-34 110-68 146s-78 62-134 80c-28 8-60 16-92 16-102 0-206-8-306 4 0-10-2-18-4-26 40-10 96-22 100-72 2-26 4-320-2-342-8-30-64-40-96-46 0-8 4-16 2-26 68-8 136-10 206-12 186-8 348 30 418 144zM436 322c-10 2-6 32-6 40 0 76-2 164-2 238 0 24-6 74 8 86s68 6 92 6c112-8 164-132 126-244-26-72-82-120-172-126-12-2-30-2-40 0-2 0-4 0-6 0zM490 802c8 126 24 222 40 222s30-98 38-230c-26 6-50 6-78 8zM376 920c10 0 20-56 26-120-18 0-36 0-52 0 6 64 16 120 26 120zM660 766c6 98 14 156 26 156s22-74 28-186c-18 10-36 22-54 30zM530 0c-16 0-32 92-40 218 28 2 52 4 78 8-8-130-22-226-38-226zM376 118c-10 0-20 40-26 106 16 0 34 0 52 0-6-66-16-106-26-106zM686 118c-10 2-20 44-26 124 16 4 38 12 54 22-4-90-14-148-28-146z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"diablo\"\n        ],\n        \"defaultCode\": 57354,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 11,\n        \"order\": 29,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57371,\n        \"name\": \"diablo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 115\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M308 348h102v348h-102zM164 204h102v492h-266v-348h164zM164 430h-62v184h62zM308 308h102v-104h-102zM450 348h266v472h-266v-82h164v-42h-164zM552 614h62v-184h-62zM1024 348v472h-266v-82h164v-42h-164v-348zM922 430h-62v184h62z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"digg\"\n        ],\n        \"defaultCode\": 57468,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 125,\n        \"order\": 9,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57372,\n        \"name\": \"digg\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 116\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M898 238c-126-94-246-90-246-90l-12 14c150 44 218 110 218 110-92-48-182-74-264-82-64-8-124-6-178 2-4 0-8 0-14 2-32 2-106 14-200 54-34 16-52 26-52 26s72-70 230-114l-10-10c0 0-120-4-246 90 0 0-126 228-126 508 0 0 74 126 268 132 0 0 34-40 58-72-112-34-152-102-152-102s8 6 24 14c0 0 2 2 2 2 4 2 6 4 8 6 22 12 44 20 66 28 36 16 78 28 128 38 66 12 144 18 228 2 40-8 82-20 126-38 32-12 66-28 102-52 0 0-44 70-158 102 26 34 58 72 58 72 194-6 266-132 266-132 2-282-124-510-124-510zM348 664c-48 0-88-44-88-96 0-54 40-96 88-96 50 0 90 42 90 96 0 52-40 96-90 96zM668 664c-48 0-88-44-88-96 0-54 40-96 88-96 50 0 90 42 90 96 0 52-40 96-90 96z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"discord\"\n        ],\n        \"defaultCode\": 57355,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 12,\n        \"order\": 10,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57373,\n        \"name\": \"discord\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 117\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M526 390h-54v244h54c82 0 140-40 140-122v0c0-80-58-122-140-122zM530 14c-272 0-492 224-492 498 0 74 16 144 44 206l-82 202 212-28c86 72 196 118 318 118 274 0 494-224 494-498s-220-498-494-498zM798 510c0 144-100 248-276 248h-184v-492h186c174 0 274 100 274 244z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"disqus\"\n        ],\n        \"defaultCode\": 57456,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 113,\n        \"order\": 11,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57374,\n        \"name\": \"disqus\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 118\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 16h1024v112h-1024zM838 666h102v-430h-854v430h90l76 244h-252v98h1024v-98h-258zM258 348h514v204h-514zM622 910h-226l-76-244h374z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"douban\"\n        ],\n        \"defaultCode\": 57403,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 60,\n        \"order\": 38,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57375,\n        \"name\": \"douban\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 119\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M732 328c182 2 290 116 168 270-56 70-150 142-276 186-6 2-12 4-18 6-14 4-24 8-36 12-28 8-52 14-80 20-28 4-54 10-80 12-18 2-36 2-52 2-118 4-206-28-234-96-34-82 36-196 176-284-104 42-292 140-300 280v18c2 14 4 28 8 44 30 94 172 138 350 122 18 0 36-2 54-6 26-4 52-8 80-14 26-8 52-14 80-22 6-2 12-4 16-6 14-4 24-8 36-12 156-58 270-132 338-218 40-50 58-96 64-138v-30c-12-102-132-162-294-146M612 278c4 0 8-2 12-2 26-6 38-34 40-68 0-34-12-62-40-66-2-2-6-2-8-2-24 0-38 14-46 34-4 10-6 22-6 34 0 16 2 30 6 42 8 16 20 28 42 28zM612 288c-12 0-22 2-30 4l2 2 4 10 2 8 4 8 2 8v10l2 10v18l-2 8-2 20v18l-2 8-4 20-8 32-2 6-2 8v4l-2 4-2 10v6l-2 6v2l-2 12v8l-2 6v8l-2 8v6l-2 8v6l-2 8v6c2 22 2 40 4 50 0 12 2 20 6 26 6 8 14 10 28 12 12-2 20-4 26-10 6-4 8-14 12-28 6-32 18-130 30-174 16-62 56-174-42-182-4 0-8 0-12 0zM490 258c40 0 58-36 58-80 0-42-18-78-56-78h-2c-38 0-56 36-56 78 0 44 18 80 56 80zM412 440c2 14 6 28 10 40 12 50 24 164 28 198 4 36 16 42 42 46 24-2 36-10 40-46 4-34 16-148 28-198 4-12 8-26 10-40 12-46 20-100 0-134-12-22-36-36-80-36-42 0-68 14-80 36-18 34-10 88 2 134zM358 276c4 0 8 0 12 0 22 0 34-10 42-28 4-10 6-24 6-40-2-12-4-24-6-34-8-22-24-34-46-34-2 0-4 0-6 0-30 4-42 34-40 68 0 34 12 62 38 68zM346 646c2 14 6 22 12 28s14 10 26 10c14 0 22-4 28-12 2-6 6-14 6-26 2-10 2-28 4-50v0-8l-2-6v-8l-2-8v-6l-2-8v-8l-2-6v-8l-2-6v-6l-2-6v-6l-2-6v-4l-2-6v-4l-2-6-2-8-2-10-8-32-2-10-2-8-2-10v-8l-4-20v-26l4-20 4-16 4-8 4-10 2-2c-8-2-18-4-30-4-4 0-8 0-12 2-98 8-58 120-42 182 12 44 26 142 30 174z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"draugiem\"\n        ],\n        \"defaultCode\": 57356,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 13,\n        \"order\": 39,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57376,\n        \"name\": \"draugiem\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 120\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M510 4c-282 0-512 230-512 512s230 512 512 512c284 0 512-230 512-512s-228-512-512-512zM850 240c60 74 98 168 98 272-14-4-158-32-304-14-4-8-6-16-10-22-8-22-18-44-28-64 160-66 234-160 244-172zM510 78c112 0 214 42 290 110-6 12-72 100-228 158-72-130-152-238-164-256 34-8 68-12 102-12zM326 120c10 16 88 124 162 254-206 54-386 52-406 52 30-136 120-248 244-306zM74 516c0-4 0-8 0-14 18 2 230 4 450-62 12 24 24 50 34 74-6 2-10 4-16 6-226 72-346 272-356 288-70-78-112-180-112-292zM510 954c-100 0-194-36-268-92 8-18 96-188 344-274 0 0 2 0 2-2 62 160 88 294 94 332-52 22-110 36-172 36zM756 878c-6-26-28-154-86-312 138-22 258 14 272 20-18 122-88 226-186 292z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"dribbble\"\n        ],\n        \"defaultCode\": 57466,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 123,\n        \"order\": 40,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57377,\n        \"name\": \"dribbble\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 121\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M734 190c0 0 0 0-2 0-44-28-88-42-132-68-6-2-10-6-16-10-30-20-72-70-108-112 0 0 0 0 0 0s0 0 0 0c-2 22-6 38-10 52-10 30-22 48-38 60 0 2-2 2-4 4-50 40-82 52-126 74-2 2-8 6-14 10-26 16-72 48-116 98-54 64-104 156-104 284 0 82 22 156 60 220 40 68 98 124 168 162 0 2 0 2 0 2 2 0 4 0 4 2 2 0 2 0 4 2 0 0 2 0 4 2 0 0 2 0 4 2 0 0 0 0 2 0 0 2 2 2 4 4 0 0 0 0 0 0 62 30 132 46 202 46 238 0 444-172 444-434s-194-380-226-400zM740 932c-4 4-50 36-102 40-54 6-126 8-170-30-6-8-4-18 0-22 6-4 10-6 16-6s4 0 8 2c18 16 48 28 112 28 62 0 108-18 126-32 10-8 14-2 14 2 2 4 4 10-4 18zM568 842c10-10 28-26 46-34 16-6 26-4 40-4 16 0 34 0 46 8s18 26 22 36c4 10 0 16-8 20-6 4-8 2-14-12-8-12-14-26-48-26s-46 12-62 26c-16 14-22 20-28 12s-4-16 6-26zM830 850c-36-4-108-114-152-116-58-2-182 120-280 120-58 0-76-10-96-22-30-22-44-52-44-96 2-76 74-148 164-150 116 0 196 114 254 114 48-2 144-98 190-98 50 0 62 52 62 82s-8 86-32 120c-24 34-40 48-66 46z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"drupal\"\n        ],\n        \"defaultCode\": 57434,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 91,\n        \"order\": 41,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57378,\n        \"name\": \"drupal\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 122\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 548v-60c-8-148-74-454-500-454-506-2-526 394-524 496 0 0-24 460 512 460 460 0 482-288 482-288h-212c0 0-40 160-270 154-294-4-306-290-306-290h816c0 0 2-6 2-18zM212 426c0 0 16-258 306-258 292 0 292 258 292 258z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"ebay\"\n        ],\n        \"defaultCode\": 57357,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 14,\n        \"order\": 42,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57379,\n        \"name\": \"ebay\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 123\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-282 0-512 230-512 512s230 512 512 512c282 0 512-230 512-512s-230-512-512-512zM810 588c-36 136-158 232-298 232s-262-96-298-232c-4-14 6-30 22-34s32 4 36 20c28 110 126 186 240 186s212-76 240-186c4-16 20-24 36-20s26 20 22 34z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"ello\"\n        ],\n        \"defaultCode\": 57438,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 95,\n        \"order\": 43,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57380,\n        \"name\": \"ello\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 124\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M194 330c0-20-14-38-34-44h-126c-20 6-34 24-34 44 0 24 20 44 44 44h106c26 0 44-20 44-44zM962 218c-52-80-144-122-298-122-22 0-44 2-64 4-4 0-8 0-12 0 0 0 0 0-2 0 0 0-2 0-4 2-80 8-126 8-126 8h-208c-24 0-44 20-44 44 0 26 20 44 44 44h188c24 0 44 20 44 44 0 22-14 38-34 44-2 0-6 0-10 0h-160c-18 6-34 24-34 44 0 24 20 44 44 44h40c24 0 44 20 44 44s-20 44-44 44h-202c-24 0-44 20-44 44s20 44 44 44h192c24 0 44 20 44 44s-20 44-44 44h-22c-24 0-44 20-44 44s20 44 44 44h86c26 0 44 20 44 44s-18 44-44 44h-18c-28 0-48 22-48 48s20 48 48 48h98c0 0 60 2 122 8 14 2 28 4 40 6 6 0 10 0 12 0 22 2 42 2 64 2 112 0 214-24 268-46 10-4 18-10 18-22 0-2 0-6-2-6l-18-70c-4-12-10-18-20-18 0 0-4 0-8 2-54 16-120 36-216 36-90 0-152-14-194-54-36-36-54-78-56-152h526c16 0 24-14 24-28 2-22 2-52 2-72 2-116-12-212-60-278zM850 526c-46 0-84-38-84-84s38-82 84-82c38 0 70 26 80 60-6-8-16-12-24-12-20 0-34 16-34 34s14 34 34 34c10 0 18-4 24-12-10 36-42 62-80 62z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"endomodo\"\n        ],\n        \"defaultCode\": 57358,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 15,\n        \"order\": 44,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57381,\n        \"name\": \"endomodo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 125\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M828 8c-30-16-116-6-220 26-180 124-332 306-344 598-2 6-20-2-22-4-50-94-68-192-28-334 8-12-18-28-22-24-8 10-46 50-70 92-124 214-44 486 172 606 214 120 486 42 606-172 138-248 10-742-72-788z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"envato\"\n        ],\n        \"defaultCode\": 57469,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 126,\n        \"order\": 45,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57382,\n        \"name\": \"envato\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 126\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M112 40c-2-14 4-24 24-24 18 0 212 6 342 6 268 0 334-22 380-22 24 2 30 20 30 32s-12 36-12 68c0 32 8 64 8 94 0 28-24 36-38 36-12 0-20-4-20-28-2-46 32-112-296-112-166 0-170 20-170 72 0 54 0 228 0 254 0 28 8 36 30 36s192 0 238 0c46 0 94-24 100-90 2-34 10-36 28-36s32 14 30 46c-4 34-10 68-10 114 0 48 10 94 10 128s-46 42-54 4c-8-34-22-96-126-96s-188 0-212 0c-24 0-34 14-34 52s0 224 0 270c0 48 14 98 108 98 96 0 268 10 348-52 32-26 44-66 54-130 6-28 70-28 66 40-2 32-32 98-32 142 0 34 8 84-24 84-28 0-16-16-140-16s-550 4-622 4c-26 0-32-8-32-24s10-28 32-28c22 0 118 0 118-120 0-122 0-564 0-630 0-64-14-130-94-138-32-4-30-16-30-34z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"etsy\"\n        ],\n        \"defaultCode\": 57359,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 16,\n        \"order\": 46,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57383,\n        \"name\": \"etsy\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 127\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M592 1024v-468h156l24-182h-180v-116c0-52 14-88 90-88h96v-162c-16-4-74-8-140-8-140 0-234 84-234 240v134h-158v182h158v468z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"facebook\"\n        ],\n        \"defaultCode\": 57502,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 159,\n        \"order\": 47,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57384,\n        \"name\": \"facebook\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 128\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M642 314c34 180-76 290-212 252 200-328-92-330-2-566-138 98-274 370-274 568 0 278 146 454 342 456 190 2 374-180 374-358 0-204-110-284-228-352zM496 954c-194 4-354-204-174-498-38 170 64 298 162 298 110 2 174-102 206-236 176 134 96 430-194 436z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"feedburner\"\n        ],\n        \"defaultCode\": 57412,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 69,\n        \"order\": 48,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57385,\n        \"name\": \"feedburner\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 129\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-282 0-512 230-512 512s230 512 512 512c282 0 512-230 512-512s-230-512-512-512zM394 152c56 0 100 44 100 100 0 58-44 102-100 102-58 0-102-44-102-102 0-56 44-100 102-100zM136 512c0-56 46-102 102-102s100 46 100 102c0 56-44 102-100 102s-102-46-102-102zM394 872c-58 0-102-44-102-100 0-58 44-102 102-102 56 0 100 44 100 102 0 56-44 100-100 100zM636 564h-172v-104h172zM834 706c-36 54-86 96-144 124l-40-88c88-40 142-128 142-228 0-52-14-100-40-142-24-40-60-72-102-92l42-86c58 28 106 72 142 128s54 122 54 192c0 68-18 136-54 192z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"filmweb\"\n        ],\n        \"defaultCode\": 57360,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 17,\n        \"order\": 49,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57386,\n        \"name\": \"filmweb\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 130\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M900 134c0 0 0 2 2 2-2 0-2 0-2-2M328 496c2 2 2 4 4 4-2-2-2-2-4-4M178 182c2 0 2-2 4-2 0 2 2 2 2 2-2 0-4 0-6 0M86 138c0 0 0 0 0 0M84 142c0 2 0 0 0-2v-2 4M84 138c0 0 0 0 0 0s0 0 0 0M28 386c0 0 0 0 0 0 0 2-2 2-2 2l2-2c0-2 2-4 2-6-2 0-2 2-2 6M468 324c2 0 4-2 6-4 2 0 2 0 2-2-2 2-4 4-6 6 0 0-2 0-4 2 2 0 2-2 2-2M486 308c0 0 0-2 0-4s2-4 2-6l2-4c0 0 2 0 2 0-2 2-2 4-2 6s0 2 0 2c0 2-2 4-4 6M492 286c0 0 0 0 0 2 0 0 0 0 0 2v-2c0-2 0-4 0-2M494 290c2 0 2 0 0 0 2 0 0 0 0 0v2c0-2 0-2 0-2M974 630c0 2 0 2 0 0-2 2-2 4-4 6 2-2 2-4 4-6 30-58 66-170 38-268v-4c-2-2-2-4-2-6v-2c0 0-2-2-2-2 0 2-8 26-18 62 6-54 2-112-18-164-10-26-20-46-32-62-14-24-30-42-42-50l2 2c-2-2-2-2-2-2 0 2 2 6 4 16-26-40-64-60-70-62h-2c0 0 2 12 6 36-40-32-90-58-146-74 94 62 128 114 150 162-24-26-68-52-96-56 42 32 114 128 108 272-20-50-46-70-46-70s0 2 0 2l-2-2c8 52 8 90 8 118 0 0 0 2 0 2 0 2 0 4 0 8 0 2 0 4 0 6s0 4 0 6c0 2 0 4 0 6s0 4 0 6c-4 24-8 40-12 58-6-24-12-36-12-36v2c0 0 0-2 0-2s-2 46-32 110c-2 6-6 14-10 20 0 0 0 2-2 2 0 2 0 2-2 4l-2 4c0 0 0 2-2 2 0 2 0 2-2 4-12 14-20 22-28 24-2 2-4 2-6 2s-2-2-4-2c2-6 2-12 0-16 0 0-8 2-14 10-4 4-6 8-10 10 0 0 6-8 6-8-4 2-8 6-12 10-14 14-26 32-34 26 8-2 12-10 14-18-6 4-20 16-52 20-14 2-68 12-142-24 10-2 26-6 38 2-12-14-42-10-62-18-20-6-44-32-58-44 50 12 102 6 138-12 2-2 4-2 6-4 4-2 6-4 10-6 20-14 50-36 68-38 2 0 4 0 6 2 18 4 30-14 16-32-14-16-50-38-96-28-38 10-68 40-120 18-4 0-6-2-10-4-2-2 10 2 8 0-10-4-28-12-34-14 0-2 8 0 8 0-10-6-18-10-24-16 0 0-2 0-2-2 0 0-2-2-2-2-2-2-4-4-4-4v0c0 0-2-2-2-2-16-20-12-40-8-50 2-10 10-18 14-22 2 0 2 0 2 0 8 2 12 4 12 4s-4-4-6-6c2 0 2 0 2-2 6 2 18 8 24 10 10 4 14 10 14 10s2-2 0-6c-2-2-4-8-14-12 6 2 10 4 16 6 2-8 4-16 2-30-2-10 0-12-4-16-2-2 2-4 4-2 0-2-2-4-2-6-2-4-2-6-6-10 0-2 0-2-2-2l-4-6c-2-2-4-4-4-6 4 8 10 14 12 18 2 2 2 2 4 2 4-6 20-16 38-26 4-2 6-4 8-6-10 6-22 14-30 20s-14 12-16 16c16-18 76-48 90-62 2-2 4-2 4-4 0 0 0 0 0 0 8-6 12-12 14-20 4-8 8-28-4-34-8-2-16-4-30-4h-2c-12 0-28 0-50 0-30 0-46-28-52-40v0 0c10-34 30-64 58-88 2 0-8 2-6 0s16-10 18-10c2-2-14-6-28-4-14 4-16 4-24 10 0 0-2 0-2 0 4-4 14-8 12-8-16 4-34 14-50 26 0-2 0-4 0-6-8 4-24 18-30 28 0-2 0-4 0-6-4 4-10 10-14 16-14-2-28-6-40-6-4 0-6 0-6 0-2 0-2 0-4 0s-4 0-6 0c-2 0-4 0-6 0h-4c0 0-2 0-4 0-16 0-30 4-44 8-12-10-28-26-40-44 0 0 0 0-2 0 0 0 0 0 0 0 0 2 0 4 0 2-8-14-16-38-16-54 0 0 0 0 0 2 0 0 0 0 0-2 0 0-12 8-20 34-2 2-2 4-2 6 0 0 0 2 0 4 0-4 0-6 2-8 0 0 0-2 0-2 0 2 0 2 0 4 0 0 0 0 0 0v2c-2 2-2 4-2 6 0 0 0 0 0-2 0 0 0 0 0 2 0 0 0-2 0-4l-2 4c0 0 0-4 0-6 0 2-2 4-4 6 0 0 0 0 2-2 0-2 2-4 2-4 0-2 0-2 0-2 0 2-6 8-6 14-2 4-2 6-4 10 0-2 0-2 0-2v0c0 0 0 0 0 0-4 8-8 20-10 32-4 14-6 30-6 52-2 20 0 34 0 38 2-2 2-2 2-2s0 0 0 0-2 2-2 2c0 0 0 0 0-2-12 18-20 32-24 40-16 28-30 74-42 144v0c0 0 0 0 0 0s0 0 2-2c0 0 0 2-2 2 0 0 2-2 4-8 0-2 0-2 0-4 4-10 10-26 20-42-12 38-22 96-16 182 0 0 0 0 0 0s0 0 0 2c0 0 0-2 0-4 0 0 0 0 0 0s0 2 0 2c0 0 2-6 2-12 0-2 0-2 0-4 2-10 4-22 8-36 2 58 18 128 62 206 34 60 126 198 356 248-2 0-2 0-4 0 2 0 2 0 4 0-10-2-18-6-26-10 0 0 0 0-2-2-8-4-12-8-14-10 2 0 6 2 14 4 28 8 88 24 136 22h-2c0 0 0 0-2 0-4 0-8-2-10-4-8-4-10-8-10-8s2 0 6 0c32 0 182 2 266-64 20-16 34-34 38-48 0 0 0 0-2 0 0 0-4 2-8 4 4-2 6-4 8-4v-4h2c0 0 0 2-2 2v2c10-6 20-12 30-18 16-12 36-26 54-44 2-4 6-6 8-10v-2c0 0 2 0 2 0 2-2 2-4 4-6h2c2-2 4-6 6-8 8-10 16-20 20-30l2-2c12-20 20-42 20-68 0 6-2 12-4 18 0 0-2 2-2 2 2-2 2-2 4-4-2-28-4-44-10-58\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"firefox\"\n        ],\n        \"defaultCode\": 57361,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 18,\n        \"order\": 50,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57387,\n        \"name\": \"firefox\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 131\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 624c0 66-8 132-32 196-42 108-120 170-232 194-34 8-68 10-102 10-192 0-384 0-576 0-2 0-6 0-8 0 0 0 0-2 0-2 36-36 72-72 108-108 100-100 200-200 298-298 2-2 2-4 4-4 6-6 10-10 18-6s10 10 10 18c0 50 0 102 0 152 0 4 0 8 0 10s4 2 4 2c44 0 88 0 130-2 16-2 34-6 48-12 48-16 74-52 82-100 6-26 8-52 8-80 2-90 2-182 2-274 0-6 0-10 6-14 74-76 148-150 224-224 2-2 2-6 4-8 2 0 4 0 4 2s0 6 0 8c0 180 0 360 0 540zM238 704c0-90 0-180 2-268 0-28 2-56 6-84 10-52 38-88 90-104 10-4 22-8 32-8 48-2 94-2 142-4 0 0 2 2 2 2 0 2 0 6 0 8 0 50 0 100 0 150 0 4-2 6 0 8 2 6 6 10 10 14s10 0 16-4c2-2 4-4 6-6 134-134 266-266 400-400 2-2 4-8 8-8-6 0-8 0-10 0-192 0-384 0-576 0-34 0-68 2-100 10-116 24-196 90-236 202-22 62-30 126-30 190 0 180 0 360 0 538 0 4 0 6 0 10 4-2 6-4 8-6 74-76 150-150 224-226 4-4 6-8 6-14z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"flattr\"\n        ],\n        \"defaultCode\": 57478,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 135,\n        \"order\": 51,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57388,\n        \"name\": \"flattr\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 132\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M232 744c-128 0-232-104-232-232s104-232 232-232c128 0 232 104 232 232s-104 232-232 232zM792 744c-128 0-232-104-232-232s104-232 232-232c128 0 232 104 232 232s-104 232-232 232z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"flickr\"\n        ],\n        \"defaultCode\": 57420,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 77,\n        \"order\": 52,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57389,\n        \"name\": \"flickr\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 133\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M284 136c-92 90-140 222-140 378v512h296v-520c0-74 18-132 54-168 40-38 100-48 144-48h134l108-290h-242c-142 0-264 48-354 136z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"formulr\"\n        ],\n        \"defaultCode\": 57362,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 19,\n        \"order\": 53,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57390,\n        \"name\": \"formulr\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 134\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M460 1024h-376l428-1024 428 1024h-376v-170l172-86-12-26-160 80v-78l98-54-14-26-84 44v-114h-104v176l-86-60-16 24 102 72z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"forrst\"\n        ],\n        \"defaultCode\": 57473,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 130,\n        \"order\": 54,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57391,\n        \"name\": \"forrst\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 135\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M788 0c0 0-470 0-546 0-74 0-96 56-96 92s0 868 0 868c0 40 20 56 32 60 14 6 46 10 66-14 0 0 258-300 262-304 8-6 8-6 14-6 14 0 114 0 168 0 70 0 80-50 88-80 6-24 74-374 98-486 16-84-4-130-86-130zM776 616c6-24 74-374 98-486zM756 148l-22 120c-4 12-20 26-34 26-16 0-214 0-214 0-24 0-40 16-40 40v26c0 24 16 40 40 40 0 0 164 0 182 0 16 0 32 20 30 38-4 18-22 108-24 118-2 8-12 26-34 26-16 0-146 0-146 0-28 0-36 4-54 26s-178 216-178 216c-2 2-4 2-4 0v-678c0-16 14-34 34-34 0 0 420 0 438 0 16 0 30 16 26 36z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"foursquare\"\n        ],\n        \"defaultCode\": 57408,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 65,\n        \"order\": 55,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57392,\n        \"name\": \"foursquare\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 136\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 194h-152c-30 0-62 40-62 94v90h180v178h-180v450h-180v-450h-270v450h-180v-450h-180v-178h180v-90c0-150 108-270 242-270h152v176h-152c-30 0-62 40-62 94v90h270v-90c0-150 108-270 242-270h152z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"friendfeed\"\n        ],\n        \"defaultCode\": 57394,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 51,\n        \"order\": 56,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57393,\n        \"name\": \"friendfeed\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 137\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M968 356c0-72-24-132-68-178 8-16 30-84-6-176 0 0-56-18-182 68-54-14-110-22-168-22-56 0-112 8-166 22-128-86-182-68-182-68-38 92-14 160-8 176-42 46-68 106-68 178 0 256 156 312 304 330-20 16-38 46-44 88-38 18-134 46-192-56 0 0-36-62-102-68 0 0-66 0-6 40 0 0 44 22 74 98 0 0 40 118 224 78 2 56 2 142 2 158h330c0-22 0-128 0-216 0-62-20-102-44-124 148-16 302-72 302-328zM132 682c-2 2-8 4-12 2s-8-8-6-10c2-4 6-6 12-2 4 2 6 6 6 10zM158 712c-2 2-10 0-14-4s-4-10-2-14c4-2 10-2 14 4 4 4 6 10 2 14zM184 750c-4 2-10 0-14-6s-4-14 0-16c4-2 10 0 14 6s4 12 0 16zM220 786c-4 4-12 4-16-2-6-6-8-12-4-16 4-6 12-4 16 2 6 4 8 12 4 16zM270 808c-2 6-10 8-16 6-8-2-14-8-12-14s10-8 18-6c6 2 12 8 10 14zM310 822c-8 0-14-4-14-10s6-10 14-10c8 0 14 4 14 10s-6 10-14 10zM362 816c-8 2-14-2-16-8 0-4 6-10 14-12s14 2 16 8c0 4-6 10-14 12z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"github\"\n        ],\n        \"defaultCode\": 57479,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 136,\n        \"order\": 57,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57394,\n        \"name\": \"github\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 138\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M738 20v102c-52-76-138-120-234-120-192 0-320 146-320 366 0 96 26 182 74 246 54 74 134 114 234 114s194-44 246-116v106c0 156-72 228-232 228-134 0-202-56-208-164v-24h-72l2 22c4 154 106 244 282 244 200 0 310-108 310-306v-698h-82zM756 368c0 142-78 284-252 284-144 0-238-112-238-284 0-134 64-290 248-290 64 0 118 22 160 64 54 54 84 136 82 226z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"goodreads\"\n        ],\n        \"defaultCode\": 57451,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 108,\n        \"order\": 58,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57395,\n        \"name\": \"goodreads\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 139\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1012 478c-2-20-4-42-8-62-160 0-322 0-482 0 0 66 0 134 0 200 0 0 0 0 0 0s0 0 0 0c94 0 186 0 280 0-12 64-50 122-104 158 0 0 0 0 0 0-34 22-72 38-112 44-40 8-82 8-122 0-42-8-80-26-114-50-50-34-90-86-112-142-2-4-4-10-6-14 0 0 0 0 0 0s0 0 2 0c-22-64-22-136-2-200 16-44 42-86 76-120 40-42 94-72 152-86 50-10 102-8 150 6 42 14 80 36 110 66 32-32 64-62 94-94 18-16 34-34 50-50 0 0 0 0 0 0s0 0 0 0c-48-46-104-80-164-102-110-42-234-42-344-4-126 42-232 136-292 254-20 40-34 84-44 128-22 112-6 230 44 332 34 66 82 124 140 170 54 44 118 76 186 94 86 24 176 24 262 4 78-18 150-56 210-110 62-56 106-132 130-212 18-68 26-138 20-210z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"google\"\n        ],\n        \"defaultCode\": 57363,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 20,\n        \"order\": 59,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57396,\n        \"name\": \"google\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 140\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M916 114c10 0 16 4 16 8 2 6 2 12 2 20v344c0 8-4 14-8 20-6 6-12 8-20 8h-12c-8 0-14-4-20-8-6-6-8-12-8-20v-344c0-8 0-14 0-20 2-4 6-8 16-8v-46l-150 124c2 2 2 4 4 4 0 2 2 2 2 4 6 12 12 26 16 40 2 14 4 32 4 50 0 14 0 26-2 38s-6 26-10 36c-6 10-10 20-16 30-6 8-12 16-18 22-6 8-14 14-20 20s-14 12-20 18c-6 6-12 12-18 18s-10 12-16 18c-4 6-8 12-10 18-2 8-2 14-2 20 0 8 0 14 4 20 2 6 6 14 14 20 6 6 12 14 20 20 6 6 14 14 24 20 8 6 18 12 26 20 8 6 18 14 26 22s16 16 24 26c8 12 14 22 20 34s10 26 12 38c4 14 6 28 6 42 0 20-2 38-8 56-4 18-12 34-22 48-10 16-22 30-34 42-14 14-28 24-42 34-18 8-34 18-50 24-18 6-34 12-54 16-16 4-34 8-54 10-18 2-36 4-54 4-10 0-22 0-34-2-10 0-22-2-34-4-10-2-22-4-34-6-12-4-24-8-34-12-12-4-24-8-34-14s-20-12-28-20c-10-6-18-14-24-22-8-8-14-18-20-28s-10-22-14-34c-2-10-4-22-4-36 0-16 2-30 6-44s10-28 20-42c8-12 18-24 30-36 10-10 24-20 38-28 12-8 26-14 42-22 14-6 32-10 52-16 20-4 40-8 62-10 22-4 48-6 74-8-12-16-20-30-26-44s-10-28-10-40c0-8 2-16 4-24s4-16 8-26c-6 0-12 2-20 2-6 0-12 0-18 0-30 0-54-4-78-12-24-10-46-22-64-42-20-18-34-40-44-62s-14-48-14-76c0-2 0-6 0-8 0-4 0-6 0-8h-232l346-300h570l-52 40v74zM630 708c0-2-4-4-8-6-4-4-8-6-14-12-6-4-12-8-16-12-2-2-4-4-6-4s-6 0-10 0c-4 0-10-2-16-2-14 0-26 2-38 2-14 2-26 4-38 6s-26 6-38 10c-12 4-24 8-36 12-12 6-22 12-34 20-8 8-18 16-24 26-8 10-14 22-18 34s-6 24-6 38c0 14 2 26 6 38 2 10 8 22 16 32 6 10 14 20 22 26 10 8 20 16 30 20 10 6 20 12 32 16s22 8 34 10c14 4 26 6 36 6 14 2 26 2 36 2 26 0 48-2 68-8 22-4 40-12 58-24s30-24 38-42c10-18 14-36 14-60 0-4 0-8-2-14 0-4 0-8-2-14s-4-10-4-14c-2-4-4-8-4-10-2-4-4-8-6-12s-6-8-10-12c-4-6-6-8-10-12s-6-6-8-8c-2-2-4-4-8-8-2-4-8-8-12-12-6-6-10-8-14-12-4 2-6 0-8 0zM622 438c8-10 16-24 22-40s8-32 8-48c0-16-2-32-4-48-4-16-6-32-12-50-6-16-12-32-22-48-8-14-18-28-30-42s-26-24-40-30c-12-8-28-10-44-10-18 0-34 2-48 10-12 6-24 16-34 28-10 14-16 26-22 42-4 16-6 34-6 52 0 16 0 32 4 48 2 14 6 30 10 48 6 16 12 30 22 46 8 14 18 26 30 40 12 12 26 22 40 28s28 10 44 10c18 0 34-4 48-10 12-4 24-14 34-26z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"google-scholar\"\n        ],\n        \"defaultCode\": 57364,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 21,\n        \"order\": 60,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57397,\n        \"name\": \"googlescholar\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 141\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M988 0h-952c-6 0-10 6-10 10v696c0 6 4 10 10 10h554l398 308c6 0 10-6 10-10v-1004c0-4-4-10-10-10zM398 158c50 0 90 40 90 90 0 52-40 90-90 90s-90-38-90-90c0-50 42-90 90-90zM592 556h-390v-50c0-86 86-114 196-114 6 0 12 0 16 0 2 0 4 0 6 0 4 0 8 0 12 2 2 0 4 0 6 0 4 0 10 0 14 0 2 0 4 2 6 2 4 0 6 0 10 0s6 2 8 2c2 0 4 0 6 0 10 2 20 6 30 8 2 0 2 2 4 2 14 4 26 10 36 18 8 6 16 12 22 20 12 16 18 36 18 58v52zM674 258c38 0 68 30 68 66 0 38-30 68-68 68-36 0-66-30-66-68 0-36 28-66 66-66zM822 556h-188v-50c0-26-6-50-18-70 18-4 38-4 58-4 80 0 148 20 148 86z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"googlegroups\"\n        ],\n        \"defaultCode\": 57365,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 22,\n        \"order\": 61,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57398,\n        \"name\": \"googlegroups\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 142\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M768 512c0-84 0-172 0-256v2c-82-84-166-168-248-250-2-2-4-6-8-6 0 84 0 170 0 254 0 36 0 72 0 110 14 34 28 70 42 104 34 14 70 28 104 42-30 12-58 24-86 34-6 4-12 4-20 10-12 34-26 68-40 102-14-34-28-70-42-104-34-14-70-28-104-42 30-14 60-24 90-36 4-2 10-4 16-8 12-34 26-68 42-102v-110c-86 0-172 0-256 0v2c-14 12-28 28-42 42-74 70-146 140-216 212 84 2 172 0 256 0 0 84 0 170 0 254 82 84 164 166 246 248 2 2 6 6 10 8 2-24 0-52 0-78 0-58 0-118 0-176 84 0 172 0 256 0 30-30 60-60 92-92 54-54 110-108 164-164-84 0-170 0-256 0z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"googlephotos\"\n        ],\n        \"defaultCode\": 57366,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 23,\n        \"order\": 62,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57399,\n        \"name\": \"googlephotos\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 143\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M328 450c0 44 0 86 0 128 60 0 120 0 180 0-8 42-32 78-66 102-22 14-48 24-72 28-26 4-54 6-80 0-26-4-50-16-72-32-36-24-62-60-76-100-14-42-14-86 0-128 10-28 26-56 48-78 26-26 62-46 98-54 32-6 66-6 96 4 28 8 52 22 72 42 20-20 40-40 60-60 10-12 22-22 32-32-30-30-66-52-106-66-70-26-150-26-222-2-80 28-148 88-186 162-12 26-22 54-28 84-14 70-4 146 28 212 22 42 52 80 90 108 36 28 76 50 120 62 54 14 112 14 168 0 50-10 96-34 134-68 40-38 68-86 82-138 18-56 20-116 10-174-104 0-206 0-310 0zM1024 458h-112v-112h-82v112h-112v82h112v112h82v-112h112z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"googleplus\"\n        ],\n        \"defaultCode\": 57503,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 160,\n        \"order\": 63,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57400,\n        \"name\": \"googleplus\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 144\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-282 0-512 230-512 512s230 512 512 512c282 0 512-230 512-512s-230-512-512-512zM812 614c-38-16-70-48-94-82-26-38-54-76-84-112-30-32-60-64-94-94-32-28-68-56-108-76-28-12-54-22-82-30-4 0-12-4-16 0 0 2 0 6 0 10 2 6 2 10 2 16 10 72 12 146-10 214-12 36-32 70-62 96-22 22-56 44-90 42-6 0-12 0-18-2-36-12-38-52-38-84-2-34 2-68 12-102 2-10 6-20 8-30 40-114 130-206 244-246 44-16 88-24 134-24 134 0 260 68 334 180 18 28 32 58 44 88v0c2 12 6 22 8 32 10 34 14 68 14 102-2 64-22 136-104 102z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"grooveshark\"\n        ],\n        \"defaultCode\": 57417,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 74,\n        \"order\": 64,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57401,\n        \"name\": \"grooveshark\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 145\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M658 578v296h-50c-10 0-20 8-20 20 0 6 4 12 10 14l112 108c4 4 10 8 16 8s12-4 14-8l120-108c6-2 8-8 8-14 0-12-8-20-18-20h-50v-714c0-10-8-18-18-18h-106c-10 0-18 8-18 18v276h-292v-286h50c10 0 20-8 20-20 0-6-4-12-10-14l-112-108c-4-4-10-8-16-8s-12 4-14 8l-120 108c-6 2-8 8-8 14 0 12 8 20 18 20h50v714c0 10 8 18 18 18h106c10 0 18-8 18-18v-286h292z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"hackerrank\"\n        ],\n        \"defaultCode\": 57512,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 169,\n        \"order\": 65,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57402,\n        \"name\": \"hackerrank\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 146\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M822 632l202-120-202-120c-10-26-22-50-38-72l46-126-126 46c-22-16-46-30-72-38l-120-202-120 202c-26 10-50 22-72 38l-126-46 46 126c-16 22-30 46-38 72l-202 120 202 120c10 26 22 50 38 72l-46 126 126-46c22 16 46 30 72 38l120 202 120-202c26-10 50-22 72-38l126 46-46-126c16-22 30-46 38-72zM512 788c-152 0-276-124-276-276s124-276 276-276c152 0 276 124 276 276s-124 276-276 276zM696 504c2-12-10-26-10-40 0-8-4-12-6-20-2-6-2-12-4-20 0 0-2 0-2 0 8-18-16-38-28-50-14-14-22-32-42-40-12-4-22-10-32-14s-20-6-30-10c-10-4-18-14-28-10-14 4-18 10-32 6-26-10-44 4-64 18-10 8-20 14-28 22-4 2-8 8-10 12-4 4-8 8-12 12-6 8-12 12-22 20-4 4-8 8-12 12-6 4-10 2-8 10 0 10 6 20 6 32 0 6 0 10 0 16 2 6 4 10 6 16 2 8 0 20 6 30 4 8 12 18 18 26 8 8 14 18 20 28 6 6 20 14 20 22 12 2 14 16 26 14 6 0 10 0 16 2 4 2 10 4 14 4 10 2 18-10 28-12 12-2 22 2 32-4 20-12 30-32 30-54 0-12-2-20-10-32-4-8-2-20-10-26-10-8-24-8-34-10s-26-4-34 2c-18 12 22 42 0 52s-36-16-42-36c-4-10-2-26 0-36 0-4 0-10 2-14 2-6 10-8 14-10 8-6 14-14 22-20 10-6 20-10 32-12s26-2 38-2c6 0 10 2 16 2s10-2 18-2c8 0 6 2 6 10 0 4 2 8 6 12 6 8 12 18 20 26 14 16 12 44 10 66 0 12 0 22 4 34s-6 12-14 20c-8 6-10 16-16 24-8 8-14 14-24 22-8 6-14 12-22 18-10 4-20 10-30 14-12 6-24 8-36 12-6 0-12 2-18 6-4 2-6 8-12 10-14 10-30 6-44 14-10 4-38 6-38 16h-2c6 8 12 16 22 18 10 0 20 4 30 8 8 2 18 6 28 6 10 2 18 6 28 8 14 2 20-8 32-10 10-2 22 0 34-2 10-2 20-4 32-8 10-2 20-4 30-8 8-2 20-8 28-12 8-6 8-18 18-22 8-6 16-12 22-18s8-20 10-28c4-10 10-16 16-24 6-10 8-20 10-30 2-8 6-22 4-30 0-6-6-8-4-16 2-12 6-14 6-20z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"hearthstone\"\n        ],\n        \"defaultCode\": 57367,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 24,\n        \"order\": 66,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57403,\n        \"name\": \"hearthstone\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 147\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M204 664c-14-2-26-6-38-8-34-10-66-26-94-48-34-30-56-68-66-112-20-80 16-168 90-212 24-14 50-24 78-30 34-4 68 0 102 14 6 2 12 6 18 8 2 2 4 2 6 4 0-8-2-16-2-26-4-42 0-86 18-124 26-54 64-94 122-110 80-24 150-4 210 56 28 32 46 70 50 112 2 18 2 38-2 56 0 0-2 2-2 4 0 0 0 2 0 4 2-2 4-2 6-4 24-12 50-20 78-26 80-16 160 16 206 78 14 18 26 40 32 64 4 18 10 40 8 60-4 64-30 116-82 156-18 12-36 24-56 30-12 2-24 4-36 6-2 0-4 2-6 2 4 2 6 4 8 6 20 24 40 46 52 74 26 56 28 114 6 170-30 66-80 106-152 120-78 12-142-16-192-78-6-8-12-18-18-28-2-2-4-6-6-12-2 4-4 8-4 10-16 28-34 54-58 76-30 28-66 46-106 52-92 18-174-36-210-102-12-24-20-48-22-76s0-56 10-84c8-28 24-52 44-72 2-2 4-6 8-10zM494 562c0 0 0 0 0 0-2 2-2 4-4 6-34 32-74 56-118 76-46 20-96 28-146 22-4 0-6 0-10 0 2 2 2 4 4 6 8 12 18 22 28 32 14 10 30 20 46 28 38 14 78 18 120 10 20-2 38-10 54-22 28-22 48-50 58-84 6-20 8-42 6-64 0-2 0-2 2-4 0 2 2 4 2 4 12 24 22 50 28 78 6 22 8 46 10 70 2 20 2 38-2 58-4 28-12 54-24 80 0 2 0 4-2 6 0 0 2 2 2 2 10-6 22-10 32-16 28-12 50-34 68-60 16-26 26-52 32-82 4-22 4-44-2-64-8-24-20-44-36-62-22-22-50-40-82-48-2 0-2-2-4-2 10-2 22-4 34-6 34-2 66 2 100 8 20 6 42 10 60 18 30 14 56 32 82 54 2 2 4 2 6 4 0 0 2 0 2 0-2-12-2-24-4-36-4-26-14-48-28-70-22-32-50-56-86-72-20-10-44-16-68-14-26 4-50 12-74 26-20 14-40 32-54 54 0 2-2 2-2 4 0 0-2-2-2-2 4-14 6-28 10-44 10-34 26-64 44-94 10-18 24-36 38-52 20-20 42-36 66-50 2 0 4-2 6-4 0 0 0-2 0-2-8-2-18-4-26-6-26-6-50-4-76 2-34 10-64 26-92 50s-44 54-48 92c-2 24 2 50 10 74 6 18 18 34 30 50 2 2 4 4 4 6 0 0 0 0-2 0s-2 0-4-2c-32-16-60-36-84-60-22-20-42-44-58-70-18-28-30-60-36-94 0-2-2-4-2-8-14 22-26 40-32 62-6 24-8 48-4 72 2 24 10 48 20 70 20 46 58 70 104 80 12 4 24 2 38 4 20 0 40-4 60-14 2 0 4 0 6 0z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"hellocoton\"\n        ],\n        \"defaultCode\": 57368,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 25,\n        \"order\": 67,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57404,\n        \"name\": \"hellocoton\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 148\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0l-454 256v512l454 256 454-256v-512zM124 450c26-260 240-306 240-306-284 304 48 516 48 516l-228 50c-74-106-60-260-60-260zM412 512c0-56 44-102 100-102s100 46 100 102c0 56-44 102-100 102s-100-46-100-102zM660 866c-238 104-382-62-382-62 400 104 420-296 420-296l156 178c-56 118-194 180-194 180zM892 562c-122-400-468-210-468-210l68-228c130-14 252 74 252 74 212 152 148 364 148 364z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"heroes\"\n        ],\n        \"defaultCode\": 57369,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 26,\n        \"order\": 68,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57405,\n        \"name\": \"heroes\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 149\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M262.144 406.528c-7.168 0-15.36 0-22.528-4.096l-150.528-63.488c-30.72-11.264-41.984-45.056-30.72-75.776s45.056-41.984 75.776-30.72l151.552 64.512c30.72 11.264 41.984 45.056 30.72 75.776-8.192 18.432-30.72 33.792-54.272 33.792zM912.384 686.080c-7.168 0-15.36 0-22.528-4.096l-143.36-64.512c-30.72-11.264-41.984-45.056-30.72-75.776s45.056-41.984 75.776-30.72l143.36 64.512c30.72 11.264 41.984 45.056 30.72 75.776-11.264 23.552-30.72 34.816-53.248 34.816zM323.584 965.632c-7.168 0-15.36 0-22.528-4.096-30.72-11.264-41.984-45.056-30.72-75.776l87.040-199.68c11.264-30.72 45.056-41.984 75.776-30.72s41.984 45.056 30.72 75.776l-88.064 200.704c-11.264 18.432-33.792 33.792-52.224 33.792zM625.664 263.168c-7.168 0-15.36 0-22.528-4.096-30.72-11.264-41.984-45.056-30.72-75.776l37.888-91.136c11.264-30.72 45.056-41.984 75.776-30.72s41.984 45.056 30.72 75.776l-37.888 91.136c-12.288 19.456-30.72 34.816-53.248 34.816z\",\n          \"M661.504 1024c-22.528 0-45.056-15.36-53.248-33.792l-78.848-200.704c-11.264-30.72 4.096-60.416 30.72-75.776 30.72-11.264 60.416 4.096 75.776 30.72l78.848 200.704c11.264 30.72-4.096 60.416-30.72 75.776-7.168 3.072-15.36 3.072-22.528 3.072zM733.184 464.896c-22.528 0-45.056-15.36-53.248-33.792-11.264-30.72 4.096-60.416 30.72-75.776l200.704-78.848c30.72-11.264 60.416 4.096 75.776 30.72 11.264 30.72-4.096 60.416-30.72 75.776l-200.704 77.824c-7.168 4.096-15.36 4.096-22.528 4.096zM377.856 313.344c-22.528 0-45.056-15.36-53.248-33.792l-78.848-199.68c-11.264-30.72 4.096-60.416 30.72-75.776 30.72-11.264 60.416 4.096 75.776 30.72l78.848 200.704c11.264 30.72-4.096 60.416-30.72 75.776-7.168 2.048-15.36 2.048-22.528 2.048zM91.136 721.92c-22.528 0-45.056-15.36-53.248-33.792-11.264-30.72 4.096-60.416 30.72-75.776l132.096-53.248c30.72-11.264 64.512 4.096 75.776 30.72 11.264 30.72-4.096 60.416-30.72 75.776l-132.096 53.248c-8.192 3.072-15.36 3.072-22.528 3.072z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"hitbox smashcast\"\n        ],\n        \"defaultCode\": 57370,\n        \"grid\": 16,\n        \"attrs\": [\n          {},\n          {}\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"id\": 27,\n        \"order\": 69,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57406,\n        \"name\": \"smashcast\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 150\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M690 424c2-110 100-128 100-136 0-14-88-122-88-122 0-168-14-70-78-68-22-28-124-98-124-98s-90 70-114 98c-70 10-78-122-78 68 0 0-88 104-88 128 0 10 102 12 102 122-58 6-84-30-112-50 6 44 52 142 94 162 16-32 58-76 100 24 40 98 2 136-56 80-2 40 62 172 102 202 12-12 38-112 36-130-4-14-26-186-52-208-48-40-160-260 68-340 228 80 122 294 76 338-44 42-42 476-32 530 32-30 14-168 102-258-26 2-106-10-46-180 52-142 90-96 118-34 22-16 90-146 94-190-28 18-64 70-124 62zM572 330c-10-26-66-78-66-78l-8 6c-32 42-38 34-62 74-8 10 8 16 30 52 30 48 36 90 36 90l6-8c14-16 18-44 34-72 14-26 34-50 30-64z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"horde\"\n        ],\n        \"defaultCode\": 57371,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 28,\n        \"order\": 70,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57407,\n        \"name\": \"horde\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 151\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 1022l286-174v-336l-286 172zM512 342v-344l-296 174v348l294-172 288 164v-340zM508 686l-292-166v338z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"houzz\"\n        ],\n        \"defaultCode\": 57442,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 99,\n        \"order\": 71,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57408,\n        \"name\": \"houzz\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 152\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M994 562l-6-12c-12-16-24-34-40-46-16-10-32-16-48-24 44-22 76-52 90-92 10-30 8-56-6-82v-4c-18-28-42-48-78-58-20-4-46-4-68-2l-46 10 16-36c14-46 10-92-16-134l-4-6c-22-36-54-58-96-70-46-12-86-6-128 14-40 22-68 56-82 98v4l-2 10-4-10-16-26c-22-36-52-58-88-68-32-8-58-4-84 10-30 18-48 48-56 88-6 42 0 82 22 122l10 16-34-12c-44-10-84-4-124 18-42 20-68 52-86 92-16 42-14 80 6 116 8 16 22 30 34 38 16 18 38 28 64 32l10 2-22 20c-20 16-32 38-38 60-8 26-4 52 10 76 8 12 14 22 26 30 12 10 26 16 44 18 30 8 64 8 100-4l-26 44-8 18c-14 46-10 86 12 128 10 16 22 30 34 44 18 16 38 26 64 32 44 12 88 10 130-10 40-22 66-58 78-100l2-8c28 30 54 50 82 56 30 10 58 8 84-10 24-14 42-38 50-68 8-32 8-64 0-100 16 10 30 18 46 22 46 14 88 12 128-10 38-20 64-56 78-100 12-44 8-86-14-126zM786 322l16-8c26-12 52-14 78-12 24 4 42 14 50 32l6 18-4 16c-10 26-32 46-68 62-14 6-30 10-46 12l-178 22-4-10-2-4 6-8zM540 140c8-30 28-52 54-66s54-18 82-8c30 8 52 24 64 48 8 14 12 32 12 52l-4 30c-6 16-14 32-22 44l-130 158c-12-10-28-16-42-24l-14-162-2-58zM294 144c0-26 10-44 28-54 8-8 22-8 34-2 26 8 46 26 64 62 8 16 14 30 18 46l28 172-22 6-128-140-6-14c-12-26-20-50-16-76zM80 450c-10-22-10-44-2-66 10-26 28-48 56-60 26-14 52-18 82-12l38 16 128 92c-12 16-20 30-24 44l-208 26-14-2c-26-6-44-16-56-38zM482 876l-2 14c-10 26-26 48-52 60-26 14-54 16-80 10-28-8-50-26-62-48-8-14-14-32-14-50l8-32c4-16 10-30 22-42l122-144c14 8 28 14 44 16 2 50 8 102 14 158zM434 586c-18-16-28-42-28-68s10-46 28-68c18-14 42-26 68-26s52 12 66 26c22 22 30 42 30 68s-8 52-30 68c-18 20-40 30-66 30s-50-10-68-30zM702 840c-4 26-12 44-30 52-10 6-20 6-32 6-28-8-50-30-66-64l-16-48-22-126 24-8 20-10 60 62 38 46 6 14c14 24 20 48 18 76zM950 670c-8 30-24 50-50 62-26 14-50 18-80 8-18-4-28-12-38-24l-152-124 10-22 4-18 164-14 56-2 16 2c20 6 42 20 52 42 16 16 22 36 22 62z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"icq\"\n        ],\n        \"defaultCode\": 57427,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 84,\n        \"order\": 72,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57409,\n        \"name\": \"icq\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 153\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 484c0 252 208 456 466 456 74 0 144-18 206-48l352 104-114-366c16-46 24-96 24-146 0-252-208-456-466-456s-468 204-468 456zM784 484c0 38-8 76-20 110l58 164 6 16c0 0 0-2 0-2l20 54-74-18-160-50c-44 22-94 34-148 34-174 2-316-138-316-308s142-308 318-310c174 0 316 140 316 310z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"identica\"\n        ],\n        \"defaultCode\": 57396,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 53,\n        \"order\": 73,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57410,\n        \"name\": \"identica\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 154\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 306h106v408h-106zM332 306l-24 190-16-104c-4-32-8-62-12-86h-138v408h94v-270l38 270h66l38-276v276h92v-408zM636 378c6 2 8 8 10 12 0 6 2 18 2 36v158c0 28-2 44-6 50s-14 10-28 10v-270c10 0 18 2 22 4zM634 714c26 0 44-2 58-4 12-4 24-8 32-14 8-8 14-18 18-30s6-36 6-74v-142c0-40-2-64-4-78s-8-26-18-36c-10-10-24-18-40-24-20-4-48-6-100-6h-80v408zM922 614c0 20-2 32-4 38s-10 8-16 8c-8 0-12-2-14-6-2-6-2-18-2-36v-108c0-18 0-30 2-34s6-8 14-8c6 0 14 4 16 8 2 6 4 16 4 34zM784 306v408h94l6-26c8 10 20 18 30 24 10 4 26 8 38 8 16 0 30-4 42-14 12-8 20-18 24-30 2-12 4-30 4-54v-118c0-24 0-40-2-48 0-6-4-14-10-22-4-10-12-16-22-20-12-4-24-6-38-6-12 0-28 2-38 8-10 4-20 12-28 22v-134h-100z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"imdb\"\n        ],\n        \"defaultCode\": 57372,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 29,\n        \"order\": 74,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57411,\n        \"name\": \"imdb\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 155\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 92c138 0 152 2 206 4 52 2 78 10 96 16 24 10 42 22 58 38 18 18 30 36 38 58 8 20 16 46 18 96 2 56 4 70 4 208s-2 152-4 206c-2 52-10 78-16 96-10 24-22 42-38 58-18 18-36 30-58 38-20 8-46 16-96 18-56 2-70 4-208 4s-152-2-206-4c-52-2-78-10-96-16-24-10-42-22-58-38-18-18-30-36-38-58-8-20-16-46-18-96-2-56-4-70-4-208s2-152 4-206c2-52 10-78 16-96 10-24 22-42 38-58 18-18 36-30 58-38 20-8 46-16 96-18 56-2 70-4 208-4M512 0c-140 0-156 2-210 4-56 2-94 10-124 22-34 14-64 32-92 60s-46 58-60 92c-12 32-20 68-22 124-2 54-4 70-4 210s2 156 4 210c2 56 10 94 22 124 14 34 32 64 60 92s58 46 92 60c32 12 68 20 124 22 54 2 70 4 210 4s156-2 210-4c56-2 94-10 124-22 34-14 64-32 92-60s46-58 60-92c12-32 20-68 22-124 2-54 4-70 4-210s-2-156-4-210c-2-56-10-94-22-124-14-34-32-64-60-92s-58-46-92-60c-32-12-68-20-124-22-54-2-70-4-210-4zM512 248c-146 0-264 118-264 264s118 264 264 264c146 0 264-118 264-264s-118-264-264-264zM512 684c-94 0-172-78-172-172s78-172 172-172c94 0 172 78 172 172s-78 172-172 172zM846 238c0 34-26 62-60 62s-62-28-62-62c0-34 28-60 62-60s60 26 60 60z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"instagram\"\n        ],\n        \"defaultCode\": 57373,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 30,\n        \"order\": 75,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57412,\n        \"name\": \"instagram\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 156\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M514 252c-144-2-262 114-264 258 0 144 114 262 258 264 144 0 262-114 264-258 2-146-114-264-258-264zM510 644c-72 0-130-60-130-134 0-72 60-130 134-130 72 0 130 60 130 134 0 72-60 130-134 130zM512 0c-2 0-2 0-2 0h-466c-24 0-44 20-44 44v468c0 282 230 512 512 512s512-230 512-512c0-282-230-512-512-512zM512 864c-196-2-354-164-352-360s162-354 358-352c196 2 354 164 352 358 0 198-162 356-358 354z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"issuu\"\n        ],\n        \"defaultCode\": 57374,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 31,\n        \"order\": 76,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57413,\n        \"name\": \"issuu\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 157\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M60 320h184v686h-184zM422 742c56 64 142 108 234 108 86 0 142-52 142-124 0-128-184-142-316-222-80-44-140-112-140-226 0-176 162-278 328-278 102 0 192 22 286 94l-98 144c-42-38-106-64-170-64-70 0-154 30-154 108 0 158 456 110 456 444 0 178-158 298-334 298-132 0-256-56-358-146zM34 120c0-68 52-120 120-120s120 52 120 120c0 68-52 120-120 120s-120-52-120-120z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"istock\"\n        ],\n        \"defaultCode\": 57436,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 93,\n        \"order\": 77,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57414,\n        \"name\": \"istock\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 158\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M916 46c0-14-2-30-14-40-16-12-38-4-56 0-86 16-174 34-260 52-44 10-88 18-132 26-22 6-44 10-64 14-16 4-30 10-40 24-10 16-6 32-6 50 0 22 0 46 0 68 0 46 0 90 0 136 0 90 0 128 0 218v2c0 24 0 46 0 70 0 20 4 42 0 64-6 36-44 38-74 46-36 8-78 14-110 36-52 34-66 106-32 158 38 60 118 64 178 42 34-12 64-34 82-66 16-34 16-76 16-114 0-90 0-180 0-272l-2-136c0-20-2-42 0-62 4-34 40-32 66-38 88-18 178-36 266-54 22-4 44-10 66-14 14-4 32-10 44-2 14 8 12 28 12 40 0 22 0 44 0 68 0 44 0 88 0 132 0 24 0 46 0 70 0 20 2 42 0 62-8 38-46 40-76 46-36 8-78 16-108 36-52 36-66 108-34 160 38 58 118 64 180 42 32-12 64-34 80-66 18-36 16-76 16-114 0-92 0-182 0-272 0-92 0-182 0-272 0-48 2-94 2-140z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"itunes\"\n        ],\n        \"defaultCode\": 57375,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 32,\n        \"order\": 78,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57415,\n        \"name\": \"itunes\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 159\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M850.944 476.16c-52.224-54.272-113.664-93.184-181.248-116.736-2.048-1.024-5.12-2.048-7.168-2.048 1.024-2.048 2.048-4.096 2.048-6.144 17.408-45.056 15.36-93.184-5.12-137.216-20.48-43.008-57.344-75.776-102.4-91.136-27.648-9.216-52.224-13.312-72.704-13.312 0 0-1.024 0-1.024 0s-10.24-16.384 20.48-82.944l-47.104-26.624c-4.096 6.144-8.192 11.264-12.288 17.408-15.36 21.504-29.696 41.984-44.032 61.44 0 0-1.024-1.024-1.024-1.024-13.312-15.36-31.744-23.552-51.2-24.576l-59.392-4.096c-1.024 0-3.072 0-4.096 0-38.912 0-71.68 30.72-74.752 69.632l-4.096 59.392c-2.048 40.96 28.672 75.776 69.632 78.848l46.080 3.072c-4.096 37.888 2.048 73.728 17.408 105.472-58.368 23.552-111.616 60.416-157.696 106.496-140.288 142.336-140.288 297.984-140.288 423.936v68.608l54.272-57.344c11.264 41.984 28.672 80.896 50.176 117.76h65.536c-35.84-48.128-60.416-104.448-71.68-164.864l91.136-96.256-43.008 135.168 67.584-49.152c132.096-96.256 289.792-117.76 468.992-65.536 75.776 22.528 149.504 2.048 188.416-52.224 3.072-4.096 6.144-8.192 8.192-13.312 5.12 23.552 7.168 48.128 7.168 71.68 0 66.56-11.264 157.696-58.368 235.52h62.464c33.792-66.56 51.2-146.432 51.2-235.52 0-114.688-48.128-228.352-132.096-314.368zM363.52 128l-1.024 10.24c-12.288 22.528-22.528 44.032-29.696 67.584l-54.272-3.072c-11.264-1.024-19.456-10.24-18.432-20.48l4.096-59.392c1.024-10.24 9.216-18.432 19.456-18.432 0 0 1.024 0 1.024 0l59.392 4.096c5.12 0 10.24 3.072 13.312 6.144 5.12 3.072 7.168 8.192 6.144 13.312zM646.144 562.176c-2.048 1.024-3.072 2.048-5.12 3.072-1.024 0-2.048 0-3.072 0-4.096 0-7.168-2.048-10.24-5.12l-13.312-15.36-45.056 36.864c-1.024 1.024-3.072 2.048-6.144 2.048s-6.144-1.024-8.192-4.096l-20.48-24.576c-3.072-4.096-3.072-11.264 1.024-14.336l45.056-36.864-17.408-22.528-22.528 18.432c-2.048 1.024-4.096 2.048-6.144 2.048-3.072 0-6.144-1.024-7.168-4.096l-5.12-5.12c-3.072-4.096-3.072-11.264 1.024-14.336l21.504-18.432-45.056-55.296c-5.12-6.144-4.096-14.336 2.048-18.432 2.048-2.048 5.12-3.072 8.192-3.072 4.096 0 7.168 2.048 10.24 5.12l126.976 155.648c5.12 5.12 4.096 14.336-1.024 18.432z\",\n          \"M445.44 911.36c0 22.622-18.338 40.96-40.96 40.96s-40.96-18.338-40.96-40.96c0-22.622 18.338-40.96 40.96-40.96s40.96 18.338 40.96 40.96z\",\n          \"M698.368 911.36c0 22.622-18.338 40.96-40.96 40.96s-40.96-18.338-40.96-40.96c0-22.622 18.338-40.96 40.96-40.96s40.96 18.338 40.96 40.96z\",\n          \"M293.25 171.683l2.206-35.772 35.772 2.206-2.206 35.772-35.772-2.206z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"keybase\"\n        ],\n        \"defaultCode\": 57376,\n        \"grid\": 16,\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {}\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"id\": 33,\n        \"order\": 79,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57416,\n        \"name\": \"keybase\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 160\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M382.976 1024c22.528 0 38.912-5.12 55.296-10.24 132.096-43.008 263.168-84.992 395.264-128 36.864-12.288 74.752-23.552 110.592-36.864s48.128-37.888 43.008-75.776c-5.12-30.72-12.288-60.416-19.456-90.112-2.048-9.216-5.12-17.408-9.216-25.6-10.24-21.504-25.6-29.696-49.152-25.6-13.312 2.048-25.6 6.144-37.888 10.24-103.424 33.792-206.848 67.584-310.272 101.376-10.24 3.072-14.336 1.024-17.408-9.216-35.84-112.64-72.704-225.28-108.544-337.92-31.744-99.328-58.368-200.704-92.16-300.032-7.168-22.528-14.336-45.056-26.624-65.536-14.336-24.576-31.744-32.768-59.392-27.648-51.2 9.216-99.328 28.672-148.48 45.056-17.408 4.096-33.792 11.264-49.152 20.48-21.504 13.312-27.648 28.672-21.504 52.224 4.096 18.432 10.24 36.864 16.384 54.272 38.912 111.616 81.92 223.232 119.808 335.872 45.056 135.168 88.064 270.336 133.12 406.528 8.192 25.6 17.408 51.2 30.72 74.752 9.216 19.456 24.576 32.768 45.056 31.744z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"lanyrd\"\n        ],\n        \"defaultCode\": 57453,\n        \"grid\": 16,\n        \"attrs\": [\n          {}\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"id\": 110,\n        \"order\": 80,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57417,\n        \"name\": \"lanyrd\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 161\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M780 796c-202 0-274-92-310-204l-38-118c-28-86-62-152-164-152-72 0-144 52-144 196 0 112 56 182 138 182 92 0 152-68 152-68l38 102c0 0-64 62-196 62-164 0-256-96-256-274 0-186 92-294 264-294 156 0 234 56 284 208l38 118c28 86 78 148 196 148 80 0 122-18 122-62 0-34-20-58-80-72l-80-20c-96-22-136-72-136-152 0-128 104-168 210-168 120 0 192 42 202 148l-118 14c-4-50-36-70-92-70-52 0-82 22-82 62 0 36 14 56 66 68l76 16c100 24 154 74 154 168 0 118-98 162-244 162z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"lastfm\"\n        ],\n        \"defaultCode\": 57418,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 75,\n        \"order\": 81,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57418,\n        \"name\": \"lastfm\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 162\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1014 358c-20-86-70-154-138-210-106-86-228-122-364-124-46 0-92 4-136 14-112 26-210 78-284 164-56 66-88 142-92 228-2 88 26 166 82 236 78 96 180 150 298 176 24 4 46 8 68 14s28 16 28 38c0 12-2 20-2 30-2 16-8 32-8 48-2 24 8 34 32 26 16-6 32-12 46-22 78-44 154-96 228-152 64-48 126-102 174-168 68-88 94-188 68-298zM332 560c0 4-4 10-10 10h-142c-4 0-6-2-8-4s-4-4-4-6v-224c0-6 6-10 12-10h36c4 0 10 4 10 10v178h96c6 0 10 4 10 10zM420 560c0 4-4 10-10 10h-36c-6 0-10-4-10-10v-224c0-6 4-10 10-10h36c4 0 10 4 10 10zM666 560c0 4-4 10-10 10h-36c-2 0-2 0-2 0s0 0-2 0c0 0 0 0 0 0-2-2-2-2-2-2l-104-138v132c0 4-4 10-10 10h-36c-4 0-10-4-10-10v-226c0-6 4-10 10-10h36c0 0 0 0 2 0 0 0 0 0 0 0s0 0 2 0c0 0 0 0 0 0s0 0 2 0c0 0 0 0 0 0s0 0 2 0c0 0 0 0 0 0s0 0 2 0c0 0 0 2 0 2l104 136v-128c0-6 4-10 10-10h36c4 0 10 4 10 10v224zM864 372c0 4-4 10-10 10h-98v38h98c6 0 10 4 10 10v36c0 6-4 10-10 10h-98v38h98c6 0 10 4 10 10v36c0 6-4 10-10 10h-144c-2 0-4 0-6-2s-4-4-4-8v-224c0-2 2-4 4-6s4-4 6-4h144c6 0 10 4 10 10z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"line\"\n        ],\n        \"defaultCode\": 57377,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 34,\n        \"order\": 82,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57419,\n        \"name\": \"line\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 163\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M766 524c-14-16-38-24-72-24-44 0-74 14-92 38-18 26-26 62-26 108v350c0 6-2 12-8 18-4 4-12 8-18 8h-184c-6 0-12-4-18-8-4-6-8-12-8-18v-646c0-6 4-12 8-18 6-4 12-8 18-8h178c6 0 12 2 16 4s6 8 8 14c0 6 2 12 2 14s0 8 0 16c46-44 108-64 182-64 86 0 152 20 200 62 48 44 72 106 72 190v436c0 6-2 12-8 18-4 4-12 8-18 8h-188c-6 0-12-4-18-8-4-6-8-12-8-18v-394c0-34-6-60-18-78zM212 214c-24 24-54 36-88 36s-64-12-88-36c-24-24-36-52-36-88 0-34 12-62 36-86s54-38 88-38c34 0 64 14 88 38s36 52 36 86c0 36-12 64-36 88zM242 350v646c0 6-4 12-8 18-6 4-12 8-18 8h-184c-6 0-12-4-18-8-4-6-8-12-8-18v-646c0-6 4-12 8-18 6-4 12-8 18-8h184c6 0 12 4 18 8 4 6 8 12 8 18z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"linkedin\"\n        ],\n        \"defaultCode\": 57508,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 165,\n        \"order\": 83,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57420,\n        \"name\": \"linkedin\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 164\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M352 100c0 0 0 0 0 0s0 0 0 0 0 0 0 0zM542 60c-68 0-132 14-190 40 4 2 6 4 10 8 10 10 20 20 30 30 2 2 2 2 2 2l344 344c-106 62-188 146-248 256l-346-346c-2-2-2-2-4-4-10-12-22-22-32-32-2-2-4-4-6-8 52-114 134-198 252-248-2-2-2-2-2-2s0 0 0 0c-30-30-60-58-88-88-12-10-22-14-36-6-18 8-34 18-50 28-56 38-102 84-140 138-12 18-24 36-34 58-6 12-6 20 6 30 30 30 60 60 90 90-26 58-38 124-38 190 0 266 216 482 480 482 266 0 482-216 482-482 0-264-216-480-482-480zM592 778c40-92 104-154 192-196 16 82 32 160 48 246-84-18-160-34-240-50z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"livejournal\"\n        ],\n        \"defaultCode\": 57378,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 35,\n        \"order\": 84,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57421,\n        \"name\": \"livejournal\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 165\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M128 720c-22 0-52-4-80-28-30-26-48-68-48-114v-414h144v414c0 72 32 110 50 124-12 8-38 18-66 18zM580 708c-4 0-10 0-14 0v-356c0-112 90-202 200-202 94 0 178 68 196 158l2 4h52v144h-48v50c0 30 24 56 54 58v142c-106-4-194-92-194-200v-156c0-32-26-60-60-60-30 0-56 24-58 54v60h80v142h-80v20c0 48-16 90-46 114-26 20-52 28-84 28zM322 870c-30 0-62-4-94-14v-128c20 6 48 14 74 14 4 0 8 0 12 0 44-4 74-26 78-58l2-20-14 14c0 0-28 26-72 26-14 0-26-2-40-4-70-20-86-78-86-124v-264h144v224c0 18 12 30 30 30 16 0 30-14 30-30v-222h142v352c0 102-60 178-150 196-18 8-36 8-56 8z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"lyft\"\n        ],\n        \"defaultCode\": 57379,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 36,\n        \"order\": 85,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57422,\n        \"name\": \"lyft\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 166\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M756 814h-64l-180-258-182 258h-62l212-302-212-302h62l182 258 180-258h64l-212 302zM512 0c-282 0-512 230-512 512s230 512 512 512c284 0 512-230 512-512 2-282-228-512-512-512z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"macos\"\n        ],\n        \"defaultCode\": 57380,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 37,\n        \"order\": 86,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57423,\n        \"name\": \"macos\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 167\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M546 630c-10 8-22 14-34 14s-24-6-34-14l-478-390v614h1024v-614zM512 512c10 0 20-4 28-10l406-332h-868l406 332c8 6 18 10 28 10z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"mail\"\n        ],\n        \"defaultCode\": 57462,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 119,\n        \"order\": 87,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57424,\n        \"name\": \"mail\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 168\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 934.912h-390.144l77.824-86.016c3.072-3.072 3.072-13.312 3.072-28.672v-535.552l-256 650.24-277.504-606.208c-7.168-15.36-13.312-35.84-18.432-52.224v450.56c0 18.432-1.024 21.504 12.288 38.912l117.76 168.96h-292.864l118.784-168.96c13.312-17.408 11.264-20.48 11.264-38.912v-465.92c0-20.48 3.072-22.528-6.144-33.792l-91.136-138.24h276.48l238.592 529.408 207.872-529.408h268.288l-71.68 89.088c-10.24 10.24-10.24 19.456-10.24 35.84v605.184c0 15.36 0 24.576 4.096 28.672l77.824 87.040z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"medium\"\n        ],\n        \"defaultCode\": 57381,\n        \"grid\": 16,\n        \"attrs\": [\n          {}\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"id\": 38,\n        \"order\": 88,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57425,\n        \"name\": \"medium\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 169\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M684.175 746.721c3.174 75.090 38.646 131.277 106.803 161.516 57.037 25.303 118.692 33.147 181.268 21.627 33.915-6.257 50.913-23.726 51.712-51.436 0.901-31.662-12.339-47.933-48.425-56.361-25.129-5.868-51.098-8.305-76.032-14.807-37.581-9.81-51.118-28.426-50.934-66.693 0.072-12.411 1.434-25.006 3.871-37.192 14.705-73.513 47.35-140.493 76.667-208.671 31.58-73.452 69.683-144.548 81.9-225.065 9.615-63.314-29.614-124.805-91.607-138.414-45.394-9.953-91.238-11.653-133.294 14.653-16.415 10.271-31.427 8.714-45.476-4.751-7.219-6.922-15.165-13.066-22.508-19.866-44.913-41.626-101.581-43.192-149.207-3.789-11.561 9.574-22.589 19.794-33.976 29.583-24.965 21.484-50.627 28.887-82.186 10.988-28.918-16.404-58.726-32.389-91.085-41.144-71.752-19.384-160.174 27.771-194.284 103.281-20.972 46.418-37.786 94.495-53.934 142.797-39.404 117.934-77.64 236.319-108.739 356.68-18.964 73.4 21.002 139.878 90.122 162.161 79.544 25.641 138.711 0.010 171.008-76.687 30.106-71.506 57.907-143.995 86.723-216.064 27.884-69.724 55.245-139.674 83.917-209.080 11.315-27.402 37.376-40.714 59.75-33.72 23.777 7.434 37.448 34.212 31.775 63.437-1.741 8.96-4.547 17.807-7.762 26.388-11.96 32.041-24.054 64.051-36.536 95.898-23.142 59.044-47.739 117.545-69.54 177.060-14.049 38.349-2.232 68.69 27.095 80.988 33.659 14.141 76.165 5.059 101.509-21.545 13.445-14.1 22.231-31.13 30.925-48.292 59.628-117.617 119.306-235.203 179.036-352.768 8.714-17.152 17.736-34.222 32.799-46.858 13.138-11.018 28.17-15.186 44.165-7.26 16.353 8.11 16.845 23.634 15.237 39.066-1.556 15.155-8.161 28.815-14.572 42.414-42.721 90.573-85.627 181.043-128.205 271.677-11.807 25.19-19.415 51.548-17.981 80.251z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"meetup\"\n        ],\n        \"defaultCode\": 57404,\n        \"grid\": 16,\n        \"attrs\": [\n          {}\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"id\": 61,\n        \"order\": 89,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57426,\n        \"name\": \"meetup\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 170\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M936 814c-6 0-12-2-18-6-16-10-20-32-10-48 32-46 48-102 48-158 0-58-16-112-48-158-10-16-6-38 10-48 14-10 36-6 46 10 40 58 60 126 60 196s-20 138-60 196c-6 10-16 16-28 16zM838 758c-6 0-12-2-18-6-16-10-20-32-10-46 22-32 32-68 32-104 0-38-10-72-32-104-10-16-6-36 10-46 16-12 36-8 46 8 30 42 44 92 44 142s-14 100-44 142c-6 10-16 14-28 14zM680 454c-14-136-130-244-270-244-116 0-218 74-256 184-86 12-154 88-154 178 0 100 82 182 182 182h464c84 0 152-68 152-152 0-72-50-134-118-148zM646 686h-464c-62 0-114-52-114-114s52-112 114-112c30 0 58 10 80 32 14 14 34 14 48 0 14-12 14-34 0-48-24-24-52-40-84-48 32-70 104-118 184-118 112 0 202 90 202 202 0 22-2 44-10 64-6 18 4 36 22 42 4 2 8 2 10 2 16 0 28-8 34-24 4-12 8-26 10-40 30 12 52 42 52 78 0 46-36 84-84 84z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"mixcloud\"\n        ],\n        \"defaultCode\": 57419,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 76,\n        \"order\": 90,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57427,\n        \"name\": \"mixcloud\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 171\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1022 592c-2-42-4-82-16-122-10-38-28-74-50-108-20-30-46-60-80-78-32-16-66-20-102-16-84 10-148 68-202 132-28 32-54 68-80 104-6 12-14 22-20 34-6 8-10 20-18 26-14 14-22-34-24-42-24-88-46-180-86-264-16-34-34-68-60-94-28-28-62-30-102-30-18 4-34 4-50 20-16 14-32 28-46 42s-26 32-44 42c-14 8-32 6-38 22-10 18 2 38 2 58 0 22 4 68 4 68s0 48 0 72c0 12 0 24 0 36 0 10 0 30 0 30v286c0 0-4 42 6 56 8 14 26 12 40 12 28 2 64 4 68-30 4-22 2-44 2-66 0-24 0-50 0-74 0-96-16-194 2-290 4-28 20-92 60-82 36 8 60 56 72 86 34 88 52 182 72 274 4 24 8 48 16 70 4 16 8 34 24 40 30 18 74-2 98-22 34-26 56-60 74-98 22-42 42-84 62-128 18-36 30-76 64-102 28-20 68-34 102-30 92 6 114 130 116 202 2 48-4 96-6 144-2 24-2 48-2 72 0 10-2 24 4 34 12 20 52 12 70 10 26-2 36-14 46-40 14-42 20-84 22-130 2-42 4-84 0-126z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"modelmayhem\"\n        ],\n        \"defaultCode\": 57433,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 90,\n        \"order\": 91,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57428,\n        \"name\": \"modelmayhem\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 172\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M608.256 973.824c0-27.648-38.912-50.176-87.040-50.176 0 0 0 0 0 0-23.552 0-45.056 5.12-61.44 15.36-16.384 9.216-25.6 21.504-25.6 34.816 0 27.648 38.912 50.176 87.040 50.176 0 0 0 0 0 0 23.552 0 45.056-5.12 61.44-15.36 16.384-9.216 25.6-21.504 25.6-34.816v0z\",\n          \"M260.096 373.76c0 0 0 0 0 0-1.024-1.024-2.048-2.048-3.072-2.048 0 0 0 0 0 0-1.024 0-1.024 0-2.048-1.024 0 0 0 0 0 0-1.024 0-1.024 0-2.048 0h-17.408c-6.144 0-10.24 4.096-10.24 10.24v530.432c0 5.12 5.12 10.24 10.24 10.24h17.408c6.144 0 10.24-4.096 10.24-10.24v-530.432c0-3.072-1.024-5.12-3.072-7.168v0z\",\n          \"M349.184 77.824h1.024v1.024c0 27.648 0 55.296 0 81.92 0 45.056 0 91.136 1.024 136.192 2.048 27.648 16.384 55.296 38.912 74.752s51.2 28.672 78.848 26.624c13.312 0 25.6 0 38.912 0 23.552 0 49.152 1.024 72.704-2.048 54.272-10.24 94.208-64.512 88.064-121.856v-197.632h1.024c21.504-2.048 40.96 6.144 58.368 20.48 20.48 18.432 33.792 47.104 35.84 73.728 1.024 45.056 1.024 91.136 0 136.192 0 18.432 0 37.888 0 57.344 2.048-1.024 3.072-1.024 5.12-1.024h17.408c8.192 0 14.336 6.144 14.336 13.312v9.216h1.024v-14.336h2.048c12.288 1.024 25.6 4.096 37.888 8.192v-208.896c-3.072-25.6-7.168-52.224-18.432-73.728-30.72-62.464-105.472-102.4-181.248-96.256v0 0c-20.48-3.072-41.984 11.264-48.128 30.72 0 82.944 1.024 169.984 0 258.048-1.024 17.408-10.24 33.792-23.552 45.056-14.336 12.288-32.768 17.408-51.2 15.36-26.624 1.024-54.272-1.024-71.68-22.528-18.432-19.456-17.408-45.056-17.408-69.632 0-7.168 0-14.336 0-21.504 0-19.456 0-38.912 0-58.368 0-49.152 0-100.352 0-151.552-10.24-19.456-31.744-30.72-55.296-27.648h-8.192c-81.92-2.048-158.72 53.248-178.176 128-4.096 17.408-6.144 34.816-7.168 55.296v200.704c12.288-4.096 23.552-7.168 35.84-8.192h2.048v4.096c0-7.168 6.144-13.312 13.312-13.312h17.408c3.072 0 5.12 1.024 8.192 2.048 0-20.48 0-40.96 0-61.44 0-44.032 0-90.112 0-135.168 5.12-45.056 40.96-94.208 91.136-93.184-1.024-1.024 0-1.024 0 0z\",\n          \"M940.032 462.848c-30.72-43.008-71.68-72.704-115.712-82.944 0 0-1.024 0-1.024 0-3.072-1.024-5.12-1.024-8.192-2.048s-6.144-1.024-9.216-1.024v540.672c51.2-6.144 98.304-36.864 134.144-86.016 35.84-50.176 55.296-115.712 55.296-184.32s-19.456-134.144-55.296-184.32z\",\n          \"M203.776 381.952c-1.024 0-2.048 0-3.072 1.024-2.048 1.024-4.096 1.024-7.168 2.048 0 0-1.024 0-1.024 0-2.048 1.024-5.12 1.024-7.168 2.048 0 0 0 0 0 0v0c-38.912 13.312-73.728 39.936-101.376 78.848-35.84 50.176-55.296 115.712-55.296 184.32s19.456 134.144 55.296 184.32c34.816 49.152 82.944 79.872 134.144 86.016v-541.696c-3.072 0-6.144 1.024-8.192 1.024-3.072 1.024-4.096 1.024-6.144 2.048z\",\n          \"M787.456 367.616h-17.408c-1.024 0-1.024 0-2.048 0 0 0 0 0-1.024 0 0 0 0 0-1.024 0-4.096 1.024-7.168 5.12-7.168 9.216v530.432c0 5.12 5.12 10.24 11.264 10.24h17.408c6.144 0 11.264-4.096 11.264-10.24v-529.408c0-6.144-5.12-10.24-11.264-10.24z\",\n          \"M804.864 920.576h-2.048v-17.408c0 0-1.024 0-1.024 0v4.096c0 7.168-6.144 13.312-14.336 13.312h-2.048c-1.024 1.024-1.024 1.024-2.048 2.048-10.24 7.168-19.456 14.336-29.696 21.504-9.216 6.144-19.456 12.288-28.672 17.408-7.168 3.072-13.312 4.096-13.312 4.096h-101.376c1.024 3.072 1.024 6.144 1.024 9.216v0c0 6.144-1.024 11.264-4.096 16.384 1.024 0 1.024 0 2.048 0h108.544c2.048 0 11.264-3.072 17.408-5.12 13.312-6.144 22.528-13.312 37.888-22.528 16.384-10.24 47.104-34.816 47.104-34.816 4.096-2.048 5.12-6.144 5.12-10.24-7.168 1.024-13.312 2.048-20.48 2.048z\",\n          \"M395.264 667.648c-2.048-2.048-6.144-3.072-10.24-3.072s-10.24 0-16.384 0h-7.168v71.68h2.048c10.24 0 17.408 0 21.504 0s8.192-2.048 12.288-5.12c3.072-3.072 6.144-7.168 8.192-12.288s2.048-11.264 2.048-18.432l-3.072-20.48c-2.048-6.144-5.12-10.24-9.216-12.288z\",\n          \"M379.904 615.424c3.072 0 5.12-2.048 8.192-4.096 3.072-3.072 5.12-6.144 6.144-11.264s2.048-10.24 2.048-16.384c0-4.096-1.024-9.216-2.048-14.336s-3.072-8.192-6.144-10.24c-3.072-2.048-6.144-3.072-9.216-3.072s-9.216 0-15.36 0h-3.072v60.416h5.12c7.168-1.024 12.288-1.024 14.336-1.024z\",\n          \"M729.088 474.112h-432.128v343.040h431.104v-343.040zM443.392 738.304c-3.072 10.24-7.168 19.456-12.288 26.624-6.144 8.192-12.288 14.336-19.456 18.432-7.168 3.072-16.384 5.12-26.624 5.12h-62.464v-285.696h55.296c11.264 0 20.48 1.024 26.624 2.048 6.144 2.048 11.264 5.12 16.384 10.24s10.24 13.312 12.288 22.528c3.072 9.216 4.096 19.456 4.096 31.744 0 14.336-2.048 26.624-6.144 36.864-4.096 11.264-9.216 18.432-15.36 23.552v1.024c9.216 4.096 17.408 11.264 23.552 22.528s9.216 26.624 9.216 46.080c-1.024 15.36-2.048 27.648-5.12 38.912zM576.512 790.528h-108.544v-289.792h43.008v230.4h65.536v59.392zM700.416 560.128h-65.536v46.080h60.416v57.344h-60.416v68.608h65.536v59.392h-108.544v-290.816h108.544v59.392z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"mumble\"\n        ],\n        \"defaultCode\": 57382,\n        \"grid\": 16,\n        \"attrs\": [\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {},\n          {}\n        ]\n      },\n      \"attrs\": [\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"id\": 39,\n        \"order\": 92,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57429,\n        \"name\": \"mumble\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 173\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M846 558c98 0 178 78 178 178 0 32 0 90 0 90h-358c0 0 0-58 0-90 0-100 80-178 180-178zM682 362c0-90 72-164 164-164 90 0 164 74 164 164 0 92-74 164-164 164-92 0-164-72-164-164zM476 586c88 0 160 72 160 160 0 28 0 80 0 80h-318c0 0 0-52 0-80 0-88 70-160 158-160zM330 408c0-82 66-148 146-148 82 0 148 66 148 148 0 80-66 146-148 146s-146-66-146-146zM142 610c80 0 144 64 144 144 0 26 0 72 0 72h-286c0 0 0-46 0-72 0-80 64-144 142-144zM10 450c0-74 60-132 132-132 74 0 132 58 132 132 0 72-58 132-132 132-72 0-132-60-132-132z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"myspace\"\n        ],\n        \"defaultCode\": 57414,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 71,\n        \"order\": 93,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57430,\n        \"name\": \"myspace\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 174\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M548 876l88-64c0-4 0-6 0-8 0-40 32-74 72-74s74 34 74 74c0 40-34 72-74 72-14 0-28-4-38-12l-122 88v72h-72v-216l-124-90c-12 6-24 10-36 10-40 0-74-34-74-74s34-72 74-72c40 0 72 32 72 72 0 4 0 8-2 12l90 66v-216l-124-90c-12 6-24 10-36 10-40 0-74-34-74-74s34-72 74-72c40 0 72 32 72 72 0 4 0 10-2 14l90 64v-202l-126-92c-10 6-22 10-34 10-40 0-74-32-74-72s34-74 74-74c40 0 72 34 72 74 0 4 0 8-2 12l90 66v-162h72v306l88-64c0-4 0-8 0-10 0-40 32-74 72-74s74 34 74 74c0 40-34 72-74 72-14 0-26-4-38-10l-122 88v202l88-64c0-4 0-6 0-8 0-42 32-74 72-74s74 32 74 74c0 40-34 72-74 72-14 0-26-4-38-12l-122 90v214z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"newsvine\"\n        ],\n        \"defaultCode\": 57395,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 52,\n        \"order\": 94,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57431,\n        \"name\": \"newsvine\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 175\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M432 270c-84 0-162 26-228 68-8 6-14 10-22 10h-100c-22 0-40 18-40 38h-2v600c0 20 18 36 40 36h128c22 0 40-16 40-36v-342c0-98 82-176 184-176 100 0 182 78 182 176v342c0 20 18 38 40 38h128c20 0 40-18 40-38v-342c-2-206-174-374-390-374zM976 272c-118-164-318-272-544-272-100 0-194 20-280 58-14 6-20 22-14 38 8 14 24 20 38 14 78-36 164-54 256-54 206 0 390 98 500 250 8 12 26 14 38 6 14-10 16-28 6-40zM432 126c-78 0-154 16-224 46-14 8-20 22-14 36 8 16 24 22 38 16 62-28 130-42 202-42 156 0 306 72 396 194 4 8 14 12 22 12 6 0 12-2 16-6 12-10 14-26 6-38-102-136-268-218-442-218z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"nintendo\"\n        ],\n        \"defaultCode\": 57383,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 40,\n        \"order\": 95,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57432,\n        \"name\": \"nintendo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 176\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 0h1024v1024h-206v-810h-300v810h-518z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"npm\"\n        ],\n        \"defaultCode\": 57511,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 168,\n        \"order\": 96,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57433,\n        \"name\": \"npm\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 177\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 518c144 0 260-116 260-258 0-144-116-260-260-260s-260 116-260 260c0 142 116 258 260 258zM512 132c70 0 128 56 128 128 0 70-58 126-128 126s-128-56-128-126c0-72 58-128 128-128zM810 550c-14-30-54-54-108-12-74 58-190 58-190 58s-116 0-190-58c-54-42-94-18-108 12-26 52 2 76 68 118 56 36 132 48 180 54l-40 42c-58 56-114 112-154 152-22 22-22 60 0 84l8 6c24 24 60 24 84 0l152-152c58 58 114 114 154 152 22 24 60 24 84 0l6-6c24-24 24-62 0-84l-194-194c50-6 126-18 180-54 66-42 94-66 68-118z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"odnoklassniki\"\n        ],\n        \"defaultCode\": 57445,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 102,\n        \"order\": 97,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57434,\n        \"name\": \"odnoklassniki\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 178\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M464 888c-176-22-310-118-310-234 0-110 120-202 284-230v-98c-250 30-438 164-438 328 0 170 202 308 464 332l156-72v-876l-156 76zM1024 592l-22-222-80 44c-74-44-168-76-274-90v98c60 12 114 30 158 58l-84 46z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"openid\"\n        ],\n        \"defaultCode\": 57384,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 41,\n        \"order\": 98,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57435,\n        \"name\": \"openid\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 179\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M852 130c-90-80-208-130-338-130 0 0 0 0-2 0-282 0-512 230-512 512 0 274 216 498 488 510 8 0 16 2 24 2 132 0 250-50 340-130 106-94 172-230 172-382s-66-288-172-382zM248 524c0 0 0-24 0-24 2-110 38-210 96-276 48-56 108-90 174-90 150 0 270 170 270 378s-120 378-270 378c-66 0-126-34-174-90-58-66-94-166-96-276z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"opera\"\n        ],\n        \"defaultCode\": 57385,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 42,\n        \"order\": 99,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57436,\n        \"name\": \"opera\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 180\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M640 218v200l70 44c2 0 6 0 8 0l300-204c0-24-22-40-34-40zM640 492l64 44c8 6 20 0 20 0-12 6 294-196 294-196v368c0 40-26 56-54 56h-324v-272zM308 400c-22 0-38 10-52 30-12 20-18 48-18 82s6 60 18 80c14 20 30 30 52 30 20 0 38-10 50-28 12-20 18-46 18-82 0-34-6-62-18-82s-28-30-50-30zM6 116v784l596 124v-1024zM404 640c-24 32-58 50-98 50s-72-16-96-48c-26-32-38-74-38-126 0-54 12-98 38-132s58-52 100-52c40 0 72 16 96 50 24 32 36 74 36 126 0 54-12 98-38 132z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"outlook\"\n        ],\n        \"defaultCode\": 57448,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 105,\n        \"order\": 100,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57437,\n        \"name\": \"outlook\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 181\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M200 102c90-68 196-102 306-102h12c110 0 216 34 306 102l-80 94c-66-48-144-76-226-76h-10c-82 0-160 28-226 76zM512 1024h-6c-6 0-12 0-18 0h-6c-4 0-20-2-20-2h-10c-4 0-8-2-12-2-2 0-6 0-10 0-4-2-14-2-14-2s-12-4-16-6h-4c-20-4-38-10-56-16-2 0-6-2-10-4l-4-2c-6-2-10-4-14-4-62-26-116-62-162-106l-6-6c-96-96-150-226-150-362 0-140 60-274 160-370l82 98c-72 72-114 170-114 272 0 68 18 134 52 192l6 12 216-214 68-168v274l-206 204 14 8c10 8 22 16 34 22l8 4v2c58 34 124 54 192 54h10c68 0 134-20 192-54v-2l6-4c12-6 22-14 34-22l4-8-218-206v-272l80 168 226 214 8-12c34-58 54-124 54-192 0-102-42-200-114-274l80-98c102 96 162 232 162 372 0 136-54 266-150 362l-10 8c-44 44-98 78-156 102-6 4-12 4-16 6l-4 4c-4 0-8 2-10 4-18 6-36 10-56 14 0 0-12 2-14 4h-6c-4 2-8 2-12 2-4 2-8 2-10 2-4 0-8 0-14 2h-10c0 0-16 2-20 2h-6c-6 0-12 0-18 0z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"overwatch\"\n        ],\n        \"defaultCode\": 57386,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 43,\n        \"order\": 101,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57438,\n        \"name\": \"overwatch\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 182\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M656.384 21.504c-203.776 0-368.64 164.864-368.64 368.64 0 202.752 165.888 367.616 368.64 367.616s367.616-164.864 367.616-367.616c0-203.776-164.864-368.64-367.616-368.64z\",\n          \"M0 21.504h180.224v982.016h-180.224v-982.016z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"patreon\"\n        ],\n        \"defaultCode\": 57459,\n        \"grid\": 16,\n        \"attrs\": [\n          {},\n          {}\n        ]\n      },\n      \"attrs\": [\n        {},\n        {}\n      ],\n      \"properties\": {\n        \"id\": 116,\n        \"order\": 102,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57439,\n        \"name\": \"patreon\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 183\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M636 0h-370c-24 0-46 18-50 44l-148 944c-4 20 10 36 30 36h176c24 0 46-18 50-44l40-254c4-26 26-44 50-44h118c242 0 382-116 420-350 16-102 0-182-48-238-52-62-146-94-268-94zM678 346c-20 132-122 132-220 132h-54l38-248c2-14 16-26 30-26h26c66 0 130 0 162 38 20 24 26 56 18 104z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"paypal\"\n        ],\n        \"defaultCode\": 57444,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 101,\n        \"order\": 103,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57440,\n        \"name\": \"paypal\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 184\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M804 128c-78-82-180-128-286-128-230 0-416 192-416 428 0 152 114 320 164 386 74 98 184 210 252 210 82 0 226-188 240-210 50-66 164-236 164-386 0-112-42-220-118-300zM518 988c-86 0-380-334-380-560 0-214 168-392 380-392 200 0 368 178 368 392 0 226-294 560-368 560zM518 182c-20 0-40 2-60 6 32 14 54 46 54 82 0 50-40 88-90 88s-90-38-90-88c0 0 0 0 0 0-30 38-48 88-48 144 0 118 102 218 234 218 120 0 222-100 222-218 0-132-102-232-222-232z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"periscope\"\n        ],\n        \"defaultCode\": 57447,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 104,\n        \"order\": 104,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57441,\n        \"name\": \"periscope\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 185\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M688 120h-650c-22 0-38 16-38 36v712c0 20 16 36 38 36h650l336-392zM414 748c-158 0-210-6-210-6s8-126 66-148c56-22 70-20 90-32 0 0 2 0 2 0v-34c-20-16-34-42-44-70-10-12-16-24-16-38 0-10 4-20 8-28 4-70 48-116 104-116 54 0 100 46 102 116 6 8 8 18 8 28 0 14-6 26-16 38-8 28-24 54-42 70v34c0 0 0 0 0 0 20 12 34 10 92 32s66 148 66 148c0 0-54 6-210 6z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"persona\"\n        ],\n        \"defaultCode\": 57440,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 97,\n        \"order\": 105,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57442,\n        \"name\": \"persona\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 186\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M340 392c0-44 10-80 34-110 22-30 50-46 82-46 26 0 46 8 60 26s22 40 22 66c0 16-4 36-10 58-6 24-12 52-22 82-10 32-18 56-22 74-8 32-2 60 18 84 20 22 46 34 78 34 56 0 102-32 138-94 36-64 54-140 54-230 0-68-22-124-66-168-44-42-106-64-186-64-90 0-162 28-216 86-56 56-84 124-84 204 0 48 14 88 40 120 10 10 12 22 10 34-4 10-8 26-12 48-2 8-6 14-12 16s-12 2-18 0c-42-18-72-46-94-88s-32-90-32-144c0-36 6-70 18-106s28-70 52-102c24-34 54-62 86-88 34-26 74-46 124-62 48-14 100-22 154-22 58 0 110 10 158 30 48 18 90 44 122 76 34 34 58 70 78 112 18 42 28 86 28 130 0 120-30 220-92 298-62 80-140 118-236 118-32 0-62-6-90-22-28-14-48-32-60-54-22 94-36 150-42 168-12 46-40 102-86 168h-42c-8-82-6-150 6-204l78-330c-12-26-18-58-18-98z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"pinterest\"\n        ],\n        \"defaultCode\": 57504,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 161,\n        \"order\": 106,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57443,\n        \"name\": \"pinterest\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 187\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M590 490l132-132-200-116c0 0-392-226-414-238-2-2-4-4-8-4zM946 488c-18-10-172-100-202-118l-136 136 138 140c38-22 178-102 198-114 24-14 22-34 2-44zM70 2c-4 6-8 14-8 24 0 46 0 484 0 484s0 472 0 492c0 6 2 10 4 14l508-510zM590 524l-500 500c2 0 6-2 8-4 20-12 424-244 424-244l204-118z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"play\"\n        ],\n        \"defaultCode\": 57474,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 131,\n        \"order\": 107,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57444,\n        \"name\": \"play\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 188\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-210 0-382 172-382 382 0 2 0 4 0 6s0 2 0 2c0 2 0 2 0 4s0 2 0 4v0c10 278 300 626 300 626v-460c-100-46-144-164-100-262 46-102 164-146 262-100 100 44 146 162 100 262-22 52-66 88-118 108v188c208-34 348-230 314-440-28-184-188-320-376-320z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"player\"\n        ],\n        \"defaultCode\": 57387,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 44,\n        \"order\": 108,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57445,\n        \"name\": \"player\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 189\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1022 684c-10-48-86-74-206-84-84-6-168 14-250 42l-14 4v-362c0-30 64-28 64 6v282c130 38 196-20 198-164 0-122-82-194-216-230l-212-54v428l-64 22 64 20v108l-152 52c-52 18-94-24-48-40l38-14-142-44c-44 14-84 46-82 90s106 56 184 68c74 12 142 6 202-16v-46 96l166 54v-4l2 4 144-52 240-84-156-48-230 78v-54l146-50 86-30c90-16 126 14 40 42l-42 14 156 48h2c62-22 90-54 84-82zM82 656l142 44 162-58v-48l-64-20-236 80c-2 0-2 2-4 2z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"playstation\"\n        ],\n        \"defaultCode\": 57405,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 62,\n        \"order\": 109,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57446,\n        \"name\": \"playstation\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 190\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 176c0-28 2-54-14-78-12-18-32-34-52-40-28-8-58-6-84-4-120 0-242-2-362-2-14 0-26 0-40 0-16 0-32 0-50 0-58 0-118 0-178 0-30 0-60 0-90 0-16 0-32 0-48 0-14 0-26 0-38 4-42 12-68 52-68 96 0 60 0 120 0 180 0 58-2 118 2 178 4 54 20 110 42 160 42 90 110 166 194 220 92 58 202 86 310 78 106-8 208-50 290-118 78-62 134-146 164-240 16-54 22-112 22-168 0-58 0-118 0-178 0-30 0-60 0-88zM820 408c-6 26-32 44-50 62-46 44-92 88-138 130-24 24-46 46-70 68-18 16-42 24-66 18-28-6-48-32-66-50-24-22-46-44-68-64-46-44-92-88-138-134-34-34-28-96 20-116 22-8 48-6 66 6 12 10 24 20 34 32 12 10 24 22 34 32 46 44 88 88 134 128 52-48 104-98 156-148 22-20 42-48 74-54 24-4 50 6 66 24 14 18 20 44 12 66z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"pocket\"\n        ],\n        \"defaultCode\": 57461,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 118,\n        \"order\": 110,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57447,\n        \"name\": \"pocket\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 191\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M964 592c-30-72-72-124-102-136 0-4 0-8 0-14 0-26-8-52-20-72 0-2 0-4 0-6 0-12-4-24-8-34-8-184-128-330-322-330s-314 146-322 330c-6 10-8 22-8 34 0 2 0 4 0 6-12 20-20 46-20 72 0 6 0 10 0 14-30 12-72 64-102 136-38 90-44 176-14 192 22 10 56-14 86-62 12 52 44 96 86 134-44 16-74 44-74 76 0 50 80 92 180 92 90 0 164-34 178-78 4 0 18 0 20 0 14 44 90 78 178 78 100 0 182-42 182-92 0-32-30-60-76-76 44-38 74-82 86-134 32 48 64 72 86 62 30-16 24-102-14-192zM420 330c-54-6-66-106-40-154 10-16 26-30 46-30 36 0 58 46 58 90s-20 98-64 94zM612 330c-6 2-18 4-26 0-52-14-62-110-34-154 8-14 22-28 40-30 4-2 14-2 20 0 60 24 58 162 0 184zM598 212c-16-8-30 4-34 16-2 10-6 26 8 28 6-6 4-28 16-26s4 28 22 24c6-16 0-38-12-42zM452 202c-28 4-28 72 2 74s32-78-2-74z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"qq\"\n        ],\n        \"defaultCode\": 57402,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 59,\n        \"order\": 111,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57448,\n        \"name\": \"qq\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 192\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M544 798c-36-68-78-140-158-140-16 0-32 4-46 10l-28-56c34-28 88-50 158-50 108 0 164 52 208 118 28-58 40-134 40-230 0-238-74-360-250-360-172 0-244 122-244 360s72 358 244 358c28 0 52-4 76-10zM586 882c-38 10-78 16-118 16-228 0-452-184-452-448 0-268 224-450 452-450 234 0 454 182 454 450 0 150-70 270-170 348 32 50 66 82 114 82 50 0 70-40 76-70h66c4 40-16 212-204 212-114 2-174-64-218-140z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"quora\"\n        ],\n        \"defaultCode\": 57388,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 45,\n        \"order\": 112,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57449,\n        \"name\": \"quora\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 193\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M198 428l86-62c-20-170 84-296 84-296s-22 10-194 120c-172 110-174 154-174 154v446l156 234h236l-236-374c-50-74-30-174 42-222zM786 496c-82 50-190 30-248-50-56-78-42-188 32-250 2-4 6-6 10-8 4-4 6-6 10-8l252-180h-366l-22 14c-166 122-204 358-84 526l24 32c122 168 358 206 526 84l104-76v-256z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"raidcall\"\n        ],\n        \"defaultCode\": 57389,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 46,\n        \"order\": 113,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57450,\n        \"name\": \"raidcall\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 194\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M928 214c-214-244-540-92-540-92-18 8-30 14-40 22s-18 16-22 24c-14 30-24 60-32 88-38 50-66 110-76 176-38 54-62 118-66 184-92-24-152-54-152-54 52 30 102 54 152 70 0 32 4 64 12 96 20 70 62 126 116 170-32-36-56-78-70-124-12-42-14-84-10-126 10 4 22 6 34 10 46 140 168 244 318 268 54 24 110 30 162 14 26-10 48-22 68-38 6-6 12-12 18-18 102-54 178-150 204-266 0 6 0 8 0 8s80-234-76-412zM288 280c-8 38-12 68-14 88-16 14-30 30-44 48 12-50 30-96 58-136zM274 468c2 50 12 100 30 152 2 8 4 16 8 22-26-2-52-4-76-8-6-26-12-52-14-78 14-32 30-62 52-88zM202 626c4-16 8-34 14-50 2 18 4 38 10 56-8-2-16-4-24-6zM244 660c28 6 54 12 80 14 46 108 118 190 196 236-128-32-232-126-276-250zM810 868c-2-6-22 4-22 4-14 8-28 16-42 20-126 40-272-52-358-212 220 10 370-74 370-74s36 0 30-50c-8-50-44-12-44-12-122 80-254 104-374 102-10-22-18-44-26-66-18-54-26-106-28-158 42-40 98-72 160-90 56-16 114-20 168-12 0 0 10 6 8-20-4-26-22-30-22-30-62-12-130-10-196 8-42 14-80 32-116 56 4-30 12-60 20-86 0 0 10-28 54-50 60-24 244-84 362-34 202 86 242 290 248 396-10 132-84 244-192 308z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"ravelry\"\n        ],\n        \"defaultCode\": 57429,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 86,\n        \"order\": 114,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57451,\n        \"name\": \"ravelry\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 195\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 504c0-56-44-100-100-100-32 0-60 14-78 38-80-58-192-94-318-96l74-220 184 44c4 0 6 0 8 0 2 42 36 76 80 76s78-36 78-80c0-44-34-78-78-78-34 0-60 18-74 46 0 0-2-2-4-2l-202-48c-10-2-20 4-22 12l-86 250c-122 4-230 38-310 94-18-22-44-36-76-36-56 0-100 44-100 100 0 40 24 76 60 92-4 14-6 30-6 46 0 164 204 298 456 298s456-134 456-298c0-14-2-30-6-44 38-16 64-52 64-94zM278 584c0-40 34-74 74-74s74 34 74 74c0 40-34 74-74 74s-74-34-74-74zM678 788c-34 34-88 50-166 50s-132-16-166-50c-4-4-4-12 0-18 4-4 12-4 16 0 30 30 78 44 150 44 70 0 120-14 150-44 4-4 12-4 16 0 4 6 4 14 0 18zM674 658c-42 0-76-32-76-74 0-40 34-74 76-74 40 0 72 34 72 74 0 42-32 74-72 74z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"reddit\"\n        ],\n        \"defaultCode\": 57465,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 122,\n        \"order\": 115,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57452,\n        \"name\": \"reddit\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 196\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 706c0 0 0 0 0 0s0 0 0 0zM238 502c2-14 6-28 8-42 4-14 2-30 2-44v-78c0-40 0-78 0-116-8 0-18 2-24 4-24 8-44 14-62 24-74 36-130 100-154 188-22 82 0 170 34 224 8 12 18 30 28 38 10 0 18-8 24-14 14-8 28-18 40-28 6-4 10-10 16-14 40-34 68-86 88-142zM512 706c0 0 0 0 0 0s0 0 0 0zM318 648c-6-12-10-24-16-36-2-6-4-12-6-18v0c-6 12-12 22-18 32-10 20-22 38-34 54-18 22-36 44-56 60-10 10-22 18-32 28 0 0 0 2 0 2 6 2 12 6 18 8 14 6 28 12 42 16 52 14 116 10 164-4 12-4 40-12 48-20v0c-12-6-22-16-32-24-30-28-56-60-78-98zM1014 438c-22-90-78-152-152-190-18-8-38-16-62-22-6-2-16-4-24-4 0 38 0 76-2 116v76c0 16 0 32 2 46 4 14 8 28 10 42 20 56 48 108 88 142 6 4 10 8 16 14 12 10 26 20 40 28 6 4 14 14 24 14 10-8 20-26 28-38 34-54 56-142 32-224zM780 680c-12-16-24-34-34-54-6-10-12-20-18-32v0c-2 6-4 12-6 18-6 12-10 24-16 36-22 38-48 70-78 96-10 10-20 20-32 26v0c8 8 36 16 48 20 48 14 112 18 164 4 14-4 28-10 42-16 6-2 12-6 18-8 0-2 0-2 0-2-10-10-22-18-32-28-20-16-38-38-56-60zM676 506c4-12 6-26 8-40 4-12 2-30 2-46v-86c0-38 0-74 0-112-2 0-2 0-4 0-12 2-20 2-38 8-22 6-44 18-62 28-20 10-34 26-50 38-6 4-14 12-20 20 0 0 0 0 0 0s0 2 0 2c8 10 16 20 22 30 16 22 30 48 38 78 20 68 12 154-14 208-10 18-18 34-30 48-4 8-10 14-16 22 0 0 0 0 0 0s0 0 0 2c0 0 2 0 2 0 24-14 44-38 64-54 14-10 24-24 34-36 26-32 48-66 64-110zM512 704c-6-8-12-14-16-22-12-14-22-30-30-48-26-54-36-140-14-210 8-28 22-54 36-76 8-10 16-20 24-30 0 0 0-2 0-2s0 0 0 0c-6-8-14-16-20-20-16-12-32-28-50-38s-40-22-62-28c-18-6-26-6-38-8-2 0-2 0-4 0 0 38 0 74 0 112v86c0 16-2 34 2 46 2 14 4 28 8 40 16 44 38 78 64 110 10 12 20 26 34 36 20 16 40 40 64 54 0 0 0 0 2 0 0-2 0-2 0-2s0 0 0 0z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"renren\"\n        ],\n        \"defaultCode\": 57480,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 137,\n        \"order\": 116,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57453,\n        \"name\": \"renren\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 197\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M672 1024c22 0 44-4 58-10v-32c-44 0-88-30-120-64-54-58-126-154-186-260 100-24 172-116 172-208 0-138-106-202-246-202-72 0-130 4-184 4-48 0-98 0-128 0v34l46 8c32 8 52 22 52 98v480c0 76-20 90-52 96l-46 8v38c34-2 92-4 148-4s126 2 158 4v-36l-64-8c-34-6-50-20-50-96v-204c30 2 54 2 94 2 74 132 144 234 184 280 38 44 94 72 164 72M318 616c-42 0-60 0-88-4v-306c28-2 64-2 98-2 104 0 164 54 164 150 0 98-66 162-174 162M690 308c0-6-2-14-2-22-2-8-2-20-2-32s-2-26-2-42c0-16 0-32 2-44 0-12 0-22 2-30 0-8 2-16 2-22 2-6 4-12 6-18 10-32 26-56 52-72 24-18 52-26 88-26 18 0 34 2 48 6 16 4 28 10 40 18 10 6 20 16 28 26s14 20 20 30c2 4 0 8-2 10l-44 18c-4 2-6 0-8-4-10-18-18-30-34-40-14-8-26-12-48-12-24 0-34 4-48 14s-26 24-32 44c-2 4-2 8-4 12-2 6-2 12-4 20 0 8 0 18 0 28 0 12-2 24-2 40s0 28 2 40c0 12 0 20 0 28 2 6 2 14 4 18 0 6 2 10 4 14 6 20 16 30 28 40 14 8 30 14 52 14 20 0 40-6 52-14 12-10 22-22 28-38 2-6 4-16 6-26s2-20 2-36c0-2-2-4-4-4h-72c-4 0-6-2-6-6v-42c0-4 2-6 6-6h132c4 0 6 2 6 6v38c0 18 0 36-2 50-2 16-4 30-8 40-10 32-24 54-50 72-24 16-54 24-90 24-34 0-64-8-88-24s-40-40-52-72c-2-4-4-12-6-18\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"researchgate\"\n        ],\n        \"defaultCode\": 57390,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 47,\n        \"order\": 117,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57454,\n        \"name\": \"researchgate\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 198\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M0 574c0-102 0-206 0-308 106 0 210 0 316 0 6 2 10 2 14 2 12 2 24 4 34 6 24 4 46 14 66 26 18 10 36 22 52 38 36 36 70 72 106 108 2 0 4 2 4 2-28 30-58 58-86 88-34-34-68-70-102-102-14-16-30-26-48-34-14-6-28-8-44-8-62 0-122 0-184 0-2 0-4 0-4 0 0 20 0 40 0 60 2 0 2 0 6 0 56 0 112 0 170 0 4 0 10 0 14 2 16 2 32 8 44 22 44 44 88 88 132 132 4 4 10 10 16 16 10 8 22 12 34 12 108 0 214 0 322 0 0 0 2 0 4 0-76-78-152-154-228-230 30-28 58-56 86-86 0 0 2 2 4 2 94 96 190 192 284 286 4 4 6 6 8 10s2 8 4 14c0 2 0 2 0 4 0 0-2 2-2 2 0 10-4 16-10 22-26 26-54 54-80 80-8 8-16 12-26 14-4 2-6 2-12 2-132 0-266 0-398 0-4 0-6 0-8-2-16-2-30-8-42-20-48-46-94-96-142-144-14-12-28-18-46-18-86 2-172 2-258 2z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"residentadvisor\"\n        ],\n        \"defaultCode\": 57391,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 48,\n        \"order\": 118,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57455,\n        \"name\": \"residentadvisor\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 199\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1012 406c-98 70-194 140-294 212-10 6-10 12-8 24 38 114 76 230 114 346 0 2 2 6 4 12-6-4-10-8-14-10-96-70-194-140-290-210-8-6-16-8-24 0-100 72-198 144-300 216-2 2-4 2-8 6 14-44 28-86 40-128 26-80 52-158 78-238 2-8 0-12-8-18-98-70-194-140-292-212-4-2-6-6-10-10h26c116 0 232 0 346 0 12 0 18-2 22-14 36-116 74-232 112-350 0-2 2-4 4-10 2 6 4 8 4 12 38 116 76 232 114 348 4 12 8 14 22 14 120 0 240 0 360 0h14c-6 6-8 8-12 10z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"reverbnation\"\n        ],\n        \"defaultCode\": 57392,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 49,\n        \"order\": 119,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57456,\n        \"name\": \"reverbnation\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 200\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M274 886c0 76-60 136-136 136s-136-60-136-136c0-74 60-136 136-136s136 62 136 136zM2 544c128 0 248 50 338 140s140 212 140 340h196c0-372-302-676-674-676zM2 196c454 0 824 372 824 828h196c0-564-458-1024-1020-1024z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"rss\"\n        ],\n        \"defaultCode\": 57443,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 100,\n        \"order\": 120,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57457,\n        \"name\": \"rss\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 201\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M362 512c0 4-2 8-2 10l368 184c30-28 70-44 114-44 100 0 180 82 180 180 0 102-80 182-180 182s-180-80-180-182c0-4 2-6 2-10l-368-182c-30 26-70 42-114 42-102 0-182-80-182-180s80-182 180-182c44 0 86 18 116 44l366-184c0-2 0-6 0-10 0-100 82-180 182-180s180 80 180 180c0 100-80 182-180 182-44 0-86-16-116-44l-368 184c0 2 2 6 2 10z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"sharethis\"\n        ],\n        \"defaultCode\": 57393,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 50,\n        \"order\": 121,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57458,\n        \"name\": \"sharethis\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 202\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M988 620c8-32 10-68 10-102 0-266-214-482-480-482-28 0-56 2-82 6-44-26-94-42-150-42-154 0-278 126-278 280 0 50 14 100 38 140-6 32-10 64-10 98 0 266 216 480 482 480 30 0 58-2 88-8 38 22 84 34 132 34 154 0 278-126 278-280 0-44-10-86-28-124zM760 746c-22 32-54 56-98 74-42 18-92 26-150 26-68 0-126-12-172-36-32-16-60-40-80-70s-30-58-30-86c0-18 6-34 20-46s30-18 50-18c16 0 30 4 42 14s22 24 28 42c10 18 18 36 28 48s24 24 40 32c18 8 42 12 70 12 40 0 74-8 98-26 24-16 36-36 36-60 0-18-6-34-20-46-12-12-30-20-50-28-22-6-52-14-88-22-50-10-94-22-128-38-34-14-62-34-82-60s-32-58-32-96c0-36 12-70 34-98s52-50 94-64c40-16 86-22 140-22 44 0 82 4 112 14 32 10 60 24 80 40 22 16 38 34 48 52s14 38 14 56c0 16-6 32-20 46-12 14-30 20-50 20-16 0-30-4-40-12s-18-22-30-38c-12-24-26-42-42-54s-44-18-80-18c-36 0-64 6-84 20-20 12-30 28-30 46 0 10 2 20 10 28 6 8 16 16 28 22s26 12 38 14c14 4 36 10 68 18 38 8 74 16 106 26 32 12 60 24 82 38 24 16 42 34 54 58 14 22 20 52 20 84 0 40-12 76-34 108z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"skype\"\n        ],\n        \"defaultCode\": 57410,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 67,\n        \"order\": 122,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57459,\n        \"name\": \"skype\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 203\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M378 312c-66 0-120 50-120 112s54 112 120 112c66 0 120-50 120-112s-54-112-120-112zM662 310c-66 0-120 50-120 112 0 64 54 114 120 114 68 0 122-50 122-114 0-62-54-112-122-112zM978 488c-4 2-6 6-16 8v-396c0-56-36-100-86-100h-718c-50 0-96 44-96 100v396c0-2-6-6-10-8-32-22-50 8-32 36 38 44 106 100 214 144-114 382 274 444 268 246 0 4 0-110 0-192 12 2 20 4 28 6 0 82 0 190 0 186-6 198 382 136 270-246 106-44 174-100 210-144 20-28-2-58-32-36zM912 526c-134 74-254 62-318 60-48-4-64 18-66 48-10-8-22-18-34-28-2-2-2-4-4-6-12-10-26-16-54-14-62 2-190 14-314-58v-384c0-70 16-92 80-92h636c60 0 74 28 74 92z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"slideshare\"\n        ],\n        \"defaultCode\": 57454,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 111,\n        \"order\": 123,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57460,\n        \"name\": \"slideshare\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 204\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M288 202c94 0 140-56 134-106-6-42-46-80-124-82-64 0-106 48-112 94-6 48 24 96 102 94zM760 190c90-4 128-50 130-94 0-52-48-102-130-96-64 6-104 50-108 96-8 50 26 100 108 94zM816 392c-224 22-236 24-650 34-174 0-136 598 236 598 354 0 784-670 414-632zM412 918c-326 0-282-388-226-390 376-14 474-30 608-30 138 0-124 420-382 420z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"smugmug\"\n        ],\n        \"defaultCode\": 57428,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 85,\n        \"order\": 124,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57461,\n        \"name\": \"smugmug\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 205\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1003.52 750.592c-136.192-22.528-198.656-163.84-200.704-169.984-8.192-14.336-10.24-25.6-6.144-35.84 8.192-16.384 35.84-25.6 56.32-31.744 4.096-2.048 10.24-4.096 14.336-6.144 18.432-6.144 31.744-14.336 41.984-23.552 10.24-10.24 12.288-20.48 12.288-27.648 0-16.384-14.336-29.696-33.792-37.888-6.144-2.048-14.336-4.096-22.528-4.096-6.144 0-14.336 0-20.48 4.096-16.384 8.192-29.696 12.288-44.032 12.288-6.144 0-10.24-2.048-14.336-2.048 2.048-8.192 2.048-14.336 2.048-20.48v-4.096c4.096-68.608 10.24-156.672-12.288-205.824-16.384-35.84-37.888-66.56-64.512-90.112-20.48-22.528-46.080-37.888-73.728-50.176-48.128-22.528-94.208-25.6-115.712-25.6-2.048 0-2.048 0-2.048 0-6.144 0-18.432 0-18.432 0-22.528 0-68.608 4.096-117.76 25.6-27.648 12.288-52.224 27.648-73.728 50.176-25.6 23.552-46.080 54.272-62.464 88.064-23.552 52.224-18.432 138.24-14.336 207.872 0 8.192 2.048 16.384 2.048 22.528-4.096 2.048-10.24 4.096-18.432 4.096-12.288 0-27.648-4.096-44.032-12.288-6.144-2.048-12.288-4.096-18.432-4.096-10.24 0-22.528 4.096-29.696 8.192-12.288 8.192-20.48 18.432-22.528 27.648-2.048 8.192-2.048 22.528 14.336 35.84 8.192 8.192 22.528 16.384 37.888 22.528 4.096 2.048 10.24 4.096 16.384 6.144 18.432 6.144 46.080 14.336 54.272 31.744 4.096 10.24 2.048 22.528-4.096 35.84-2.048 0-2.048 0-2.048 0-2.048 4.096-18.432 41.984-52.224 79.872-18.432 22.528-37.888 41.984-62.464 56.32-25.6 18.432-56.32 27.648-86.016 33.792-12.288 2.048-22.528 12.288-20.48 23.552 0 4.096 0 8.192 2.048 12.288 4.096 10.24 16.384 20.48 33.792 29.696 22.528 10.24 56.32 18.432 100.352 25.6 2.048 4.096 4.096 14.336 6.144 22.528s4.096 16.384 6.144 23.552c4.096 8.192 10.24 20.48 27.648 20.48 6.144 0 14.336-2.048 23.552-4.096 12.288-2.048 29.696-6.144 54.272-6.144 12.288 0 23.552 2.048 37.888 4.096 23.552 4.096 46.080 18.432 71.68 35.84 35.84 25.6 77.824 56.32 140.288 56.32 2.048 0 4.096 0 6.144 0s4.096 0 8.192 0c62.464 0 104.448-29.696 140.288-56.32 25.6-18.432 48.128-31.744 71.68-35.84 14.336-2.048 25.6-4.096 39.936-4.096 20.48 0 37.888 2.048 52.224 6.144 10.24 2.048 18.432 2.048 23.552 2.048h6.144c12.288 0 22.528-6.144 25.6-18.432 2.048-8.192 4.096-16.384 6.144-23.552 2.048-8.192 4.096-18.432 6.144-22.528 44.032-8.192 77.824-16.384 100.352-25.6 18.432-10.24 29.696-18.432 33.792-29.696 2.048-4.096 2.048-8.192 2.048-12.288 2.048-13.312-8.192-22.528-20.48-24.576z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"snapchat\"\n        ],\n        \"defaultCode\": 57407,\n        \"grid\": 16,\n        \"attrs\": [\n          {}\n        ]\n      },\n      \"attrs\": [\n        {}\n      ],\n      \"properties\": {\n        \"id\": 64,\n        \"order\": 125,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57462,\n        \"name\": \"snapchat\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 206\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M888 112c-70-50-146-86-244-102v464l140-194h152l-176 244c0 0 40 64 64 102 24 40 48 50 84 50 10 0 10 0 24 0v120h-36c-76 0-124-14-158-68-22-34-94-146-94-146v212h-126v-794c-2 0-4 0-6 0-164 0-278 40-376 112-142 108-136 248-136 400s-6 292 136 400c98 74 212 112 376 112s278-40 376-112c142-108 136-248 136-400s6-292-136-400zM280 802c-80 0-144-14-198-68l82-82c26 26 74 36 116 36 50 0 74-16 74-46 0-12-4-22-10-30-8-6-18-12-34-14l-64-8c-46-6-80-22-102-46-24-24-36-60-36-104 0-94 70-164 188-164 74 0 130 18 174 62l-80 80c-32-32-76-30-98-30-44 0-62 24-62 48 0 6 2 16 10 22 6 6 18 14 36 16l62 10c46 6 80 20 102 42 26 26 38 66 38 114 2 104-90 162-198 162z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"songkick\"\n        ],\n        \"defaultCode\": 57482,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 139,\n        \"order\": 126,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57463,\n        \"name\": \"songkick\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 207\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M20 676h-20v-124h20zM72 716h-20v-194h20zM112 728h-20v-226h20zM154 738h-20v-226h20zM204 738h-20v-298h20zM246 738h-20v-338h20zM296 738h-20v-360h20zM338 738h-20v-370h20zM390 738h-22v-360h22zM430 738h-20v-348h20zM472 738h-22v-390h22zM522 738h-20v-420h20zM898 734c-2 0-350 0-350 0-8 0-16-6-16-14v-400c0-8 4-12 14-16 24-10 52-14 80-14 116 0 212 88 222 202 16-6 32-10 50-10 70 0 126 56 126 126s-56 126-126 126z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"soundcloud\"\n        ],\n        \"defaultCode\": 57415,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 72,\n        \"order\": 127,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57464,\n        \"name\": \"soundcloud\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 208\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M826 830c-12 20-40 28-60 14-170-102-382-126-632-68-24 4-48-10-54-34s10-48 34-54c274-62 508-36 698 80 22 12 28 40 14 62zM914 634c-16 26-50 34-76 18-194-118-488-152-718-84-28 10-60-8-70-36-8-30 8-62 38-70 262-80 586-42 808 94 26 18 36 52 18 78zM1014 406c-18 32-60 42-92 24-232-138-614-150-836-84-34 12-72-8-84-44-10-36 10-74 46-84 254-78 676-62 944 96 32 20 42 60 22 92z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"spotify\"\n        ],\n        \"defaultCode\": 57416,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 73,\n        \"order\": 128,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57465,\n        \"name\": \"spotify\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 209\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M794 0h-564c-72 0-130 60-130 136v44h824v-44c0-76-58-136-130-136zM100 664v44c0 76 58 136 130 136h352v180l174-180h38c72 0 130-60 130-134v-44h-824zM100 228v170h824v-170zM100 448v170h824v-170z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"stackexchange\"\n        ],\n        \"defaultCode\": 57483,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 140,\n        \"order\": 129,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57466,\n        \"name\": \"stackexchange\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 210\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M696 942h-510l2-344h-76l-2 426h668v-430h-82zM236 798h398v82h-398zM246 646l402 38-8 88-402-38zM282 472l390 110-24 84-388-110zM378 276l344 208-44 76-346-210zM738 468l-236-328 72-50 234 328zM760 14l86-14 68 398-88 14z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"stackoverflow\"\n        ],\n        \"defaultCode\": 57439,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 96,\n        \"order\": 130,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57467,\n        \"name\": \"stackoverflow\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 211\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M306 776c-2 52-2-6-2 8v2c20 56 90 142 176 190 2 0 2 2 4 2 0 0 2 0 2-2 2 0 4-2 4-4 0-36 0-50 0-194-10 6-184-2-184-2zM534 754c0 188 0 174 0 218 0 2 0 4 2 4s2 2 4 2c0 0 2 0 2-2 88-48 154-124 174-180 0 0-66 4-152-76-16 28-18 26-30 34zM486 114l-170-66h-4l-176 32c-2 0-4 2-4 4 0 4 0 6 2 6 0 0 28 12 60 28 32 18 68 42 80 64 6 10 2 0 6 16l208-2c0-64 0-78 0-78 0-2 0-4-2-4zM890 80l-176-32h-4l-174 66c-2 0-2 2-2 4 0 0 0 80 0 88l22 26c6-6 22-38 58-38 34 0 76 0 132 0 38-54 146-102 146-102 2-2 2-4 2-6 0-4-2-6-4-6zM78 328h284l38 36c0 0 2 0 4 0 0 0 2 0 4-2l98-110c2-2 2-4 2-6-2-2-4-2-6-2 0 0-354 0-366 0-16 0-30 2-42 12-14 10-20 26-20 54 0 12 0 12 0 12 0 2 2 6 4 6zM1018 248h-408l-72 70c-2 2-2 4-2 6 2 2 4 4 6 4h324l16 22c2 2 4 2 4 2 2 0 2 0 4 0l132-94c2-2 4-6 2-8s-4-2-6-2zM884 678c-10 2-22 2-34 2-88 0-172-70-180-172-2-20-2-18-2-34 0-44 4-78 6-96 0-2 0-4 0-4-2-2-2-2-4-2h-144c-2 0-4 0-4 4-8 20-20 60-20 114 0 32 4 46 16 84 28 86 132 168 214 168 126 0 156-44 156-58 0-2 0-4-2-4 0-2 0-4-2-2zM278 374l-4-2h-164c-2 0-4 2-6 4 0 2 0 4 2 6 0 0 220 254 226 262 0 2 0 2 0 2s-2 2-2 2c-4 0-90 0-130 0-24 0-42-10-52-18s-14-16-14-16c-2-2-2-2-4-4-4 0-4 0-6 2l-120 112c-4 4-4 6-4 8 2 2 4 2 6 2 0 0 422 0 454 0 26 0 44-28 44-56 0-10-4-20-10-28-16-22-216-274-216-276zM386 422c4 2 6 2 10 2h2c16-2 30-8 42-20l12-14c-8 30-12 64-12 98 0 2 0 4 0 6-18-22-36-48-54-72z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"starcraft\"\n        ],\n        \"defaultCode\": 57484,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 141,\n        \"order\": 131,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57468,\n        \"name\": \"starcraft\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 212\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M316 626c0 0 2-58 14-76s26-32 44-42c18-8 30-12 44-20 0 0 4-2 8-4 12-8 34-22 36-36 0-14 0-14 0-22 0-6-4-22-6-26-6-12-14-4-18-20 0-4-2-26 0-28 0-4 4-6 4-6s0-12 0-18c0-4 0-28 10-42 12-14 16-24 58-24 40 2 46 14 54 24 8 14 10 40 10 58 0 4 4-4 4 8 2 6 0 20 0 28-2 16-12 6-18 22-2 8-2 18 0 30 0 12 0 16 8 26 6 10 16 18 34 26h2c20 8 38 14 54 26s20 16 26 28c4 12 8 42 8 52 2 12 4 26 4 26s4-24 18-34c14-12 16-14 34-22 16-8 14-4 32-14s24-14 28-20c4-6 6-16 2-22s-4-14-12-18c-10-8-8-22-14-26s-10-6-10-12c-2-8-4-16-2-32 2-14 2-8 4-14s4-22 6-30c4-6 6-16 12-22s20-22 50-26c18-2 30 0 44 4 16 6 34 28 38 40s4 18 4 28c0 2 0 6 0 16 0 4 4 8-2 38-4 10-4 14-14 22-6 4-8 14-14 18-8 6-6 16-4 26s8 10 18 16c10 6 60 28 74 48 12 20 30 30 34 88 4 20 2 24 2 46s2 26 2 46h-330c0 0-6-66-12-56-8 10-18 58-18 58h-326c0 0-10-48-14-58-4-6-8 58-8 58h-318c0 0 2-26 4-40 2-22 2-48 8-68 6-22 6-32 18-44 14-10 22-18 32-24 18-8 44-28 26-76-14-32 2-80 20-108 18-26 26-48 64-48s66 42 74 70c6 30 10 66 2 92-10 30 0 46 42 68 16 8 22 34 26 42z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"stayfriends\"\n        ],\n        \"defaultCode\": 57485,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 142,\n        \"order\": 132,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57469,\n        \"name\": \"stayfriends\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 213\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M892 318c0 84-68 150-150 150-84 0-152-66-152-150 0-82 68-150 152-150 82 0 150 68 150 150zM0 798l58 22c20 94 104 166 204 166 110 0 198-84 210-190l268-196c156 0 282-126 282-280 0-156-126-282-282-282-154 0-280 124-280 278l-176 252c-6-2-14-2-22-2-38 0-76 10-106 30l-156-64v266zM740 130c104 0 188 86 188 190s-84 188-188 188c-104 0-188-84-188-188s84-190 188-190zM262 622c86 0 154 68 154 154s-68 154-154 154c-58 0-110-32-136-82 26 10 50 20 76 30 62 26 134-4 160-68 26-62-6-134-68-158l-64-26c10-2 22-4 32-4z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"steam\"\n        ],\n        \"defaultCode\": 57399,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 56,\n        \"order\": 133,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57470,\n        \"name\": \"steam\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 214\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 342l-288 166v-334l288 168 296-172-296-170-296 170v342l296 170 288-166v334l-288-168-296 172 296 170 296-170v-342z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"storehouse\"\n        ],\n        \"defaultCode\": 57460,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 117,\n        \"order\": 134,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57471,\n        \"name\": \"storehouse\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 215\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M442 0l298 584h-178l-118-234-120 234h-176zM654 1024l-224-440h134l88 176 92-176h132z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"strava\"\n        ],\n        \"defaultCode\": 57486,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 143,\n        \"order\": 135,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57472,\n        \"name\": \"strava\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 216\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M832 118c-74 16-192 26-326 26s-254-10-326-26c-46 10-68 12-62 36 8 32 166 62 388 62s392-30 400-62c6-24-28-26-74-36zM834 106c-142 20-256 24-334 24-52 0-104 0-174-8-56-6-142-18-142-18 2-28 4-64 40-86 20-12 48-16 58-16 58-2 402-2 462 0 8 0 38 4 56 16 38 22 38 58 42 86 0 0-86 12-144 18-70 8-122 8-172 8-78 0-194-4-334-24M862 268c-4 0-10 0-18-2 0 0-54-6-110 20-4 2-10 4-14 8 0 0-8 8-14 18-4 8-56 222-74 252s-58 100-104 140c-68 54-170 98-218 104-24 4-48 8-74 10-8 0-28 0-52 6-6 0-18 18-20 26s-4 34 2 68c4 24 10 52 32 76 24 20 50 26 66 26 6 2 12 4 22 2h472c58 0 104-46 104-102z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"streamjar\"\n        ],\n        \"defaultCode\": 57487,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 144,\n        \"order\": 136,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57473,\n        \"name\": \"streamjar\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 217\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 296c-30 0-54 24-54 54v328c-2 124-104 226-230 226s-228-104-228-230c0-2 0-142 0-142h176v140c0 30 24 54 54 54s54-24 54-54v-330c4-122 104-220 228-220s224 98 228 220v74l-104 30-70-32v-64c0-30-24-54-54-54zM1024 674c0 126-102 230-228 230s-228-102-230-228v-142l70 32 104-32v144c0 30 24 54 54 54s54-24 54-54v-146h176c0 0 0 140 0 142z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"stumbleupon\"\n        ],\n        \"defaultCode\": 57467,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 124,\n        \"order\": 137,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57474,\n        \"name\": \"stumbleupon\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 218\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M382 638c-42 64-72 128-94 176 0 2-16 40-20 52-6 14 2 30 16 36 12 4 50 18 52 20 50 16 116 36 190 48-42-42-78-94-104-150s-38-118-40-182zM528 374c0 0 0 0 0 0-2-4-6-14-8-16-144-296-464-284-514-152-40 100 130 342 522 168zM592 346c0 0 0 0 0 0 222-98 190-268 134-290-78-30-218 84-138 282 2 2 4 6 4 8zM998 562c-32-74-94-128-166-154-6-2-14-4-22-4-36 0-72 30-76 70-4 64 8 128 36 192 28 62 66 114 118 154 12 10 28 14 44 14 30 0 58-16 70-42 30-72 30-154-4-230zM686 704c-36-80-50-160-44-238 2-22 10-44 20-64-2 2-6 2-6 2-32 8-64 22-92 40-40 28-76 68-92 114-4 12-8 26-8 40-6 62 4 128 32 190 28 60 66 110 114 148 30 22 84 38 126 38 40 0 80-12 116-30 12-6 36-22 38-24-22-4-42-14-58-28-62-46-112-110-146-188z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"swarm\"\n        ],\n        \"defaultCode\": 57435,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 92,\n        \"order\": 138,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57475,\n        \"name\": \"swarm\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 219\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M472 858c226-38 396-196 396-386 0-218-224-394-500-394-18 0-38 0-56 2 24 12 48 32 68 56 158 6 292 84 344 192 2 2 4 4 4 6 2 4 4 10 6 14 10 26 16 56 16 86 0 126-104 238-250 282 4 6 8 16 2 26l-2 2-4 2c-12 8-12 18-10 34 2 8 6 18 6 28 2 12 0 24-6 36-2 4-8 8-14 14zM502 700c-2 2-2 4-4 4l-4 4c-2 0-2 2-2 2 78-36 132-102 132-176s-52-138-128-174c2 8 2 16 2 24s-2 16-6 22c-2 2-2 4-4 6s-4 4-6 6c-6 8-6 12-6 18l2 6c26 42 56 86 84 130l2 2c6 14 0 30-12 38-6 6-12 8-18 10-6 0-12 2-16 2-10 2-14 4-16 10s-2 12 0 18c2 2 2 6 4 10s4 8 6 10l2 4v4c-4 12-8 16-12 20zM286 844c116 22 154 4 164-12 18-36-28-76 14-102 6-10-6-14-10-20-8-16 18-18 18-34-8-16-16-30-10-50 10-24 38-14 56-28 6-6 10-16 6-24-28-42-58-88-86-132l-2-8c-2-24 22-32 24-56-2-68-82-266-196-290 0 0 0 102 0 230 92 70 144 184 124 312-10 78-48 152-102 214zM410 8c-64 0-128 8-186 22l-40 12c-28 10-42 26-48 48l-44 220c-54 22-92 74-92 136 0 82 66 148 148 148s148-66 148-148c0-54-28-100-70-126v-274c48-12 98-18 150-18 320 0 580 214 580 476 0 264-260 476-580 476-76 0-150-12-218-34-10 6-18 10-26 14 84 36 178 56 280 56 338 0 612-226 612-504s-274-504-614-504zM256 442c0 60-50 108-108 108-60 0-110-48-110-108 0-62 50-110 110-110s108 50 108 110z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"teamspeak\"\n        ],\n        \"defaultCode\": 57488,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 145,\n        \"order\": 139,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57476,\n        \"name\": \"teamspeak\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 220\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-282 0-512 230-512 512s230 512 512 512c282 0 512-230 512-512s-230-512-512-512zM638 676l46-112h-342l44 112-332-164 332-164-42 106h336l-40-106 332 164z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"teamviewer\"\n        ],\n        \"defaultCode\": 57489,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 146,\n        \"order\": 140,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57477,\n        \"name\": \"teamviewer\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 221\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1024 0v708c-174 106-382 128-574 92-96 50-182 120-276 174 6-74 16-146 24-220 2-30 12-68-20-86-118-94-198-248-180-402 10-100 62-184 124-266zM846 130c-78-58-180-84-276-80-110 2-220 42-294 122-42 44-74 104-74 166-4 86 44 168 110 218 140 106 346 116 498 30 86-48 154-134 156-234 2-90-48-172-120-222z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"technorati\"\n        ],\n        \"defaultCode\": 57464,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 121,\n        \"order\": 141,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57478,\n        \"name\": \"technorati\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 222\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M950 80l-910 356c0 0-44 14-40 42s38 40 38 40l226 76c18 58 72 244 82 280 12 40 20 48 26 50 2 0 4 0 4 0 16 2 28-8 28-8l144-142 228 174c62 26 86-30 86-30l162-816c0-54-74-22-74-22zM836 266c-16 14-394 360-432 396l-22 188c-2 18-18 18-26 4-16-52-54-190-74-252l536-356c0 0 30-20 30 0 0 0 0 8-12 20z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"telegram\"\n        ],\n        \"defaultCode\": 57490,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 147,\n        \"order\": 142,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57479,\n        \"name\": \"telegram\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 223\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M300 556c0 22-18 42-42 42-22 0-42-20-42-42 0-24 20-42 42-42 24 0 42 18 42 42zM808 556c0 22-20 42-42 42-24 0-42-20-42-42 0-24 18-42 42-42 22 0 42 18 42 42zM258 432c-32 0-64 12-88 36-22 24-36 54-36 88 0 32 14 64 36 88 24 22 56 36 88 36 70 0 124-56 124-124s-54-124-124-124zM258 642c-22 0-44-10-60-26s-26-38-26-60c0-24 10-46 26-62s38-24 60-24c48 0 86 38 86 86s-38 86-86 86zM766 432c-34 0-64 12-88 36s-36 54-36 88c0 32 12 64 36 88 24 22 54 36 88 36 68 0 124-56 124-124s-56-124-124-124zM766 642c-24 0-46-10-62-26s-24-38-24-60c0-24 8-46 24-62s38-24 62-24c46 0 86 38 86 86s-40 86-86 86zM966 392c10-30 24-64 44-84h-168c-4 0-6-2-10-2-8-14-72-96-324-96-278 0-326 98-326 98h-178c22 20 38 62 48 92-32 44-52 98-52 156 0 142 116 258 258 258 80 0 150-36 198-92l58 82 52-84c46 58 118 94 200 94 142 0 258-116 258-258 0-62-22-120-58-164zM258 764c-114 0-208-94-208-208 0-116 94-208 208-208 116 0 208 92 208 208 0 114-92 208-208 208zM262 312c0 0 66-76 244-76h18c176 0 244 76 244 76s-190-32-254 202c-62-234-252-202-252-202zM766 764c-116 0-208-94-208-208 0-116 92-208 208-208 114 0 208 92 208 208 0 114-94 208-208 208z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"tripadvisor\"\n        ],\n        \"defaultCode\": 57513,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 170,\n        \"order\": 143,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57480,\n        \"name\": \"tripadvisor\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 224\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M484 586l-362-4c-6 0-10 0-14 4s-6 8-10 12-16 14-26 18c-22 4-44 0-60-14-14-14-16-36-6-54 16-30 62-40 90-18 8 8 14 16 16 28 0 4 2 4 6 4l368-4c6 0 4 0 4 4 0 6 0 12 0 20 0 4-2 4-6 4zM662 586c10-28-2-58-24-74-38-24-92-12-116 24-14 22-16 48-2 70 14 20 38 28 62 30-2 0-2 0 4 0 10 0 8 0 4 0 32-2 62-22 72-50zM984 524c-24-2-46 12-52 34-2 4-2 4-6 4l-238-2c-2 0-2 6-2 8 0 4 0 8-2 12 0 4 0 4 4 4l240-4c4 2 6 12 8 16 4 4 8 10 12 14 10 8 24 10 36 8 22-2 40-22 40-46s-16-44-40-48zM578 414c4 0 4 2 4 6l-4 56c-2 4 2 6 6 6 6-2 12-2 18 0 4 0 4-2 4-6 0-18-2-38-2-58 0-6 8-6 14-8 4-4 10-8 14-12 8-8 12-20 12-34 2-22-12-42-34-50-20-8-44 0-58 18-22 28-10 70 26 82zM830 374c0 2 2 2 2 2s-2 0-2-2zM666 510c2 4 6 8 8 10 2 4 6 2 8 0l122-78c2 0 4 2 8 4 12 6 28 6 40-4 28-22 12-66-22-68-24 0-42 22-38 46 2 4 0 6-2 6-44 24-86 50-128 76-4 4 2 6 4 8zM388 672c0-14 0 6 0 0zM512 628c-4-4-6-8-8-10-2-4-4-4-6-2-14 10-28 18-44 28-2 2-4 2-6 0-12-10-26-12-40-4-12 6-20 18-20 32-2 26 24 44 46 38 20-6 32-24 28-42 0-4 0-4 4-6 16-8 32-18 48-28 4-2 0-4-2-6zM398 458c2 0 4-2 6-2 4 0 6 2 8 4l86 68c4 2 4 2 6-2 4-4 8-10 12-14s-4-6-8-8l-82-60c-6-4-12-6-10-14 0 0 0-2 0-2-2-28-42-38-56-12-6 12-4 28 6 36 8 8 20 12 32 6zM690 632c-8 2-12 0-18-6-2 0-2-2-4-2-2-4-4-4-8 0-2 2-6 6-10 8-2 2-2 2 2 4 4 4 10 6 16 10 4 2 2 6 2 10s0 8 2 12c4 6 10 12 20 12 14 2 24-10 24-24 0 0 0 0 0 0v0c0-14-12-26-26-24z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"tripit\"\n        ],\n        \"defaultCode\": 57452,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 109,\n        \"order\": 144,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57481,\n        \"name\": \"tripit\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 225\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M366 86c26 60 52 120 80 180 2 6 8 30 18 26 20-8 16-6 10-26-10-30-22-58-30-86-16-44-36-88-50-132-4-12-18-58-38-46-32 18 0 60 10 84 4 8-4-10 0 0zM716 390c-22 0-32 34-14 46 6 4 12 6 14 6 10 0 26-16 26-28 0-6 10-20 36-48 20-20 60-62 90-92 28-30 70-74 92-98 52-54 52-54 46-66-2-6-10-12-16-12-2-2-2-2-4-2-8 2-18 12-54 54-10 12-26 30-34 40-8 8-26 28-38 44-14 14-34 38-44 50-36 40-56 64-74 86-12 14-20 20-26 20zM712 586c56-24 124-72 146-104 6-6 12-14 14-18 18-20 30-68 22-96-4-18-24-50-32-50-6 0-56 56-58 64-4 16 4 20 34 20s28 4-6 16c-44 16-50 30-34 64 4 10 8 18 6 18 0 2-10 0-20-4-24-6-34-8-48-2-12 6-30 40-30 54 0 6-2 10-4 12-6 2-12-14-12-28 0-4-6-16-14-24-14-16-14-16-40-16-14 0-32 2-42 4l-16 2 24-24c20-20 24-24 24-40 0-20-10-34-32-52l-12-12 16 4c56 10 82-6 90-58 0-10 4-18 4-18 2 0 8 10 12 20 12 26 20 32 36 20 12-8 46-46 48-54 4-10-46-16-102-16-44 0-92 4-120 10-60 16-74 20-72 28 2 4 6 14 10 22 8 26 14 38 18 38 6 0 22 22 22 28 0 4-4 12-10 18-12 12-28 14-42 2-6-8-8-12-6-24 2-16-2-26-22-70l-4-8-30 14c-88 44-144 98-162 160-4 8-4 18-4 18 2 0 34 2 72 4 62 2 74 2 80-2 12-10 20-12 34-6s16 14 14 30c-2 18-32 28-46 14-6-6-14-6-76-4-36 0-68 2-70 4-2 4 12 26 28 40 30 26 76 44 138 50 76 8 188-12 274-48zM950 668c-2-22-6-58-10-78-2-20-6-52-8-68-2-22-4-32-6-32s-4 4-6 14c-2 20-26 140-30 146 0 2-4 18-6 34-4 14-8 36-10 48-2 10-8 38-12 60-10 48-16 68-20 68-2 0-48-42-102-94l-96-96-8 14c-4 10-8 24-10 34 0 10-4 20-6 24-2 2-8 26-16 52-6 24-14 54-18 64-2 12-8 32-12 48-8 32-14 34-34 12-18-20-68-78-74-84-2-2-14-14-26-28s-26-30-30-34c-4-6-20-22-34-38s-28-32-30-34c-2-2-14-14-24-26-20-22-22-20-10 10 4 10 12 26 14 34 4 8 8 18 12 26 6 10 12 26 28 64 4 8 10 20 12 26 4 12 16 36 26 60 20 48 26 58 44 76 24 22 60 40 98 48 60 12 142 6 208-16 66-20 108-46 150-88 34-34 34-34 46-58 14-26 16-50 10-102-2-26-8-64-10-86zM230 508c-8-2-40-2-76-2-58 0-132 2-134 4-6 8-6 26 0 32 4 4 26 4 114 2 62-2 112-4 112-4 2 0 2-8 0-16-2-10-4-14-16-16z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"triplej\"\n        ],\n        \"defaultCode\": 57441,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 98,\n        \"order\": 145,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57482,\n        \"name\": \"triplej\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 226\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M196 420v-146c40-12 76-32 104-56s52-54 68-88c18-34 30-78 36-130h146v258h244v162h-244v262c0 60 4 98 10 114 6 18 18 30 34 40 24 14 50 22 78 22 52 0 104-18 156-52v162c-44 20-84 36-120 44-34 8-74 12-114 12-48 0-88-6-124-18s-68-28-92-50c-26-22-44-46-54-70s-14-60-14-108v-358z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"tumblr\"\n        ],\n        \"defaultCode\": 57423,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 80,\n        \"order\": 146,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57483,\n        \"name\": \"tumblr\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 227\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M734 890h-200l-134 134h-132v-134h-246v-712l68-178h912v624zM912 578v-490h-734v646h200v134l134-134h244zM668 268v266h88v-266zM422 534h90v-266h-90z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"twitch\"\n        ],\n        \"defaultCode\": 57424,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 81,\n        \"order\": 147,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57484,\n        \"name\": \"twitch\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 228\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M920 304c0 8 0 18 0 26 0 278-212 598-598 598-118 0-230-34-322-94 16 2 34 2 50 2 98 0 190-32 262-90-92 0-170-62-198-146 14 4 26 4 40 4 20 0 38-2 56-6-96-20-168-106-168-206 0-2 0-2 0-4 28 16 60 26 94 26-56-36-94-102-94-174 0-38 12-74 30-106 102 128 258 212 432 220-4-16-6-32-6-48 0-116 94-210 210-210 62 0 116 26 154 66 48-10 94-26 134-50-16 48-50 90-92 116 42-6 82-16 120-34-28 42-64 80-104 110z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"twitter\"\n        ],\n        \"defaultCode\": 57510,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 167,\n        \"order\": 148,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57485,\n        \"name\": \"twitter\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 229\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M160 410v118c0 40-16 56-58 56-40 0-58-16-58-56v-122h-38c-4 0-6 2-6 4v120c0 66 42 90 102 90s102-24 102-90v-124h-38c-4 0-6 0-6 4zM732 440c2 0 4-2 6-4l10-28c2-2 0-4-2-4h-158c-14 0-20 4-20 14v184c0 8 4 12 16 12h148c2 0 4 0 6-2l10-30c2-2 0-2-2-2h-134v-38c0-12 6-18 26-18h58c4 0 6 0 6-2l12-28c0-2 0-2-2-2h-100v-52zM452 504c18-8 26-24 26-46 0-46-38-52-78-52h-88c-16 0-22 4-22 14v184c0 8 4 12 16 12h110c42 0 72-16 72-58 0-26-12-48-36-54zM334 440h70c24 0 30 8 30 26s-6 26-30 26h-70zM412 582h-78v-40c0-12 6-18 26-18h52c24 0 32 10 32 28 0 20-8 30-32 30zM1024 612l-48-82c24-6 42-22 42-60 0-52-30-64-84-64h-90c-14 0-20 4-20 14v190c0 4 2 6 6 6h38v-62c0-14 8-18 26-18h40l42 76c2 2 4 4 8 4h38c2 0 2-4 2-4zM942 502h-74v-62h74c26 0 32 10 32 32 0 20-6 30-32 30z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"uber\"\n        ],\n        \"defaultCode\": 57491,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 148,\n        \"order\": 149,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57486,\n        \"name\": \"uber\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 230\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M918 324c-18-72-48-136-98-188-72-70-174-106-308-106-132 0-234 36-306 106-50 52-80 116-98 186-60 10-108 64-108 128v132c0 72 58 130 130 130v-152l86 50c6 2 12 4 18 4h170c10 0 20-4 30-12 0-2 0-2 2-2l52-64c0 0 10-12 24-12 8 0 16 2 24 10l52 66c2 0 2 2 2 2 10 8 20 12 30 12h170c6 0 12-2 18-4l86-50v114l-242 282h-146c-10 0-18 8-18 18s8 18 18 18h162l248-284c62-10 108-64 108-128v-130c0-62-46-116-106-126zM498 522l2-2c0 2-2 2-2 2zM524 522c2 0 2 0 0 0zM790 284h-556c-6 0-12 0-18 4l-70 40c16-64 44-122 88-166 64-62 154-94 278-94s216 32 280 94c44 44 70 102 88 166l-72-42c-6-2-12-2-18-2z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"ventrilo\"\n        ],\n        \"defaultCode\": 57492,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 149,\n        \"order\": 150,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57487,\n        \"name\": \"ventrilo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 231\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M198 800c24 44 58 78 98 102 28 16 58 26 88 32 266-104 234-606 232-632-10-30-56-158-142-302 0 0 120 80 142 300 0 0 0 2 0 2 2 4 2 6 2 6 156 416-182 630-184 630 50 0 94-12 134-36 42-24 74-58 100-102 24-44 36-90 36-142 0-40-8-78-22-114 24-4 54-14 84-34 18 46 28 94 28 146 0 98-34 184-102 258-66 74-154 110-258 110-108 0-194-36-262-110-66-74-100-160-100-258 0-96 32-182 96-252 70-80 158-118 266-118 44 0 86 6 124 20-12 24-24 54-26 86-32-12-64-18-100-18-74 0-136 28-190 82-54 56-80 124-80 202 0 52 12 98 36 142zM674 388c0 0 206-112 214-208 0 0-64 142-238 182 0 0-62-98 18-178 0 0 28-32 108-52 0 0 80-16 124-108 0 0 90 124 34 290 0 0-28 74-84 108-44 26-108 34-176-34zM434 938c0 0-2 0-2 0s0 0 0 0c2 0 2 0 2 0z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"viadeo\"\n        ],\n        \"defaultCode\": 57509,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 166,\n        \"order\": 151,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57488,\n        \"name\": \"viadeo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 232\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M590 258c-12-2-24 8-24 22-2 12 8 24 22 26 80 4 118 44 122 128 2 12 12 22 26 22 0 0 0 0 0 0 14 0 24-12 24-24-6-110-64-168-170-174zM860 498c12 0 24-10 24-22 2-96-26-176-86-240-58-64-140-100-244-110-14 0-24 10-26 24 0 12 10 24 22 26 94 6 162 36 212 92 52 54 76 122 74 206 0 12 10 24 24 24zM866 142c-94-92-214-140-356-142-14 0-24 12-24 24 0 14 10 26 24 26 128 0 238 44 324 128s130 198 130 348c0 12 12 24 26 24 12 0 24-12 24-24-4-162-52-292-148-384zM956 802c0 0-56-46-84-66-26-20-66-44-88-58-42-22-84-8-100 16l-36 44c-20 22-54 20-54 20-250-64-316-318-316-318s-4-34 18-52l46-36c22-18 36-60 14-100-12-22-38-64-56-90-22-26-68-82-68-82-22-26-54-32-90-14 0 0 0 0 0 0-34 18-64 42-92 74 0 0 0 0 0 2-22 24-34 50-38 76 0 2 0 6 0 10 0 12 0 22 4 34h2c10 38 38 102 96 210 38 68 76 126 116 174 20 26 42 52 70 78 0 2 2 4 2 4 2 2 2 2 4 4 0 0 2 2 2 2 2 2 2 2 4 4 26 26 52 48 78 68 48 40 106 78 176 116 106 60 170 86 208 96l2 2c10 2 20 6 32 6 4 0 8 0 12-2 24-4 50-16 74-36 0 0 0 0 2-2 32-28 56-60 74-92 0 0 0 0 0-2 18-34 12-66-14-90z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"viber\"\n        ],\n        \"defaultCode\": 57493,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 150,\n        \"order\": 152,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57489,\n        \"name\": \"viber\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 233\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M908 408c0 0 96-48 64-186-30-154-216-124-216-124l-378 66-74 536-250-476-54 8c-2 0 0 224 0 224l252 472 180-32 32-244 38 230c0 0 302-52 398-70 92-32 124-76 124-76s0-176 0-268c-32-48-116-60-116-60zM558 260c0-2 146-28 146-28s116-28 124 66c20 94-100 102-100 102l-142 28zM806 702l-166 30-34-196c-2 0 166-30 166-30s118-32 136 76c26 110-102 120-102 120z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"viewbug\"\n        ],\n        \"defaultCode\": 57494,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 151,\n        \"order\": 153,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57490,\n        \"name\": \"viewbug\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 234\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M662 292c-24 0-50 6-76 18 50-166 146-246 288-240 106 2 156 70 150 204-6 100-74 236-210 410-138 180-256 272-352 272-60 0-110-56-152-166-28-102-56-202-82-304-32-110-64-164-100-164-8 0-34 16-80 48l-48-62c50-46 100-90 150-134 66-58 118-88 152-92 78-8 128 46 146 164 20 126 34 204 42 234 22 104 48 156 76 156 22 0 54-34 96-100 42-68 66-120 70-156 6-58-18-88-70-88z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"vimeo\"\n        ],\n        \"defaultCode\": 57506,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 163,\n        \"order\": 154,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57491,\n        \"name\": \"vimeo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 235\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M730 154c-44 0-72 40-72 116 0 158 100 248 228 248 24 0 46-2 76-10v122c-40 10-86 14-122 14-86 182-242 336-292 366-34 18-64 20-100-2-64-38-304-240-384-854h174c44 378 150 562 268 704 66-64 128-150 176-250-116-58-186-188-186-340s88-268 238-268c146 0 226 92 226 248 0 58-12 124-34 176-110 22-150-48-150-48 8-26 20-72 20-114 0-72-26-108-66-108z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"vine\"\n        ],\n        \"defaultCode\": 57481,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 138,\n        \"order\": 155,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57492,\n        \"name\": \"vine\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 236\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M990 706c-30-40-56-64-94-100-16-16-38-32-40-54-2-30 26-58 40-78 2-2 4-4 6-6s2-2 4-4c0-2 2-2 2-4 2-2 2-4 4-4 0-2 2-2 2-2 2-2 2-4 4-6 26-34 52-64 78-104 8-14 34-64 26-84-12-24-74-16-108-16-42 0-88-8-118 4-18 6-30 46-40 68-16 34-30 62-46 88 0 2-2 4-4 6 0 0 0 0 0 0 0 2-2 4-4 6 0 0 0 0 0 0-2 4-4 8-6 10 0 2-2 2-2 2 0 2-2 2-2 4-2 2-2 2-2 4-2 0-2 2-4 4 0 0-2 2-2 4-2 0-2 2-2 2-2 2-4 4-6 8-14 20-28 44-54 48-2-2-2-2-4-2 0 0 0-2 0-2-2 0-2 0-2 0 0-2-2-2-2-2s0 0-2-2c0 0 0 0 0 0s0-2-2-2c0 0 0 0 0 0 0-2-2-2-2-2s0-2 0-2c0 0-2 0-2-2 0 0 0 0 0 0 0-2 0-2-2-2 0 0 0-2 0-2s0 0 0-2c0 0-2 0-2 0 0-2 0-2 0-4 0 0 0 0 0 0-2-2-2-2-2-2 0-2 0-2 0-2s0-2 0-2c0 0 0-2-2-2 0 0 0-2 0-2s0 0 0-2c0 0 0 0 0-2 0 0 0 0 0 0 0-2 0-2-2-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-4 0 0 0 0 0 0 0-2 0-2 0-4 0 0 0 0 0 0 0-2 0-2 0-4 0 0-2 0-2-2 0 0 0-2 0-2s0-2 0-2c0 0 0-2 0-2s0-2 0-2c0 0 0-2 0-2 0-2 2-2 2-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-2 0-4 0 0 0 0 0 0 0-2 0-2 0-4 0 0 0 0 0 0 0-6 0-10 0-16 0 0 0-2 0-2 0-4 0-10 2-14 0-44 14-102-6-136-18-30-86-26-134-26-58 0-104 4-122 38 20 14 42 14 52 34 12 22 14 68 12 110 0 2 0 4 0 6 0 36-2 94-26 98s-44-32-58-50c-2-4-4-6-6-10 0 0-2-2-2-2-2-2-2-4-4-8 0 0-2-2-2-2-2-2-4-4-4-6-2-2-2-2-2-4-2-2-4-6-6-8-18-30-36-60-52-98-12-22-26-60-38-66-24-12-72-6-104-6-36 0-74-6-96 12 0 40 20 74 36 106 22 44 44 86 68 126 0 2 2 4 2 6 4 4 6 10 10 14 0 2 2 4 2 6 4 4 6 10 10 14 0 2 2 4 4 6 4 6 8 12 12 18 0 0 0 0 0 0 4 6 8 14 12 20 2 2 2 4 4 4 4 6 6 10 10 14 0 2 2 4 4 6 2 4 6 10 10 14 0 2 2 4 4 6 4 6 8 12 14 18 62 78 132 152 270 168 44 4 108 8 122-18 20-32-2-108 42-114 30-6 56 40 74 58 30 34 66 70 118 80 0 0 2 0 4 0 46-20 184 22 192-36 2-20-22-52-34-66z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"vkontakte\"\n        ],\n        \"defaultCode\": 57457,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 114,\n        \"order\": 156,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57493,\n        \"name\": \"vkontakte\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 237\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 90c234 0 422 188 422 422s-188 422-422 422c-234 0-422-188-422-422s188-422 422-422M512 0c-282 0-512 230-512 512s230 512 512 512c282 0 512-230 512-512s-230-512-512-512zM934 284v-186c0-2-2-4-2-6-2 0-4-2-6-2h-188c12 66 136 180 196 194zM92 740v188c0 2 0 4 2 4 0 2 2 2 4 2h188c-10-66-134-178-194-194zM738 932h188c2 0 4 0 6-2 0 0 2-2 2-4v-188c-68 10-180 134-196 194zM286 90h-188c-2 0-4 0-4 2-2 2-2 2-2 4v188c66-10 178-134 194-194zM238 290h158c0 0-8 36-6 54 8 68 52 260 52 260l74-300 76 294c0 0 44-258 44-276 0-16-16-34-16-34h164c0 0-34 32-46 76-16 56-66 342-66 360 0 30 20 52 20 52h-154c0 0 4-16 4-42s-24-152-24-152c0 0-30 130-30 154 0 22 10 40 10 40h-160c0 0 30-22 30-42-4-60-86-364-92-388-10-40-38-56-38-56z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"warcraft\"\n        ],\n        \"defaultCode\": 57495,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 152,\n        \"order\": 157,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57494,\n        \"name\": \"warcraft\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 238\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M712 362c-96 4-178 34-246 98-66 66-98 148-90 248-36-4-70-10-104-12-12-2-26 0-36 6-34 18-64 40-102 62 6-30 10-58 18-84 6-20 4-30-14-44-114-80-162-200-126-324 34-116 114-186 226-222 152-50 324 2 416 122 32 42 52 92 58 150zM274 322c2-22-18-42-42-44-24 0-44 18-44 42s18 42 42 44c22 0 44-18 44-42zM502 278c-22 0-42 22-42 44 0 24 20 42 44 42s42-20 42-44c0-24-20-42-44-42zM926 954c-30-12-58-34-88-36-30-4-60 14-90 16-94 10-178-16-246-78-132-122-112-308 38-408 136-88 334-58 428 64 84 106 74 248-26 338-30 26-40 48-22 82 2 6 4 14 6 22zM582 622c20 0 36-14 36-34 2-20-14-36-36-36-18 0-36 18-36 36 2 20 18 34 36 34zM804 552c-18 0-34 16-34 34-2 20 14 36 34 36s34-14 34-34c0-20-14-36-34-36z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"wechat\"\n        ],\n        \"defaultCode\": 57496,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 153,\n        \"order\": 158,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57495,\n        \"name\": \"wechat\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 239\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M766 498c-14-4-24-8-18-26 18-42 18-76 2-102-34-48-124-46-230-2 0 0-32 14-24-12 16-50 14-94-10-118-58-58-208 2-336 130-98 96-154 200-154 288 0 170 218 272 430 272 278 0 464-162 464-290 0-78-66-122-124-140zM426 868c-170 16-316-60-326-172-12-112 118-214 286-232 170-16 316 60 328 172 10 110-118 214-288 232zM950 188c-66-74-166-104-258-84-20 4-34 26-30 46 4 22 26 36 46 32 66-14 136 6 184 58 48 54 62 126 40 190-6 20 6 42 26 48 20 8 42-4 50-24 0 0 0 0 0 0 28-90 10-192-58-266zM832 432c18 6 36-4 42-22 14-42 6-92-26-128-34-38-82-50-126-42-18 4-30 22-26 40 4 20 22 30 40 26 20-4 44 2 60 20s20 42 14 64c-6 18 4 36 22 42zM444 550c-82-20-172 20-208 90-36 72 0 154 80 180 86 26 184-14 220-94 34-76-10-154-92-176zM382 736c-16 26-52 36-78 24s-34-42-18-66c16-26 50-38 76-26 28 10 36 40 20 68zM436 666c-6 10-20 14-30 10s-12-14-8-24c6-10 20-16 30-12s14 16 8 26z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"weibo\"\n        ],\n        \"defaultCode\": 57430,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 87,\n        \"order\": 159,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57496,\n        \"name\": \"weibo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 240\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M874 148c-96-96-224-148-360-148-280 0-508 228-508 508 0 88 24 176 68 254l-72 262 270-70c74 40 156 62 242 62v0c0 0 0 0 0 0 280 0 508-228 508-508 0-136-52-264-148-360zM514 930v0c-76 0-150-20-214-60l-16-8-160 42 42-156-10-16c-42-68-64-144-64-224 0-234 190-422 422-422 112 0 218 44 298 124s124 186 124 298c0 232-190 422-422 422zM746 614c-14-6-76-38-88-42-10-4-20-6-28 6-8 14-32 42-40 50s-14 10-28 4c-12-6-52-20-102-64-36-32-62-74-70-88-8-12 0-18 6-26 6-4 12-14 18-22 8-6 10-12 14-20s2-16-2-22c-2-6-28-70-38-94-12-26-22-22-30-22-6 0-16 0-24 0s-22 2-34 14c-12 14-44 44-44 106 0 64 46 124 52 132s90 136 216 192c30 12 54 20 72 26 32 10 58 8 80 6 26-4 76-32 86-62 12-28 12-54 8-60-4-4-12-8-24-14z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"whatsapp\"\n        ],\n        \"defaultCode\": 57458,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 115,\n        \"order\": 160,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57497,\n        \"name\": \"whatsapp\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 241\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M96 300c-24-38-62-76-92-88l-4-2v-36l2-2h262c0 8 0 22 0 36-36 4-76 22-66 60 66 144 126 292 190 438l112-208c-44-88-74-178-122-264-14-24-56-26-86-26v-34h246v34c-22 2-48 8-44 34l70 154c22-48 48-96 68-146 10-40-36-42-64-44v-32h220v32c-34 2-64 12-82 36-42 66-74 142-108 214 34 78 68 156 102 228l188-432c-14-28-42-38-70-44l-2-34h208v34c-10 2-18 4-26 8-16 8-32 24-42 42l-258 594h-44l-122-290-150 290h-44c-88-182-150-372-242-552z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"wikipedia\"\n        ],\n        \"defaultCode\": 57476,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 133,\n        \"order\": 161,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57498,\n        \"name\": \"wikipedia\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 242\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M-2 882l422 56v-396h-424zM-4 492h424v-412l-422 62zM460 944l564 76v-478h-564zM460 74v418h564v-494z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"windows\"\n        ],\n        \"defaultCode\": 57401,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 58,\n        \"order\": 162,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57499,\n        \"name\": \"windows\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 243\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M512 0c-282 0-512 230-512 512s230 512 512 512c282 0 512-230 512-512s-230-512-512-512zM52 512c0-66 14-130 40-188l220 602c-154-74-260-232-260-414zM512 972c-46 0-88-6-130-18l138-402 142 388c0 2 2 4 2 6-46 18-98 26-152 26zM576 296c28-2 52-4 52-4 24-4 22-40-2-38 0 0-76 6-124 6-44 0-120-6-120-6-26-2-28 36-4 38 0 0 24 2 48 4l72 196-100 302-168-498c28-2 52-4 52-4 26-4 22-40-2-38 0 0-74 6-122 6-10 0-20 0-30 0 82-126 224-208 384-208 120 0 228 46 310 120-2 0-4 0-6 0-44 0-76 40-76 82 0 38 22 70 44 108 18 30 38 70 38 126 0 40-14 86-34 150l-46 152zM744 910l140-406c26-66 36-118 36-166 0-16-2-32-4-46 36 64 56 140 56 220 0 170-92 318-228 398z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"wordpress\"\n        ],\n        \"defaultCode\": 57422,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 79,\n        \"order\": 163,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57500,\n        \"name\": \"wordpress\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 244\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M644 224l-92 46c-8 4-10 12-6 20l144 288c4 8 0 18-8 22l-28 14c-8 4-18 2-22-6l-2-6-140-284c-4-8-14-10-22-6l-90 44c-8 4-12 14-8 20l140 284 4 6c4 8 0 18-8 20l-28 14c-10 4-18 2-22-6l-2-6-140-280c-4-8-14-12-22-8l-90 46c-8 4-12 12-8 20l164 326c4 8 12 12 20 8l12-6 78-40 86-42 92-44 176-88c8-4 10-12 6-20l-162-328c-4-8-14-12-22-8zM764 64h-506c-142 0-260 116-260 258v378c0 142 118 260 260 260h506c144 0 260-118 260-260v-378c-2-142-118-258-260-258zM916 694c0 86-70 156-156 156h-498c-86 0-156-70-156-156v-366c0-86 70-156 156-156h498c84 0 156 70 156 156z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"wykop\"\n        ],\n        \"defaultCode\": 57497,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 154,\n        \"order\": 164,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57501,\n        \"name\": \"wykop\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 245\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M508 192v0c0 0 0 0 0 0 204-148 332-74 332-74-90-76-206-122-332-122s-242 46-332 122c0 0 126-76 332 74zM374 290c-150-92-240-132-240-132-86 92-138 214-138 350 0 120 42 230 112 318 0 0-70-188 266-536zM1020 508c0-136-52-258-138-350 0 0-88 40-240 132 336 348 266 536 266 536 70-88 112-198 112-318zM506 402c-284 210-368 458-368 458 94 98 224 158 370 158s278-60 370-158c0 0-54-224-372-458z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"xbox\"\n        ],\n        \"defaultCode\": 57400,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 57,\n        \"order\": 165,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57502,\n        \"name\": \"xbox\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 246\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M246 718h-148c-8 0-14-4-18-10s-4-16 0-24l156-276c0 0 0 0 0-2l-100-172c-4-8-4-16 0-22s10-10 20-10h148c22 0 34 14 40 28 0 0 102 176 102 176-6 12-160 282-160 282-8 14-18 30-40 30zM944 32l-326 578c0 0 0 2 0 2l208 380c4 8 4 16 0 22s-10 10-20 10h-148c-22 0-32-16-40-28 0 0-210-384-210-386 10-18 328-582 328-582 8-14 18-28 40-28h150c8 0 16 4 18 10 4 6 4 14 0 22z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"xing\"\n        ],\n        \"defaultCode\": 57413,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 70,\n        \"order\": 166,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57503,\n        \"name\": \"xing\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 247\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M994 324c-18 0-92 18-118 22-26 8-270 196-286 242-4 16-6 42-6 64l-2 38c0 26 8 70 12 92 16 4 132 2 154 4l-4 48c-20-2-168 0-252 0-42 0-180 4-222 2l8-44c24-2 118 4 140-18 10-12 8-24 8-88v-30c0-14 0-42-4-66-10-26-224-294-280-338-16-4-116-16-140-20l-2-42c12-6 124 2 232-2 72-2 234 0 254 2l-4 36c-22 6-126 8-152 16 70 102 180 236 216 286 18-28 190-146 196-186-26-6-116-20-130-20l-8-46c24-4 152 0 216 0 54 0 170 0 204 4z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"yahoo\"\n        ],\n        \"defaultCode\": 57409,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 66,\n        \"order\": 167,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57504,\n        \"name\": \"yahoo\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 248\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M498 116c-26-8-52 4-62 30 0 0 0 4-2 4 0 2 0 4 0 4v0c-16 40-158 420-158 420h-4l-168-430c0 0 0 0 0 0l-2-6c-12-26-40-38-66-28s-40 40-32 66c20 52 216 526 216 526l-14 28c-20 58-44 96-110 96-6 0-26 0-28 0-22-2-40 12-46 32-6 24 8 48 32 56 16 2 34 4 50 4 118 0 158-68 196-168 0 0 216-538 226-560 0-4 2-8 4-10v0c0 0 0-2 0-2 8-26-6-54-32-62zM888 742c-84-46-228-114-280-114-8 0-12 2-18 6-4 2-6 6-6 12 2 40 224 188 242 198l8 4c6 2 12 4 18 4 20 0 38-12 50-28 16-26 10-60-14-82zM590 390c6 4 10 6 18 6 52 0 196-68 280-116 24-20 30-54 14-80-12-16-30-28-50-28-6 0-12 2-20 4l-6 4c-18 10-240 158-242 198 0 6 2 10 6 12zM976 450h-6c-22 0-286 24-308 58-2 4-4 12 0 16 22 46 308 50 314 46 30-4 52-32 50-64-2-26-22-50-50-56z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"yammer\"\n        ],\n        \"defaultCode\": 57437,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 94,\n        \"order\": 168,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57505,\n        \"name\": \"yammer\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 249\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M780 0h-86c-8 0-12 4-14 10 0 4-130 398-138 430-8 24-30 106-34 126l-46-124c-10-34-114-324-118-336-2-6-4-14-16-14h-84c-8 0-12 8-10 14 2 4 154 412 216 566v342c0 6 4 10 10 10h80c4 0 8-4 8-10v-338c52-144 240-656 242-662s2-14-10-14z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"yandex\"\n        ],\n        \"defaultCode\": 57498,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 155,\n        \"order\": 169,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57506,\n        \"name\": \"yandex\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 250\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M210 102c10-16 30-24 30-24l202-74c8-2 18-12 48 8 18 10 22 54 22 54l2 346c0 0-4 40-32 48-26 6-48-16-48-16l-208-284c0 0-30-36-16-58zM104 692c-8-14-6-44-6-44l14-174c0-10 12-24 24-30 14-10 48 4 48 4l216 110c0 0 32 16 32 42 0 36-18 36-28 42l-254 56c0 0-36 14-46-6zM494 1022c-16 4-36 0-36 0l-170-54c-12-6-22-14-26-30-6-18 16-46 16-46l170-186c0 0 26-24 46-12 20 10 22 34 22 34l-4 252c0 0 4 36-18 42zM598 504l136-216c0 0 14-28 38-26 20 0 30 18 30 18l116 136c0 0 10 22 6 40s-38 32-38 32l-242 70c0 0-36 8-48-14-10-20 2-40 2-40zM916 786l-102 148c0 0-20 14-38 14s-40-28-40-28l-130-218c0 0-14-32 2-48s40-10 40-10l244 78c0 0 34 6 34 30 0 16-10 34-10 34z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"yelp\"\n        ],\n        \"defaultCode\": 57411,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 68,\n        \"order\": 170,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57507,\n        \"name\": \"yelp\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 251\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M706 572c2-36 6-72 10-108 2-28 6-58 10-86 4-32 8-66 12-100 2-10 4-20 4-32 0-2 2-4 4-4 36-10 72-20 106-30 4 0 4 0 6 4 12 58 22 116 34 176 10 40 16 76 24 116 0 0 0 2 2 2 0-4 0-8 0-12-2-40 0-80 2-120 2-26 2-54 4-80 2-34 4-68 4-102 0-4 2-6 6-6 28-8 56-16 84-24 2 0 4 0 4 0 0 10 0 18-2 28-2 22-4 44-6 68-2 30-4 60-8 92-2 28-4 54-6 82-4 30-6 62-8 94-2 20-4 42-6 62 0 2 0 4-2 4-38 12-74 20-112 30-2 2-4 0-4-2-18-74-34-146-50-220-4-22-8-44-12-66 0-2 0-2-2-4 0 16-2 32-2 48-2 26-6 52-8 78-4 26-8 54-10 78-4 30-8 60-12 88-2 8-2 18-4 26 0 2-2 2-4 4-36 10-74 20-114 30-2 2-2 0-4-2-8-46-16-92-24-138s-14-92-22-138c-8-40-14-80-22-120 0-2 0-2 2-4 30-8 58-14 86-22 2-2 4 0 4 2 2 20 4 40 6 60 4 32 10 66 14 98 4 46 12 92 14 140 0 4 0 6 2 10 0 2-2 2 0 4 0-2 0-4 0-4zM184 648c-2-24-6-48-6-72-2-26-4-50-4-76-2-32-4-64-6-98 0-4 0-4 4-6 26-6 52-14 78-20 2-2 4-2 4 2 0 50 4 98 6 146 0 38 2 76 4 112 2 48 2 94 4 140 0 4 0 8 2 12 0 2 0 4-2 4-30 6-58 14-86 24-2 0-2-2-4-4-14-32-26-64-38-96-18-44-36-86-50-130-2 2-2 4 0 6 0 24 2 44 4 68 0 20 2 44 4 64 2 34 4 68 6 100 0 4 0 6 2 10 0 2-2 2-4 4-22 4-42 10-62 18-6 2-12 2-18 4-4 2-4 0-4-2 0-30-2-60-2-92-2-52-4-104-6-158 0-34-2-70-4-106 0-18 0-36-2-54 0-2 2-2 4-4 28-6 56-14 84-22 2-2 4 0 6 2 30 76 60 152 90 228 0 0 0 2 0 2s0 0 0-2c-4-2-4-4-4-4zM568 532c-2-38-2-74-4-112-2-16-4-32-8-48-10-30-28-50-60-56-16-2-34-2-50 0-28 4-54 12-80 24-28 16-46 36-52 68-4 18-4 34-4 52 0 40 2 82 2 122 2 24 2 44 2 68 2 14 4 30 8 46 8 28 28 48 56 56 16 2 30 4 44 2 32-4 62-12 88-26s42-32 52-58c4-14 6-30 6-44 2-32 0-62 0-94zM472 646c-4 20-14 28-34 30-4 0-6 0-10 0-10-2-16-8-18-18-2-16-2-32-2-48 0-26 0-52 0-76 0-36 0-72 0-106 0-22 20-38 42-34 8 2 16 10 18 20 0 8 0 16 0 24 4 56 4 112 6 168 0 12 2 26-2 40z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"younow\"\n        ],\n        \"defaultCode\": 57499,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 156,\n        \"order\": 171,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57508,\n        \"name\": \"younow\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 252\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1014 308c0 0-10-72-40-102-40-42-84-42-104-44-142-10-358-10-358-10v0c0 0-216 0-358 10-20 2-64 2-104 44-30 30-40 102-40 102s-10 82-10 164v78c0 84 10 166 10 166s10 70 40 102c40 40 92 40 114 44 82 8 348 10 348 10s216 0 358-10c20-2 64-4 104-44 30-32 40-102 40-102s10-82 10-166v-78c0-82-10-164-10-164zM650 520v0l-242 126v-288l276 144z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"youtube\"\n        ],\n        \"defaultCode\": 57505,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 162,\n        \"order\": 172,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57509,\n        \"name\": \"youtube\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 253\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M1016 428h-298l212-212c-16-24-36-46-56-66s-42-40-66-56l-212 212v-298c-26-6-54-8-84-8-28 0-58 2-84 8v298l-212-212c-24 16-46 36-66 56s-40 42-56 66l212 210h-298c0 0-8 56-8 84 0 30 2 58 8 86h298l-212 212c32 48 74 88 122 122l210-212v300c28 4 56 8 84 8h2c28 0 58-4 84-8v-300l212 212c24-16 46-36 66-56s40-42 56-66l-212-212h298c6-26 8-56 8-84 0-30-2-58-8-84M640 512c0 38-8 74-20 108-34 12-70 20-108 20s-74-8-108-20c-12-34-20-70-20-108s8-74 20-108c34-12 70-20 108-20s74 8 108 20c12 34 20 70 20 108z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"zapier\"\n        ],\n        \"defaultCode\": 57500,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 157,\n        \"order\": 173,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57510,\n        \"name\": \"zapier\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 254\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M550 200c-16 2-32 6-46 8-46 6-92 10-138 4-20-2-40-6-58-16-26-12-34-26-32-56 2-22 6-46 18-66 12-22 26-42 40-62 10-14 20-16 34-8 22 14 48 22 74 26 52 10 104 12 156 12 70 0 140-10 208-24 4 0 6 0 8 0 12 0 18 4 16 16-4 26-6 54-10 80 0 6-4 14-8 18-148 170-296 340-442 510-12 14-14 20-12 38 10 2 18 2 28 2 44 6 84 24 122 46 32 20 62 38 94 56s62 34 96 40c42 10 82 12 122 2 18-6 36-14 50-24 2-2 4-2 8-6 2 18 4 34 4 50-2 42-10 80-32 116-22 34-50 56-90 62-28 2-52-4-78-10-56-18-106-46-154-80-24-16-48-36-72-54-48-34-100-58-158-64-26-4-54-6-82-6-18-2-36 0-54 0-12 0-20-6-20-18 0-34 0-66 2-98 0-10 4-20 10-26 130-154 260-308 390-462 2-2 4-4 6-6z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"zerply\"\n        ],\n        \"defaultCode\": 57475,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 132,\n        \"order\": 174,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57511,\n        \"name\": \"zerply\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 255\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M814 312c0 0-172-64-302-28-132 36-186 120-186 120s-60 66-104 72c-44 6-78 8-222 0v70c144-6 178-4 222 2 44 4 104 72 104 72s54 84 186 120c132 36 304-28 304-28 204-74 208-194 208-194v-12c0 0-4-120-210-194zM614 350c-64 2-106 20-134 36 0 0 0 2 0 2-2 0-4 0-6 0-8 0-12-6-12-12s2-10 6-12c18-8 36-14 60-20 20-8 46-10 74-10 62 0 126 16 160 26 0 0-74-14-148-10z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"zomato\"\n        ],\n        \"defaultCode\": 57501,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 158,\n        \"order\": 175,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57512,\n        \"name\": \"zomato\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 256\n    },\n    {\n      \"icon\": {\n        \"paths\": [\n          \"M764 4c0 0 70-6 126 30 20-2 36 8 46 26 10 20 30 66 14 94-4 4-16-18-16-18s-6 28-22 38c2 58-20 98-26 112-4 6-2 14 2 22 2 6 40 142 38 186-2 46-24 98-42 118 4 36-14 68-22 84-10 14-28 72-32 98-6 28-8 56-2 64 6 10 32 36 30 50-2 12-30 28-44 28-12 0-40-8-46-26-8-18-8-50-4-68 6-18 38-152 18-230-46 22-124 20-124 20s-14 70-30 110c-6 10-4 74-4 116 0 40 14 104 14 104s20 16 16 34c-2 18-26 28-46 28s-46-16-46-40c0-24 4-82 2-122-2-42 0-68-8-94-6-26-26-94-28-146-6 0-12-6-12-6s-32 38-54 58c4 14 10 40 10 46s6 10 16 14c10 4 40 20 38 36 0 16-38 20-70 6-8-4-36-98-40-110s-6-18-2-30c6-10 18-44 16-64s-38-52-64-52c-18 0-48 30-68 46-26 20-56 50-64 56-8 4-68 114-78 144-6 14-14 76-66 74-22-2-44-28 22-72 16-38 38-78 40-86s18-106 48-198c28-94 70-138 78-144 6-6 10-8 4-12s-74-62-62-186c2-14 8-10 14 22 4 34 30 112 88 136 6 2 48-30 264-46 0-38 6-78 6-78s-14-12-16-34c-8 10-12 14-22 12-8-2-8-46-6-78 2-30 38-44 52-46 18-10 38-8 38-8s32-34 126-18z\"\n        ],\n        \"isMulticolor\": false,\n        \"isMulticolor2\": false,\n        \"tags\": [\n          \"zynga\"\n        ],\n        \"defaultCode\": 57398,\n        \"grid\": 16,\n        \"attrs\": []\n      },\n      \"attrs\": [],\n      \"properties\": {\n        \"id\": 55,\n        \"order\": 176,\n        \"ligatures\": \"\",\n        \"prevSize\": 32,\n        \"code\": 57513,\n        \"name\": \"zynga\"\n      },\n      \"setIdx\": 0,\n      \"setId\": 1,\n      \"iconIdx\": 257\n    }\n  ],\n  \"height\": 1024,\n  \"metadata\": {\n    \"name\": \"Socicon\",\n    \"url\": \"http://www.socicon.com\",\n    \"designer\": \"Quentin RHEIN\"\n  },\n  \"preferences\": {\n    \"showGlyphs\": true,\n    \"showQuickUse\": true,\n    \"showQuickUse2\": true,\n    \"showSVGs\": true,\n    \"fontPref\": {\n      \"prefix\": \"socicon-\",\n      \"metadata\": {\n        \"fontFamily\": \"Socicon\",\n        \"majorVersion\": 3,\n        \"minorVersion\": 6,\n        \"fontURL\": \"http://www.socicon.com\",\n        \"designer\": \"Quentin RHEIN\"\n      },\n      \"metrics\": {\n        \"emSize\": 1024,\n        \"baseline\": 6.25,\n        \"whitespace\": 0\n      },\n      \"embed\": false,\n      \"autoHost\": true,\n      \"resetPoint\": 57344,\n      \"showSelector\": true,\n      \"cssVars\": true,\n      \"cssVarsFormat\": \"less\",\n      \"showVersion\": true,\n      \"showMetadata\": true,\n      \"showMetrics\": true\n    },\n    \"imagePref\": {\n      \"prefix\": \"icon-\",\n      \"png\": true,\n      \"useClassSelector\": true,\n      \"color\": 0,\n      \"bgColor\": 16777215,\n      \"classSelector\": \".icon\"\n    },\n    \"historySize\": 100,\n    \"showCodes\": true,\n    \"gridSize\": 16,\n    \"quickUsageToken\": {},\n    \"fontUploadTime\": \"03/04/2018, 13:26:36\",\n    \"fontUrlS3\": \"https://s3.amazonaws.com/icomoon.io/114779/Socicon/style.css?9ukd8d\",\n    \"fontCF\": {\n      \"url\": \"https://d1azc1qln24ryf.cloudfront.net/114779/Socicon/style-cf.css?9ukd8d\",\n      \"time\": 1522754796395\n    },\n    \"fontUrlHash\": \"9ukd8d\",\n    \"fontHostingName\": \"Socicon\",\n    \"showLiga\": false\n  }\n}"
  },
  {
    "path": "src/lib/socicon/style.css",
    "content": "@font-face {\n  font-family: 'Socicon';\n  src:  url('fonts/Socicon.eot?484r1f');\n  src:  url('fonts/Socicon.eot?484r1f#iefix') format('embedded-opentype'),\n    url('fonts/Socicon.woff2?484r1f') format('woff2'),\n    url('fonts/Socicon.ttf?484r1f') format('truetype'),\n    url('fonts/Socicon.woff?484r1f') format('woff'),\n    url('fonts/Socicon.svg?484r1f#Socicon') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n\n[class^=\"socicon-\"], [class*=\" socicon-\"] {\n  /* use !important to prevent issues with browser extensions that change fonts */\n  font-family: 'Socicon' !important;\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.socicon-internet:before {\n  content: \"\\e957\";\n}\n.socicon-moddb:before {\n  content: \"\\e94b\";\n}\n.socicon-indiedb:before {\n  content: \"\\e94c\";\n}\n.socicon-traxsource:before {\n  content: \"\\e94d\";\n}\n.socicon-gamefor:before {\n  content: \"\\e94e\";\n}\n.socicon-pixiv:before {\n  content: \"\\e94f\";\n}\n.socicon-myanimelist:before {\n  content: \"\\e950\";\n}\n.socicon-blackberry:before {\n  content: \"\\e951\";\n}\n.socicon-wickr:before {\n  content: \"\\e952\";\n}\n.socicon-spip:before {\n  content: \"\\e953\";\n}\n.socicon-napster:before {\n  content: \"\\e954\";\n}\n.socicon-beatport:before {\n  content: \"\\e955\";\n}\n.socicon-hackerone:before {\n  content: \"\\e956\";\n}\n.socicon-hackernews:before {\n  content: \"\\e946\";\n}\n.socicon-smashwords:before {\n  content: \"\\e947\";\n}\n.socicon-kobo:before {\n  content: \"\\e948\";\n}\n.socicon-bookbub:before {\n  content: \"\\e949\";\n}\n.socicon-mailru:before {\n  content: \"\\e94a\";\n}\n.socicon-gitlab:before {\n  content: \"\\e945\";\n}\n.socicon-instructables:before {\n  content: \"\\e944\";\n}\n.socicon-portfolio:before {\n  content: \"\\e943\";\n}\n.socicon-codered:before {\n  content: \"\\e940\";\n}\n.socicon-origin:before {\n  content: \"\\e941\";\n}\n.socicon-nextdoor:before {\n  content: \"\\e942\";\n}\n.socicon-udemy:before {\n  content: \"\\e93f\";\n}\n.socicon-livemaster:before {\n  content: \"\\e93e\";\n}\n.socicon-crunchbase:before {\n  content: \"\\e93b\";\n}\n.socicon-homefy:before {\n  content: \"\\e93c\";\n}\n.socicon-calendly:before {\n  content: \"\\e93d\";\n}\n.socicon-realtor:before {\n  content: \"\\e90f\";\n}\n.socicon-tidal:before {\n  content: \"\\e910\";\n}\n.socicon-qobuz:before {\n  content: \"\\e911\";\n}\n.socicon-natgeo:before {\n  content: \"\\e912\";\n}\n.socicon-mastodon:before {\n  content: \"\\e913\";\n}\n.socicon-unsplash:before {\n  content: \"\\e914\";\n}\n.socicon-homeadvisor:before {\n  content: \"\\e915\";\n}\n.socicon-angieslist:before {\n  content: \"\\e916\";\n}\n.socicon-codepen:before {\n  content: \"\\e917\";\n}\n.socicon-slack:before {\n  content: \"\\e918\";\n}\n.socicon-openaigym:before {\n  content: \"\\e919\";\n}\n.socicon-logmein:before {\n  content: \"\\e91a\";\n}\n.socicon-fiverr:before {\n  content: \"\\e91b\";\n}\n.socicon-gotomeeting:before {\n  content: \"\\e91c\";\n}\n.socicon-aliexpress:before {\n  content: \"\\e91d\";\n}\n.socicon-guru:before {\n  content: \"\\e91e\";\n}\n.socicon-appstore:before {\n  content: \"\\e91f\";\n}\n.socicon-homes:before {\n  content: \"\\e920\";\n}\n.socicon-zoom:before {\n  content: \"\\e921\";\n}\n.socicon-alibaba:before {\n  content: \"\\e922\";\n}\n.socicon-craigslist:before {\n  content: \"\\e923\";\n}\n.socicon-wix:before {\n  content: \"\\e924\";\n}\n.socicon-redfin:before {\n  content: \"\\e925\";\n}\n.socicon-googlecalendar:before {\n  content: \"\\e926\";\n}\n.socicon-shopify:before {\n  content: \"\\e927\";\n}\n.socicon-freelancer:before {\n  content: \"\\e928\";\n}\n.socicon-seedrs:before {\n  content: \"\\e929\";\n}\n.socicon-bing:before {\n  content: \"\\e92a\";\n}\n.socicon-doodle:before {\n  content: \"\\e92b\";\n}\n.socicon-bonanza:before {\n  content: \"\\e92c\";\n}\n.socicon-squarespace:before {\n  content: \"\\e92d\";\n}\n.socicon-toptal:before {\n  content: \"\\e92e\";\n}\n.socicon-gust:before {\n  content: \"\\e92f\";\n}\n.socicon-ask:before {\n  content: \"\\e930\";\n}\n.socicon-trulia:before {\n  content: \"\\e931\";\n}\n.socicon-loomly:before {\n  content: \"\\e932\";\n}\n.socicon-ghost:before {\n  content: \"\\e933\";\n}\n.socicon-upwork:before {\n  content: \"\\e934\";\n}\n.socicon-fundable:before {\n  content: \"\\e935\";\n}\n.socicon-booking:before {\n  content: \"\\e936\";\n}\n.socicon-googlemaps:before {\n  content: \"\\e937\";\n}\n.socicon-zillow:before {\n  content: \"\\e938\";\n}\n.socicon-niconico:before {\n  content: \"\\e939\";\n}\n.socicon-toneden:before {\n  content: \"\\e93a\";\n}\n.socicon-augment:before {\n  content: \"\\e908\";\n}\n.socicon-bitbucket:before {\n  content: \"\\e909\";\n}\n.socicon-fyuse:before {\n  content: \"\\e90a\";\n}\n.socicon-yt-gaming:before {\n  content: \"\\e90b\";\n}\n.socicon-sketchfab:before {\n  content: \"\\e90c\";\n}\n.socicon-mobcrush:before {\n  content: \"\\e90d\";\n}\n.socicon-microsoft:before {\n  content: \"\\e90e\";\n}\n.socicon-pandora:before {\n  content: \"\\e907\";\n}\n.socicon-messenger:before {\n  content: \"\\e906\";\n}\n.socicon-gamewisp:before {\n  content: \"\\e905\";\n}\n.socicon-bloglovin:before {\n  content: \"\\e904\";\n}\n.socicon-tunein:before {\n  content: \"\\e903\";\n}\n.socicon-gamejolt:before {\n  content: \"\\e901\";\n}\n.socicon-trello:before {\n  content: \"\\e902\";\n}\n.socicon-spreadshirt:before {\n  content: \"\\e900\";\n}\n.socicon-500px:before {\n  content: \"\\e000\";\n}\n.socicon-8tracks:before {\n  content: \"\\e001\";\n}\n.socicon-airbnb:before {\n  content: \"\\e002\";\n}\n.socicon-alliance:before {\n  content: \"\\e003\";\n}\n.socicon-amazon:before {\n  content: \"\\e004\";\n}\n.socicon-amplement:before {\n  content: \"\\e005\";\n}\n.socicon-android:before {\n  content: \"\\e006\";\n}\n.socicon-angellist:before {\n  content: \"\\e007\";\n}\n.socicon-apple:before {\n  content: \"\\e008\";\n}\n.socicon-appnet:before {\n  content: \"\\e009\";\n}\n.socicon-baidu:before {\n  content: \"\\e00a\";\n}\n.socicon-bandcamp:before {\n  content: \"\\e00b\";\n}\n.socicon-battlenet:before {\n  content: \"\\e00c\";\n}\n.socicon-mixer:before {\n  content: \"\\e00d\";\n}\n.socicon-bebee:before {\n  content: \"\\e00e\";\n}\n.socicon-bebo:before {\n  content: \"\\e00f\";\n}\n.socicon-behance:before {\n  content: \"\\e010\";\n}\n.socicon-blizzard:before {\n  content: \"\\e011\";\n}\n.socicon-blogger:before {\n  content: \"\\e012\";\n}\n.socicon-buffer:before {\n  content: \"\\e013\";\n}\n.socicon-chrome:before {\n  content: \"\\e014\";\n}\n.socicon-coderwall:before {\n  content: \"\\e015\";\n}\n.socicon-curse:before {\n  content: \"\\e016\";\n}\n.socicon-dailymotion:before {\n  content: \"\\e017\";\n}\n.socicon-deezer:before {\n  content: \"\\e018\";\n}\n.socicon-delicious:before {\n  content: \"\\e019\";\n}\n.socicon-deviantart:before {\n  content: \"\\e01a\";\n}\n.socicon-diablo:before {\n  content: \"\\e01b\";\n}\n.socicon-digg:before {\n  content: \"\\e01c\";\n}\n.socicon-discord:before {\n  content: \"\\e01d\";\n}\n.socicon-disqus:before {\n  content: \"\\e01e\";\n}\n.socicon-douban:before {\n  content: \"\\e01f\";\n}\n.socicon-draugiem:before {\n  content: \"\\e020\";\n}\n.socicon-dribbble:before {\n  content: \"\\e021\";\n}\n.socicon-drupal:before {\n  content: \"\\e022\";\n}\n.socicon-ebay:before {\n  content: \"\\e023\";\n}\n.socicon-ello:before {\n  content: \"\\e024\";\n}\n.socicon-endomodo:before {\n  content: \"\\e025\";\n}\n.socicon-envato:before {\n  content: \"\\e026\";\n}\n.socicon-etsy:before {\n  content: \"\\e027\";\n}\n.socicon-facebook:before {\n  content: \"\\e028\";\n}\n.socicon-feedburner:before {\n  content: \"\\e029\";\n}\n.socicon-filmweb:before {\n  content: \"\\e02a\";\n}\n.socicon-firefox:before {\n  content: \"\\e02b\";\n}\n.socicon-flattr:before {\n  content: \"\\e02c\";\n}\n.socicon-flickr:before {\n  content: \"\\e02d\";\n}\n.socicon-formulr:before {\n  content: \"\\e02e\";\n}\n.socicon-forrst:before {\n  content: \"\\e02f\";\n}\n.socicon-foursquare:before {\n  content: \"\\e030\";\n}\n.socicon-friendfeed:before {\n  content: \"\\e031\";\n}\n.socicon-github:before {\n  content: \"\\e032\";\n}\n.socicon-goodreads:before {\n  content: \"\\e033\";\n}\n.socicon-google:before {\n  content: \"\\e034\";\n}\n.socicon-googlescholar:before {\n  content: \"\\e035\";\n}\n.socicon-googlegroups:before {\n  content: \"\\e036\";\n}\n.socicon-googlephotos:before {\n  content: \"\\e037\";\n}\n.socicon-googleplus:before {\n  content: \"\\e038\";\n}\n.socicon-grooveshark:before {\n  content: \"\\e039\";\n}\n.socicon-hackerrank:before {\n  content: \"\\e03a\";\n}\n.socicon-hearthstone:before {\n  content: \"\\e03b\";\n}\n.socicon-hellocoton:before {\n  content: \"\\e03c\";\n}\n.socicon-heroes:before {\n  content: \"\\e03d\";\n}\n.socicon-smashcast:before {\n  content: \"\\e03e\";\n}\n.socicon-horde:before {\n  content: \"\\e03f\";\n}\n.socicon-houzz:before {\n  content: \"\\e040\";\n}\n.socicon-icq:before {\n  content: \"\\e041\";\n}\n.socicon-identica:before {\n  content: \"\\e042\";\n}\n.socicon-imdb:before {\n  content: \"\\e043\";\n}\n.socicon-instagram:before {\n  content: \"\\e044\";\n}\n.socicon-issuu:before {\n  content: \"\\e045\";\n}\n.socicon-istock:before {\n  content: \"\\e046\";\n}\n.socicon-itunes:before {\n  content: \"\\e047\";\n}\n.socicon-keybase:before {\n  content: \"\\e048\";\n}\n.socicon-lanyrd:before {\n  content: \"\\e049\";\n}\n.socicon-lastfm:before {\n  content: \"\\e04a\";\n}\n.socicon-line:before {\n  content: \"\\e04b\";\n}\n.socicon-linkedin:before {\n  content: \"\\e04c\";\n}\n.socicon-livejournal:before {\n  content: \"\\e04d\";\n}\n.socicon-lyft:before {\n  content: \"\\e04e\";\n}\n.socicon-macos:before {\n  content: \"\\e04f\";\n}\n.socicon-mail:before {\n  content: \"\\e050\";\n}\n.socicon-medium:before {\n  content: \"\\e051\";\n}\n.socicon-meetup:before {\n  content: \"\\e052\";\n}\n.socicon-mixcloud:before {\n  content: \"\\e053\";\n}\n.socicon-modelmayhem:before {\n  content: \"\\e054\";\n}\n.socicon-mumble:before {\n  content: \"\\e055\";\n}\n.socicon-myspace:before {\n  content: \"\\e056\";\n}\n.socicon-newsvine:before {\n  content: \"\\e057\";\n}\n.socicon-nintendo:before {\n  content: \"\\e058\";\n}\n.socicon-npm:before {\n  content: \"\\e059\";\n}\n.socicon-odnoklassniki:before {\n  content: \"\\e05a\";\n}\n.socicon-openid:before {\n  content: \"\\e05b\";\n}\n.socicon-opera:before {\n  content: \"\\e05c\";\n}\n.socicon-outlook:before {\n  content: \"\\e05d\";\n}\n.socicon-overwatch:before {\n  content: \"\\e05e\";\n}\n.socicon-patreon:before {\n  content: \"\\e05f\";\n}\n.socicon-paypal:before {\n  content: \"\\e060\";\n}\n.socicon-periscope:before {\n  content: \"\\e061\";\n}\n.socicon-persona:before {\n  content: \"\\e062\";\n}\n.socicon-pinterest:before {\n  content: \"\\e063\";\n}\n.socicon-play:before {\n  content: \"\\e064\";\n}\n.socicon-player:before {\n  content: \"\\e065\";\n}\n.socicon-playstation:before {\n  content: \"\\e066\";\n}\n.socicon-pocket:before {\n  content: \"\\e067\";\n}\n.socicon-qq:before {\n  content: \"\\e068\";\n}\n.socicon-quora:before {\n  content: \"\\e069\";\n}\n.socicon-raidcall:before {\n  content: \"\\e06a\";\n}\n.socicon-ravelry:before {\n  content: \"\\e06b\";\n}\n.socicon-reddit:before {\n  content: \"\\e06c\";\n}\n.socicon-renren:before {\n  content: \"\\e06d\";\n}\n.socicon-researchgate:before {\n  content: \"\\e06e\";\n}\n.socicon-residentadvisor:before {\n  content: \"\\e06f\";\n}\n.socicon-reverbnation:before {\n  content: \"\\e070\";\n}\n.socicon-rss:before {\n  content: \"\\e071\";\n}\n.socicon-sharethis:before {\n  content: \"\\e072\";\n}\n.socicon-skype:before {\n  content: \"\\e073\";\n}\n.socicon-slideshare:before {\n  content: \"\\e074\";\n}\n.socicon-smugmug:before {\n  content: \"\\e075\";\n}\n.socicon-snapchat:before {\n  content: \"\\e076\";\n}\n.socicon-songkick:before {\n  content: \"\\e077\";\n}\n.socicon-soundcloud:before {\n  content: \"\\e078\";\n}\n.socicon-spotify:before {\n  content: \"\\e079\";\n}\n.socicon-stackexchange:before {\n  content: \"\\e07a\";\n}\n.socicon-stackoverflow:before {\n  content: \"\\e07b\";\n}\n.socicon-starcraft:before {\n  content: \"\\e07c\";\n}\n.socicon-stayfriends:before {\n  content: \"\\e07d\";\n}\n.socicon-steam:before {\n  content: \"\\e07e\";\n}\n.socicon-storehouse:before {\n  content: \"\\e07f\";\n}\n.socicon-strava:before {\n  content: \"\\e080\";\n}\n.socicon-streamjar:before {\n  content: \"\\e081\";\n}\n.socicon-stumbleupon:before {\n  content: \"\\e082\";\n}\n.socicon-swarm:before {\n  content: \"\\e083\";\n}\n.socicon-teamspeak:before {\n  content: \"\\e084\";\n}\n.socicon-teamviewer:before {\n  content: \"\\e085\";\n}\n.socicon-technorati:before {\n  content: \"\\e086\";\n}\n.socicon-telegram:before {\n  content: \"\\e087\";\n}\n.socicon-tripadvisor:before {\n  content: \"\\e088\";\n}\n.socicon-tripit:before {\n  content: \"\\e089\";\n}\n.socicon-triplej:before {\n  content: \"\\e08a\";\n}\n.socicon-tumblr:before {\n  content: \"\\e08b\";\n}\n.socicon-twitch:before {\n  content: \"\\e08c\";\n}\n.socicon-twitter:before {\n  content: \"\\e08d\";\n}\n.socicon-uber:before {\n  content: \"\\e08e\";\n}\n.socicon-ventrilo:before {\n  content: \"\\e08f\";\n}\n.socicon-viadeo:before {\n  content: \"\\e090\";\n}\n.socicon-viber:before {\n  content: \"\\e091\";\n}\n.socicon-viewbug:before {\n  content: \"\\e092\";\n}\n.socicon-vimeo:before {\n  content: \"\\e093\";\n}\n.socicon-vine:before {\n  content: \"\\e094\";\n}\n.socicon-vkontakte:before {\n  content: \"\\e095\";\n}\n.socicon-warcraft:before {\n  content: \"\\e096\";\n}\n.socicon-wechat:before {\n  content: \"\\e097\";\n}\n.socicon-weibo:before {\n  content: \"\\e098\";\n}\n.socicon-whatsapp:before {\n  content: \"\\e099\";\n}\n.socicon-wikipedia:before {\n  content: \"\\e09a\";\n}\n.socicon-windows:before {\n  content: \"\\e09b\";\n}\n.socicon-wordpress:before {\n  content: \"\\e09c\";\n}\n.socicon-wykop:before {\n  content: \"\\e09d\";\n}\n.socicon-xbox:before {\n  content: \"\\e09e\";\n}\n.socicon-xing:before {\n  content: \"\\e09f\";\n}\n.socicon-yahoo:before {\n  content: \"\\e0a0\";\n}\n.socicon-yammer:before {\n  content: \"\\e0a1\";\n}\n.socicon-yandex:before {\n  content: \"\\e0a2\";\n}\n.socicon-yelp:before {\n  content: \"\\e0a3\";\n}\n.socicon-younow:before {\n  content: \"\\e0a4\";\n}\n.socicon-youtube:before {\n  content: \"\\e0a5\";\n}\n.socicon-zapier:before {\n  content: \"\\e0a6\";\n}\n.socicon-zerply:before {\n  content: \"\\e0a7\";\n}\n.socicon-zomato:before {\n  content: \"\\e0a8\";\n}\n.socicon-zynga:before {\n  content: \"\\e0a9\";\n}\n"
  },
  {
    "path": "src/lib/socicon/style.less",
    "content": "@import \"variables\";\n\n@font-face {\n  font-family: 'Socicon';\n  src:  url('@{icomoon-font-path}/Socicon.eot?484r1f');\n  src:  url('@{icomoon-font-path}/Socicon.eot?484r1f#iefix') format('embedded-opentype'),\n    url('@{icomoon-font-path}/Socicon.woff2?484r1f') format('woff2'),\n    url('@{icomoon-font-path}/Socicon.ttf?484r1f') format('truetype'),\n    url('@{icomoon-font-path}/Socicon.woff?484r1f') format('woff'),\n    url('@{icomoon-font-path}/Socicon.svg?484r1f#Socicon') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n\n[class^=\"socicon-\"], [class*=\" socicon-\"] {\n  /* use !important to prevent issues with browser extensions that change fonts */\n  font-family: 'Socicon' !important;\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n\n.socicon-internet {\n  &:before {\n    content: @socicon-internet; \n  }\n}\n.socicon-moddb {\n  &:before {\n    content: @socicon-moddb; \n  }\n}\n.socicon-indiedb {\n  &:before {\n    content: @socicon-indiedb; \n  }\n}\n.socicon-traxsource {\n  &:before {\n    content: @socicon-traxsource; \n  }\n}\n.socicon-gamefor {\n  &:before {\n    content: @socicon-gamefor; \n  }\n}\n.socicon-pixiv {\n  &:before {\n    content: @socicon-pixiv; \n  }\n}\n.socicon-myanimelist {\n  &:before {\n    content: @socicon-myanimelist; \n  }\n}\n.socicon-blackberry {\n  &:before {\n    content: @socicon-blackberry; \n  }\n}\n.socicon-wickr {\n  &:before {\n    content: @socicon-wickr; \n  }\n}\n.socicon-spip {\n  &:before {\n    content: @socicon-spip; \n  }\n}\n.socicon-napster {\n  &:before {\n    content: @socicon-napster; \n  }\n}\n.socicon-beatport {\n  &:before {\n    content: @socicon-beatport; \n  }\n}\n.socicon-hackerone {\n  &:before {\n    content: @socicon-hackerone; \n  }\n}\n.socicon-hackernews {\n  &:before {\n    content: @socicon-hackernews; \n  }\n}\n.socicon-smashwords {\n  &:before {\n    content: @socicon-smashwords; \n  }\n}\n.socicon-kobo {\n  &:before {\n    content: @socicon-kobo; \n  }\n}\n.socicon-bookbub {\n  &:before {\n    content: @socicon-bookbub; \n  }\n}\n.socicon-mailru {\n  &:before {\n    content: @socicon-mailru; \n  }\n}\n.socicon-gitlab {\n  &:before {\n    content: @socicon-gitlab; \n  }\n}\n.socicon-instructables {\n  &:before {\n    content: @socicon-instructables; \n  }\n}\n.socicon-portfolio {\n  &:before {\n    content: @socicon-portfolio; \n  }\n}\n.socicon-codered {\n  &:before {\n    content: @socicon-codered; \n  }\n}\n.socicon-origin {\n  &:before {\n    content: @socicon-origin; \n  }\n}\n.socicon-nextdoor {\n  &:before {\n    content: @socicon-nextdoor; \n  }\n}\n.socicon-udemy {\n  &:before {\n    content: @socicon-udemy; \n  }\n}\n.socicon-livemaster {\n  &:before {\n    content: @socicon-livemaster; \n  }\n}\n.socicon-crunchbase {\n  &:before {\n    content: @socicon-crunchbase; \n  }\n}\n.socicon-homefy {\n  &:before {\n    content: @socicon-homefy; \n  }\n}\n.socicon-calendly {\n  &:before {\n    content: @socicon-calendly; \n  }\n}\n.socicon-realtor {\n  &:before {\n    content: @socicon-realtor; \n  }\n}\n.socicon-tidal {\n  &:before {\n    content: @socicon-tidal; \n  }\n}\n.socicon-qobuz {\n  &:before {\n    content: @socicon-qobuz; \n  }\n}\n.socicon-natgeo {\n  &:before {\n    content: @socicon-natgeo; \n  }\n}\n.socicon-mastodon {\n  &:before {\n    content: @socicon-mastodon; \n  }\n}\n.socicon-unsplash {\n  &:before {\n    content: @socicon-unsplash; \n  }\n}\n.socicon-homeadvisor {\n  &:before {\n    content: @socicon-homeadvisor; \n  }\n}\n.socicon-angieslist {\n  &:before {\n    content: @socicon-angieslist; \n  }\n}\n.socicon-codepen {\n  &:before {\n    content: @socicon-codepen; \n  }\n}\n.socicon-slack {\n  &:before {\n    content: @socicon-slack; \n  }\n}\n.socicon-openaigym {\n  &:before {\n    content: @socicon-openaigym; \n  }\n}\n.socicon-logmein {\n  &:before {\n    content: @socicon-logmein; \n  }\n}\n.socicon-fiverr {\n  &:before {\n    content: @socicon-fiverr; \n  }\n}\n.socicon-gotomeeting {\n  &:before {\n    content: @socicon-gotomeeting; \n  }\n}\n.socicon-aliexpress {\n  &:before {\n    content: @socicon-aliexpress; \n  }\n}\n.socicon-guru {\n  &:before {\n    content: @socicon-guru; \n  }\n}\n.socicon-appstore {\n  &:before {\n    content: @socicon-appstore; \n  }\n}\n.socicon-homes {\n  &:before {\n    content: @socicon-homes; \n  }\n}\n.socicon-zoom {\n  &:before {\n    content: @socicon-zoom; \n  }\n}\n.socicon-alibaba {\n  &:before {\n    content: @socicon-alibaba; \n  }\n}\n.socicon-craigslist {\n  &:before {\n    content: @socicon-craigslist; \n  }\n}\n.socicon-wix {\n  &:before {\n    content: @socicon-wix; \n  }\n}\n.socicon-redfin {\n  &:before {\n    content: @socicon-redfin; \n  }\n}\n.socicon-googlecalendar {\n  &:before {\n    content: @socicon-googlecalendar; \n  }\n}\n.socicon-shopify {\n  &:before {\n    content: @socicon-shopify; \n  }\n}\n.socicon-freelancer {\n  &:before {\n    content: @socicon-freelancer; \n  }\n}\n.socicon-seedrs {\n  &:before {\n    content: @socicon-seedrs; \n  }\n}\n.socicon-bing {\n  &:before {\n    content: @socicon-bing; \n  }\n}\n.socicon-doodle {\n  &:before {\n    content: @socicon-doodle; \n  }\n}\n.socicon-bonanza {\n  &:before {\n    content: @socicon-bonanza; \n  }\n}\n.socicon-squarespace {\n  &:before {\n    content: @socicon-squarespace; \n  }\n}\n.socicon-toptal {\n  &:before {\n    content: @socicon-toptal; \n  }\n}\n.socicon-gust {\n  &:before {\n    content: @socicon-gust; \n  }\n}\n.socicon-ask {\n  &:before {\n    content: @socicon-ask; \n  }\n}\n.socicon-trulia {\n  &:before {\n    content: @socicon-trulia; \n  }\n}\n.socicon-loomly {\n  &:before {\n    content: @socicon-loomly; \n  }\n}\n.socicon-ghost {\n  &:before {\n    content: @socicon-ghost; \n  }\n}\n.socicon-upwork {\n  &:before {\n    content: @socicon-upwork; \n  }\n}\n.socicon-fundable {\n  &:before {\n    content: @socicon-fundable; \n  }\n}\n.socicon-booking {\n  &:before {\n    content: @socicon-booking; \n  }\n}\n.socicon-googlemaps {\n  &:before {\n    content: @socicon-googlemaps; \n  }\n}\n.socicon-zillow {\n  &:before {\n    content: @socicon-zillow; \n  }\n}\n.socicon-niconico {\n  &:before {\n    content: @socicon-niconico; \n  }\n}\n.socicon-toneden {\n  &:before {\n    content: @socicon-toneden; \n  }\n}\n.socicon-augment {\n  &:before {\n    content: @socicon-augment; \n  }\n}\n.socicon-bitbucket {\n  &:before {\n    content: @socicon-bitbucket; \n  }\n}\n.socicon-fyuse {\n  &:before {\n    content: @socicon-fyuse; \n  }\n}\n.socicon-yt-gaming {\n  &:before {\n    content: @socicon-yt-gaming; \n  }\n}\n.socicon-sketchfab {\n  &:before {\n    content: @socicon-sketchfab; \n  }\n}\n.socicon-mobcrush {\n  &:before {\n    content: @socicon-mobcrush; \n  }\n}\n.socicon-microsoft {\n  &:before {\n    content: @socicon-microsoft; \n  }\n}\n.socicon-pandora {\n  &:before {\n    content: @socicon-pandora; \n  }\n}\n.socicon-messenger {\n  &:before {\n    content: @socicon-messenger; \n  }\n}\n.socicon-gamewisp {\n  &:before {\n    content: @socicon-gamewisp; \n  }\n}\n.socicon-bloglovin {\n  &:before {\n    content: @socicon-bloglovin; \n  }\n}\n.socicon-tunein {\n  &:before {\n    content: @socicon-tunein; \n  }\n}\n.socicon-gamejolt {\n  &:before {\n    content: @socicon-gamejolt; \n  }\n}\n.socicon-trello {\n  &:before {\n    content: @socicon-trello; \n  }\n}\n.socicon-spreadshirt {\n  &:before {\n    content: @socicon-spreadshirt; \n  }\n}\n.socicon-500px {\n  &:before {\n    content: @socicon-500px; \n  }\n}\n.socicon-8tracks {\n  &:before {\n    content: @socicon-8tracks; \n  }\n}\n.socicon-airbnb {\n  &:before {\n    content: @socicon-airbnb; \n  }\n}\n.socicon-alliance {\n  &:before {\n    content: @socicon-alliance; \n  }\n}\n.socicon-amazon {\n  &:before {\n    content: @socicon-amazon; \n  }\n}\n.socicon-amplement {\n  &:before {\n    content: @socicon-amplement; \n  }\n}\n.socicon-android {\n  &:before {\n    content: @socicon-android; \n  }\n}\n.socicon-angellist {\n  &:before {\n    content: @socicon-angellist; \n  }\n}\n.socicon-apple {\n  &:before {\n    content: @socicon-apple; \n  }\n}\n.socicon-appnet {\n  &:before {\n    content: @socicon-appnet; \n  }\n}\n.socicon-baidu {\n  &:before {\n    content: @socicon-baidu; \n  }\n}\n.socicon-bandcamp {\n  &:before {\n    content: @socicon-bandcamp; \n  }\n}\n.socicon-battlenet {\n  &:before {\n    content: @socicon-battlenet; \n  }\n}\n.socicon-mixer {\n  &:before {\n    content: @socicon-mixer; \n  }\n}\n.socicon-bebee {\n  &:before {\n    content: @socicon-bebee; \n  }\n}\n.socicon-bebo {\n  &:before {\n    content: @socicon-bebo; \n  }\n}\n.socicon-behance {\n  &:before {\n    content: @socicon-behance; \n  }\n}\n.socicon-blizzard {\n  &:before {\n    content: @socicon-blizzard; \n  }\n}\n.socicon-blogger {\n  &:before {\n    content: @socicon-blogger; \n  }\n}\n.socicon-buffer {\n  &:before {\n    content: @socicon-buffer; \n  }\n}\n.socicon-chrome {\n  &:before {\n    content: @socicon-chrome; \n  }\n}\n.socicon-coderwall {\n  &:before {\n    content: @socicon-coderwall; \n  }\n}\n.socicon-curse {\n  &:before {\n    content: @socicon-curse; \n  }\n}\n.socicon-dailymotion {\n  &:before {\n    content: @socicon-dailymotion; \n  }\n}\n.socicon-deezer {\n  &:before {\n    content: @socicon-deezer; \n  }\n}\n.socicon-delicious {\n  &:before {\n    content: @socicon-delicious; \n  }\n}\n.socicon-deviantart {\n  &:before {\n    content: @socicon-deviantart; \n  }\n}\n.socicon-diablo {\n  &:before {\n    content: @socicon-diablo; \n  }\n}\n.socicon-digg {\n  &:before {\n    content: @socicon-digg; \n  }\n}\n.socicon-discord {\n  &:before {\n    content: @socicon-discord; \n  }\n}\n.socicon-disqus {\n  &:before {\n    content: @socicon-disqus; \n  }\n}\n.socicon-douban {\n  &:before {\n    content: @socicon-douban; \n  }\n}\n.socicon-draugiem {\n  &:before {\n    content: @socicon-draugiem; \n  }\n}\n.socicon-dribbble {\n  &:before {\n    content: @socicon-dribbble; \n  }\n}\n.socicon-drupal {\n  &:before {\n    content: @socicon-drupal; \n  }\n}\n.socicon-ebay {\n  &:before {\n    content: @socicon-ebay; \n  }\n}\n.socicon-ello {\n  &:before {\n    content: @socicon-ello; \n  }\n}\n.socicon-endomodo {\n  &:before {\n    content: @socicon-endomodo; \n  }\n}\n.socicon-envato {\n  &:before {\n    content: @socicon-envato; \n  }\n}\n.socicon-etsy {\n  &:before {\n    content: @socicon-etsy; \n  }\n}\n.socicon-facebook {\n  &:before {\n    content: @socicon-facebook; \n  }\n}\n.socicon-feedburner {\n  &:before {\n    content: @socicon-feedburner; \n  }\n}\n.socicon-filmweb {\n  &:before {\n    content: @socicon-filmweb; \n  }\n}\n.socicon-firefox {\n  &:before {\n    content: @socicon-firefox; \n  }\n}\n.socicon-flattr {\n  &:before {\n    content: @socicon-flattr; \n  }\n}\n.socicon-flickr {\n  &:before {\n    content: @socicon-flickr; \n  }\n}\n.socicon-formulr {\n  &:before {\n    content: @socicon-formulr; \n  }\n}\n.socicon-forrst {\n  &:before {\n    content: @socicon-forrst; \n  }\n}\n.socicon-foursquare {\n  &:before {\n    content: @socicon-foursquare; \n  }\n}\n.socicon-friendfeed {\n  &:before {\n    content: @socicon-friendfeed; \n  }\n}\n.socicon-github {\n  &:before {\n    content: @socicon-github; \n  }\n}\n.socicon-goodreads {\n  &:before {\n    content: @socicon-goodreads; \n  }\n}\n.socicon-google {\n  &:before {\n    content: @socicon-google; \n  }\n}\n.socicon-googlescholar {\n  &:before {\n    content: @socicon-googlescholar; \n  }\n}\n.socicon-googlegroups {\n  &:before {\n    content: @socicon-googlegroups; \n  }\n}\n.socicon-googlephotos {\n  &:before {\n    content: @socicon-googlephotos; \n  }\n}\n.socicon-googleplus {\n  &:before {\n    content: @socicon-googleplus; \n  }\n}\n.socicon-grooveshark {\n  &:before {\n    content: @socicon-grooveshark; \n  }\n}\n.socicon-hackerrank {\n  &:before {\n    content: @socicon-hackerrank; \n  }\n}\n.socicon-hearthstone {\n  &:before {\n    content: @socicon-hearthstone; \n  }\n}\n.socicon-hellocoton {\n  &:before {\n    content: @socicon-hellocoton; \n  }\n}\n.socicon-heroes {\n  &:before {\n    content: @socicon-heroes; \n  }\n}\n.socicon-smashcast {\n  &:before {\n    content: @socicon-smashcast; \n  }\n}\n.socicon-horde {\n  &:before {\n    content: @socicon-horde; \n  }\n}\n.socicon-houzz {\n  &:before {\n    content: @socicon-houzz; \n  }\n}\n.socicon-icq {\n  &:before {\n    content: @socicon-icq; \n  }\n}\n.socicon-identica {\n  &:before {\n    content: @socicon-identica; \n  }\n}\n.socicon-imdb {\n  &:before {\n    content: @socicon-imdb; \n  }\n}\n.socicon-instagram {\n  &:before {\n    content: @socicon-instagram; \n  }\n}\n.socicon-issuu {\n  &:before {\n    content: @socicon-issuu; \n  }\n}\n.socicon-istock {\n  &:before {\n    content: @socicon-istock; \n  }\n}\n.socicon-itunes {\n  &:before {\n    content: @socicon-itunes; \n  }\n}\n.socicon-keybase {\n  &:before {\n    content: @socicon-keybase; \n  }\n}\n.socicon-lanyrd {\n  &:before {\n    content: @socicon-lanyrd; \n  }\n}\n.socicon-lastfm {\n  &:before {\n    content: @socicon-lastfm; \n  }\n}\n.socicon-line {\n  &:before {\n    content: @socicon-line; \n  }\n}\n.socicon-linkedin {\n  &:before {\n    content: @socicon-linkedin; \n  }\n}\n.socicon-livejournal {\n  &:before {\n    content: @socicon-livejournal; \n  }\n}\n.socicon-lyft {\n  &:before {\n    content: @socicon-lyft; \n  }\n}\n.socicon-macos {\n  &:before {\n    content: @socicon-macos; \n  }\n}\n.socicon-mail {\n  &:before {\n    content: @socicon-mail; \n  }\n}\n.socicon-medium {\n  &:before {\n    content: @socicon-medium; \n  }\n}\n.socicon-meetup {\n  &:before {\n    content: @socicon-meetup; \n  }\n}\n.socicon-mixcloud {\n  &:before {\n    content: @socicon-mixcloud; \n  }\n}\n.socicon-modelmayhem {\n  &:before {\n    content: @socicon-modelmayhem; \n  }\n}\n.socicon-mumble {\n  &:before {\n    content: @socicon-mumble; \n  }\n}\n.socicon-myspace {\n  &:before {\n    content: @socicon-myspace; \n  }\n}\n.socicon-newsvine {\n  &:before {\n    content: @socicon-newsvine; \n  }\n}\n.socicon-nintendo {\n  &:before {\n    content: @socicon-nintendo; \n  }\n}\n.socicon-npm {\n  &:before {\n    content: @socicon-npm; \n  }\n}\n.socicon-odnoklassniki {\n  &:before {\n    content: @socicon-odnoklassniki; \n  }\n}\n.socicon-openid {\n  &:before {\n    content: @socicon-openid; \n  }\n}\n.socicon-opera {\n  &:before {\n    content: @socicon-opera; \n  }\n}\n.socicon-outlook {\n  &:before {\n    content: @socicon-outlook; \n  }\n}\n.socicon-overwatch {\n  &:before {\n    content: @socicon-overwatch; \n  }\n}\n.socicon-patreon {\n  &:before {\n    content: @socicon-patreon; \n  }\n}\n.socicon-paypal {\n  &:before {\n    content: @socicon-paypal; \n  }\n}\n.socicon-periscope {\n  &:before {\n    content: @socicon-periscope; \n  }\n}\n.socicon-persona {\n  &:before {\n    content: @socicon-persona; \n  }\n}\n.socicon-pinterest {\n  &:before {\n    content: @socicon-pinterest; \n  }\n}\n.socicon-play {\n  &:before {\n    content: @socicon-play; \n  }\n}\n.socicon-player {\n  &:before {\n    content: @socicon-player; \n  }\n}\n.socicon-playstation {\n  &:before {\n    content: @socicon-playstation; \n  }\n}\n.socicon-pocket {\n  &:before {\n    content: @socicon-pocket; \n  }\n}\n.socicon-qq {\n  &:before {\n    content: @socicon-qq; \n  }\n}\n.socicon-quora {\n  &:before {\n    content: @socicon-quora; \n  }\n}\n.socicon-raidcall {\n  &:before {\n    content: @socicon-raidcall; \n  }\n}\n.socicon-ravelry {\n  &:before {\n    content: @socicon-ravelry; \n  }\n}\n.socicon-reddit {\n  &:before {\n    content: @socicon-reddit; \n  }\n}\n.socicon-renren {\n  &:before {\n    content: @socicon-renren; \n  }\n}\n.socicon-researchgate {\n  &:before {\n    content: @socicon-researchgate; \n  }\n}\n.socicon-residentadvisor {\n  &:before {\n    content: @socicon-residentadvisor; \n  }\n}\n.socicon-reverbnation {\n  &:before {\n    content: @socicon-reverbnation; \n  }\n}\n.socicon-rss {\n  &:before {\n    content: @socicon-rss; \n  }\n}\n.socicon-sharethis {\n  &:before {\n    content: @socicon-sharethis; \n  }\n}\n.socicon-skype {\n  &:before {\n    content: @socicon-skype; \n  }\n}\n.socicon-slideshare {\n  &:before {\n    content: @socicon-slideshare; \n  }\n}\n.socicon-smugmug {\n  &:before {\n    content: @socicon-smugmug; \n  }\n}\n.socicon-snapchat {\n  &:before {\n    content: @socicon-snapchat; \n  }\n}\n.socicon-songkick {\n  &:before {\n    content: @socicon-songkick; \n  }\n}\n.socicon-soundcloud {\n  &:before {\n    content: @socicon-soundcloud; \n  }\n}\n.socicon-spotify {\n  &:before {\n    content: @socicon-spotify; \n  }\n}\n.socicon-stackexchange {\n  &:before {\n    content: @socicon-stackexchange; \n  }\n}\n.socicon-stackoverflow {\n  &:before {\n    content: @socicon-stackoverflow; \n  }\n}\n.socicon-starcraft {\n  &:before {\n    content: @socicon-starcraft; \n  }\n}\n.socicon-stayfriends {\n  &:before {\n    content: @socicon-stayfriends; \n  }\n}\n.socicon-steam {\n  &:before {\n    content: @socicon-steam; \n  }\n}\n.socicon-storehouse {\n  &:before {\n    content: @socicon-storehouse; \n  }\n}\n.socicon-strava {\n  &:before {\n    content: @socicon-strava; \n  }\n}\n.socicon-streamjar {\n  &:before {\n    content: @socicon-streamjar; \n  }\n}\n.socicon-stumbleupon {\n  &:before {\n    content: @socicon-stumbleupon; \n  }\n}\n.socicon-swarm {\n  &:before {\n    content: @socicon-swarm; \n  }\n}\n.socicon-teamspeak {\n  &:before {\n    content: @socicon-teamspeak; \n  }\n}\n.socicon-teamviewer {\n  &:before {\n    content: @socicon-teamviewer; \n  }\n}\n.socicon-technorati {\n  &:before {\n    content: @socicon-technorati; \n  }\n}\n.socicon-telegram {\n  &:before {\n    content: @socicon-telegram; \n  }\n}\n.socicon-tripadvisor {\n  &:before {\n    content: @socicon-tripadvisor; \n  }\n}\n.socicon-tripit {\n  &:before {\n    content: @socicon-tripit; \n  }\n}\n.socicon-triplej {\n  &:before {\n    content: @socicon-triplej; \n  }\n}\n.socicon-tumblr {\n  &:before {\n    content: @socicon-tumblr; \n  }\n}\n.socicon-twitch {\n  &:before {\n    content: @socicon-twitch; \n  }\n}\n.socicon-twitter {\n  &:before {\n    content: @socicon-twitter; \n  }\n}\n.socicon-uber {\n  &:before {\n    content: @socicon-uber; \n  }\n}\n.socicon-ventrilo {\n  &:before {\n    content: @socicon-ventrilo; \n  }\n}\n.socicon-viadeo {\n  &:before {\n    content: @socicon-viadeo; \n  }\n}\n.socicon-viber {\n  &:before {\n    content: @socicon-viber; \n  }\n}\n.socicon-viewbug {\n  &:before {\n    content: @socicon-viewbug; \n  }\n}\n.socicon-vimeo {\n  &:before {\n    content: @socicon-vimeo; \n  }\n}\n.socicon-vine {\n  &:before {\n    content: @socicon-vine; \n  }\n}\n.socicon-vkontakte {\n  &:before {\n    content: @socicon-vkontakte; \n  }\n}\n.socicon-warcraft {\n  &:before {\n    content: @socicon-warcraft; \n  }\n}\n.socicon-wechat {\n  &:before {\n    content: @socicon-wechat; \n  }\n}\n.socicon-weibo {\n  &:before {\n    content: @socicon-weibo; \n  }\n}\n.socicon-whatsapp {\n  &:before {\n    content: @socicon-whatsapp; \n  }\n}\n.socicon-wikipedia {\n  &:before {\n    content: @socicon-wikipedia; \n  }\n}\n.socicon-windows {\n  &:before {\n    content: @socicon-windows; \n  }\n}\n.socicon-wordpress {\n  &:before {\n    content: @socicon-wordpress; \n  }\n}\n.socicon-wykop {\n  &:before {\n    content: @socicon-wykop; \n  }\n}\n.socicon-xbox {\n  &:before {\n    content: @socicon-xbox; \n  }\n}\n.socicon-xing {\n  &:before {\n    content: @socicon-xing; \n  }\n}\n.socicon-yahoo {\n  &:before {\n    content: @socicon-yahoo; \n  }\n}\n.socicon-yammer {\n  &:before {\n    content: @socicon-yammer; \n  }\n}\n.socicon-yandex {\n  &:before {\n    content: @socicon-yandex; \n  }\n}\n.socicon-yelp {\n  &:before {\n    content: @socicon-yelp; \n  }\n}\n.socicon-younow {\n  &:before {\n    content: @socicon-younow; \n  }\n}\n.socicon-youtube {\n  &:before {\n    content: @socicon-youtube; \n  }\n}\n.socicon-zapier {\n  &:before {\n    content: @socicon-zapier; \n  }\n}\n.socicon-zerply {\n  &:before {\n    content: @socicon-zerply; \n  }\n}\n.socicon-zomato {\n  &:before {\n    content: @socicon-zomato; \n  }\n}\n.socicon-zynga {\n  &:before {\n    content: @socicon-zynga; \n  }\n}\n\n"
  },
  {
    "path": "src/lib/socicon/variables.less",
    "content": "@icomoon-font-path: \"fonts\";\n\n@socicon-internet: \"\\e957\";\n@socicon-moddb: \"\\e94b\";\n@socicon-indiedb: \"\\e94c\";\n@socicon-traxsource: \"\\e94d\";\n@socicon-gamefor: \"\\e94e\";\n@socicon-pixiv: \"\\e94f\";\n@socicon-myanimelist: \"\\e950\";\n@socicon-blackberry: \"\\e951\";\n@socicon-wickr: \"\\e952\";\n@socicon-spip: \"\\e953\";\n@socicon-napster: \"\\e954\";\n@socicon-beatport: \"\\e955\";\n@socicon-hackerone: \"\\e956\";\n@socicon-hackernews: \"\\e946\";\n@socicon-smashwords: \"\\e947\";\n@socicon-kobo: \"\\e948\";\n@socicon-bookbub: \"\\e949\";\n@socicon-mailru: \"\\e94a\";\n@socicon-gitlab: \"\\e945\";\n@socicon-instructables: \"\\e944\";\n@socicon-portfolio: \"\\e943\";\n@socicon-codered: \"\\e940\";\n@socicon-origin: \"\\e941\";\n@socicon-nextdoor: \"\\e942\";\n@socicon-udemy: \"\\e93f\";\n@socicon-livemaster: \"\\e93e\";\n@socicon-crunchbase: \"\\e93b\";\n@socicon-homefy: \"\\e93c\";\n@socicon-calendly: \"\\e93d\";\n@socicon-realtor: \"\\e90f\";\n@socicon-tidal: \"\\e910\";\n@socicon-qobuz: \"\\e911\";\n@socicon-natgeo: \"\\e912\";\n@socicon-mastodon: \"\\e913\";\n@socicon-unsplash: \"\\e914\";\n@socicon-homeadvisor: \"\\e915\";\n@socicon-angieslist: \"\\e916\";\n@socicon-codepen: \"\\e917\";\n@socicon-slack: \"\\e918\";\n@socicon-openaigym: \"\\e919\";\n@socicon-logmein: \"\\e91a\";\n@socicon-fiverr: \"\\e91b\";\n@socicon-gotomeeting: \"\\e91c\";\n@socicon-aliexpress: \"\\e91d\";\n@socicon-guru: \"\\e91e\";\n@socicon-appstore: \"\\e91f\";\n@socicon-homes: \"\\e920\";\n@socicon-zoom: \"\\e921\";\n@socicon-alibaba: \"\\e922\";\n@socicon-craigslist: \"\\e923\";\n@socicon-wix: \"\\e924\";\n@socicon-redfin: \"\\e925\";\n@socicon-googlecalendar: \"\\e926\";\n@socicon-shopify: \"\\e927\";\n@socicon-freelancer: \"\\e928\";\n@socicon-seedrs: \"\\e929\";\n@socicon-bing: \"\\e92a\";\n@socicon-doodle: \"\\e92b\";\n@socicon-bonanza: \"\\e92c\";\n@socicon-squarespace: \"\\e92d\";\n@socicon-toptal: \"\\e92e\";\n@socicon-gust: \"\\e92f\";\n@socicon-ask: \"\\e930\";\n@socicon-trulia: \"\\e931\";\n@socicon-loomly: \"\\e932\";\n@socicon-ghost: \"\\e933\";\n@socicon-upwork: \"\\e934\";\n@socicon-fundable: \"\\e935\";\n@socicon-booking: \"\\e936\";\n@socicon-googlemaps: \"\\e937\";\n@socicon-zillow: \"\\e938\";\n@socicon-niconico: \"\\e939\";\n@socicon-toneden: \"\\e93a\";\n@socicon-augment: \"\\e908\";\n@socicon-bitbucket: \"\\e909\";\n@socicon-fyuse: \"\\e90a\";\n@socicon-yt-gaming: \"\\e90b\";\n@socicon-sketchfab: \"\\e90c\";\n@socicon-mobcrush: \"\\e90d\";\n@socicon-microsoft: \"\\e90e\";\n@socicon-pandora: \"\\e907\";\n@socicon-messenger: \"\\e906\";\n@socicon-gamewisp: \"\\e905\";\n@socicon-bloglovin: \"\\e904\";\n@socicon-tunein: \"\\e903\";\n@socicon-gamejolt: \"\\e901\";\n@socicon-trello: \"\\e902\";\n@socicon-spreadshirt: \"\\e900\";\n@socicon-500px: \"\\e000\";\n@socicon-8tracks: \"\\e001\";\n@socicon-airbnb: \"\\e002\";\n@socicon-alliance: \"\\e003\";\n@socicon-amazon: \"\\e004\";\n@socicon-amplement: \"\\e005\";\n@socicon-android: \"\\e006\";\n@socicon-angellist: \"\\e007\";\n@socicon-apple: \"\\e008\";\n@socicon-appnet: \"\\e009\";\n@socicon-baidu: \"\\e00a\";\n@socicon-bandcamp: \"\\e00b\";\n@socicon-battlenet: \"\\e00c\";\n@socicon-mixer: \"\\e00d\";\n@socicon-bebee: \"\\e00e\";\n@socicon-bebo: \"\\e00f\";\n@socicon-behance: \"\\e010\";\n@socicon-blizzard: \"\\e011\";\n@socicon-blogger: \"\\e012\";\n@socicon-buffer: \"\\e013\";\n@socicon-chrome: \"\\e014\";\n@socicon-coderwall: \"\\e015\";\n@socicon-curse: \"\\e016\";\n@socicon-dailymotion: \"\\e017\";\n@socicon-deezer: \"\\e018\";\n@socicon-delicious: \"\\e019\";\n@socicon-deviantart: \"\\e01a\";\n@socicon-diablo: \"\\e01b\";\n@socicon-digg: \"\\e01c\";\n@socicon-discord: \"\\e01d\";\n@socicon-disqus: \"\\e01e\";\n@socicon-douban: \"\\e01f\";\n@socicon-draugiem: \"\\e020\";\n@socicon-dribbble: \"\\e021\";\n@socicon-drupal: \"\\e022\";\n@socicon-ebay: \"\\e023\";\n@socicon-ello: \"\\e024\";\n@socicon-endomodo: \"\\e025\";\n@socicon-envato: \"\\e026\";\n@socicon-etsy: \"\\e027\";\n@socicon-facebook: \"\\e028\";\n@socicon-feedburner: \"\\e029\";\n@socicon-filmweb: \"\\e02a\";\n@socicon-firefox: \"\\e02b\";\n@socicon-flattr: \"\\e02c\";\n@socicon-flickr: \"\\e02d\";\n@socicon-formulr: \"\\e02e\";\n@socicon-forrst: \"\\e02f\";\n@socicon-foursquare: \"\\e030\";\n@socicon-friendfeed: \"\\e031\";\n@socicon-github: \"\\e032\";\n@socicon-goodreads: \"\\e033\";\n@socicon-google: \"\\e034\";\n@socicon-googlescholar: \"\\e035\";\n@socicon-googlegroups: \"\\e036\";\n@socicon-googlephotos: \"\\e037\";\n@socicon-googleplus: \"\\e038\";\n@socicon-grooveshark: \"\\e039\";\n@socicon-hackerrank: \"\\e03a\";\n@socicon-hearthstone: \"\\e03b\";\n@socicon-hellocoton: \"\\e03c\";\n@socicon-heroes: \"\\e03d\";\n@socicon-smashcast: \"\\e03e\";\n@socicon-horde: \"\\e03f\";\n@socicon-houzz: \"\\e040\";\n@socicon-icq: \"\\e041\";\n@socicon-identica: \"\\e042\";\n@socicon-imdb: \"\\e043\";\n@socicon-instagram: \"\\e044\";\n@socicon-issuu: \"\\e045\";\n@socicon-istock: \"\\e046\";\n@socicon-itunes: \"\\e047\";\n@socicon-keybase: \"\\e048\";\n@socicon-lanyrd: \"\\e049\";\n@socicon-lastfm: \"\\e04a\";\n@socicon-line: \"\\e04b\";\n@socicon-linkedin: \"\\e04c\";\n@socicon-livejournal: \"\\e04d\";\n@socicon-lyft: \"\\e04e\";\n@socicon-macos: \"\\e04f\";\n@socicon-mail: \"\\e050\";\n@socicon-medium: \"\\e051\";\n@socicon-meetup: \"\\e052\";\n@socicon-mixcloud: \"\\e053\";\n@socicon-modelmayhem: \"\\e054\";\n@socicon-mumble: \"\\e055\";\n@socicon-myspace: \"\\e056\";\n@socicon-newsvine: \"\\e057\";\n@socicon-nintendo: \"\\e058\";\n@socicon-npm: \"\\e059\";\n@socicon-odnoklassniki: \"\\e05a\";\n@socicon-openid: \"\\e05b\";\n@socicon-opera: \"\\e05c\";\n@socicon-outlook: \"\\e05d\";\n@socicon-overwatch: \"\\e05e\";\n@socicon-patreon: \"\\e05f\";\n@socicon-paypal: \"\\e060\";\n@socicon-periscope: \"\\e061\";\n@socicon-persona: \"\\e062\";\n@socicon-pinterest: \"\\e063\";\n@socicon-play: \"\\e064\";\n@socicon-player: \"\\e065\";\n@socicon-playstation: \"\\e066\";\n@socicon-pocket: \"\\e067\";\n@socicon-qq: \"\\e068\";\n@socicon-quora: \"\\e069\";\n@socicon-raidcall: \"\\e06a\";\n@socicon-ravelry: \"\\e06b\";\n@socicon-reddit: \"\\e06c\";\n@socicon-renren: \"\\e06d\";\n@socicon-researchgate: \"\\e06e\";\n@socicon-residentadvisor: \"\\e06f\";\n@socicon-reverbnation: \"\\e070\";\n@socicon-rss: \"\\e071\";\n@socicon-sharethis: \"\\e072\";\n@socicon-skype: \"\\e073\";\n@socicon-slideshare: \"\\e074\";\n@socicon-smugmug: \"\\e075\";\n@socicon-snapchat: \"\\e076\";\n@socicon-songkick: \"\\e077\";\n@socicon-soundcloud: \"\\e078\";\n@socicon-spotify: \"\\e079\";\n@socicon-stackexchange: \"\\e07a\";\n@socicon-stackoverflow: \"\\e07b\";\n@socicon-starcraft: \"\\e07c\";\n@socicon-stayfriends: \"\\e07d\";\n@socicon-steam: \"\\e07e\";\n@socicon-storehouse: \"\\e07f\";\n@socicon-strava: \"\\e080\";\n@socicon-streamjar: \"\\e081\";\n@socicon-stumbleupon: \"\\e082\";\n@socicon-swarm: \"\\e083\";\n@socicon-teamspeak: \"\\e084\";\n@socicon-teamviewer: \"\\e085\";\n@socicon-technorati: \"\\e086\";\n@socicon-telegram: \"\\e087\";\n@socicon-tripadvisor: \"\\e088\";\n@socicon-tripit: \"\\e089\";\n@socicon-triplej: \"\\e08a\";\n@socicon-tumblr: \"\\e08b\";\n@socicon-twitch: \"\\e08c\";\n@socicon-twitter: \"\\e08d\";\n@socicon-uber: \"\\e08e\";\n@socicon-ventrilo: \"\\e08f\";\n@socicon-viadeo: \"\\e090\";\n@socicon-viber: \"\\e091\";\n@socicon-viewbug: \"\\e092\";\n@socicon-vimeo: \"\\e093\";\n@socicon-vine: \"\\e094\";\n@socicon-vkontakte: \"\\e095\";\n@socicon-warcraft: \"\\e096\";\n@socicon-wechat: \"\\e097\";\n@socicon-weibo: \"\\e098\";\n@socicon-whatsapp: \"\\e099\";\n@socicon-wikipedia: \"\\e09a\";\n@socicon-windows: \"\\e09b\";\n@socicon-wordpress: \"\\e09c\";\n@socicon-wykop: \"\\e09d\";\n@socicon-xbox: \"\\e09e\";\n@socicon-xing: \"\\e09f\";\n@socicon-yahoo: \"\\e0a0\";\n@socicon-yammer: \"\\e0a1\";\n@socicon-yandex: \"\\e0a2\";\n@socicon-yelp: \"\\e0a3\";\n@socicon-younow: \"\\e0a4\";\n@socicon-youtube: \"\\e0a5\";\n@socicon-zapier: \"\\e0a6\";\n@socicon-zerply: \"\\e0a7\";\n@socicon-zomato: \"\\e0a8\";\n@socicon-zynga: \"\\e0a9\";\n\n"
  },
  {
    "path": "test.html",
    "content": "<!DOCTYPE html>\n<html>\n  <head>\n    <title>Tests for Scale Workshop</title>\n    <meta charset=\"utf-8\" />\n    <link rel=\"stylesheet\" href=\"https://unpkg.com/mocha@6.0.2/mocha.css\" />\n  </head>\n  <body>\n    <!-- mocha will render the test results here -->\n    <div id=\"mocha\"></div>\n\n    <script src=\"https://unpkg.com/expect@24.5.0/build-es5/index.js\"></script>\n    <script src=\"https://unpkg.com/mocha@6.0.2/mocha.js\"></script>\n\n    <!-- https://mochajs.org/#running-mocha-in-the-browser -->\n    <script class=\"mocha-init\">\n      mocha.setup(\"bdd\");\n      mocha.checkLeaks();\n    </script>\n\n    <!-- add the source files here -->\n    <script src=\"src/lib/decimal.js\"></script>\n    <script src=\"src/js/constants.js\"></script>\n    <script src=\"src/js/helpers.js\"></script>\n\n    <!-- add the test files here -->\n    <script src=\"dev/test/helpers.spec.js\"></script>\n\n    <script class=\"mocha-exec\">\n      mocha.run();\n    </script>\n  </body>\n</html>\n"
  }
]