[
  {
    "path": ".gitattributes",
    "content": "terraform/* linguist-detectable=false"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n/test\n/frontend/stats.json\n/frontend/tests/data/rom-formats/psp/retail/*\n/frontend/tests/data/rom-formats/psp/make-iso/*\n/frontend/tests/data/rom-formats/sms/retail/*\n/frontend/tests/data/save-formats/flashcarts/gba/goombaemulator/retail/*\n/frontend/tests/data/save-formats/flashcarts/gba/pocketnesemulator/retail/*\n/frontend/tests/data/save-formats/flashcarts/gba/smsadvanceemulator/retail/*\n/frontend/tests/data/save-formats/flashcarts/n64/gb64emulator/retail/*\n/frontend/tests/config.local.js\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"vue.server.path\": \"node_modules/@vue/language-server\",\n}"
  },
  {
    "path": "LICENSE",
    "content": "                    GNU GENERAL PUBLIC LICENSE\n                       Version 3, 29 June 2007\n\n Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>\n Everyone is permitted to copy and distribute verbatim copies\n of this license document, but changing it is not allowed.\n\n                            Preamble\n\n  The GNU General Public License is a free, copyleft license for\nsoftware and other kinds of works.\n\n  The licenses for most software and other practical works are designed\nto take away your freedom to share and change the works.  By contrast,\nthe GNU General Public License is intended to guarantee your freedom to\nshare and change all versions of a program--to make sure it remains free\nsoftware for all its users.  We, the Free Software Foundation, use the\nGNU General Public License for most of our software; it applies also to\nany other work released this way by its authors.  You can apply it to\nyour programs, too.\n\n  When we speak of free software, we are referring to freedom, not\nprice.  Our General Public Licenses are designed to make sure that you\nhave the freedom to distribute copies of free software (and charge for\nthem if you wish), that you receive source code or can get it if you\nwant it, that you can change the software or use pieces of it in new\nfree programs, and that you know you can do these things.\n\n  To protect your rights, we need to prevent others from denying you\nthese rights or asking you to surrender the rights.  Therefore, you have\ncertain responsibilities if you distribute copies of the software, or if\nyou modify it: responsibilities to respect the freedom of others.\n\n  For example, if you distribute copies of such a program, whether\ngratis or for a fee, you must pass on to the recipients the same\nfreedoms that you received.  You must make sure that they, too, receive\nor can get the source code.  And you must show them these terms so they\nknow their rights.\n\n  Developers that use the GNU GPL protect your rights with two steps:\n(1) assert copyright on the software, and (2) offer you this License\ngiving you legal permission to copy, distribute and/or modify it.\n\n  For the developers' and authors' protection, the GPL clearly explains\nthat there is no warranty for this free software.  For both users' and\nauthors' sake, the GPL requires that modified versions be marked as\nchanged, so that their problems will not be attributed erroneously to\nauthors of previous versions.\n\n  Some devices are designed to deny users access to install or run\nmodified versions of the software inside them, although the manufacturer\ncan do so.  This is fundamentally incompatible with the aim of\nprotecting users' freedom to change the software.  The systematic\npattern of such abuse occurs in the area of products for individuals to\nuse, which is precisely where it is most unacceptable.  Therefore, we\nhave designed this version of the GPL to prohibit the practice for those\nproducts.  If such problems arise substantially in other domains, we\nstand ready to extend this provision to those domains in future versions\nof the GPL, as needed to protect the freedom of users.\n\n  Finally, every program is threatened constantly by software patents.\nStates should not allow patents to restrict development and use of\nsoftware on general-purpose computers, but in those that do, we wish to\navoid the special danger that patents applied to a free program could\nmake it effectively proprietary.  To prevent this, the GPL assures that\npatents cannot be used to render the program non-free.\n\n  The precise terms and conditions for copying, distribution and\nmodification follow.\n\n                       TERMS AND CONDITIONS\n\n  0. Definitions.\n\n  \"This License\" refers to version 3 of the GNU General Public License.\n\n  \"Copyright\" also means copyright-like laws that apply to other kinds of\nworks, such as semiconductor masks.\n\n  \"The Program\" refers to any copyrightable work licensed under this\nLicense.  Each licensee is addressed as \"you\".  \"Licensees\" and\n\"recipients\" may be individuals or organizations.\n\n  To \"modify\" a work means to copy from or adapt all or part of the work\nin a fashion requiring copyright permission, other than the making of an\nexact copy.  The resulting work is called a \"modified version\" of the\nearlier work or a work \"based on\" the earlier work.\n\n  A \"covered work\" means either the unmodified Program or a work based\non the Program.\n\n  To \"propagate\" a work means to do anything with it that, without\npermission, would make you directly or secondarily liable for\ninfringement under applicable copyright law, except executing it on a\ncomputer or modifying a private copy.  Propagation includes copying,\ndistribution (with or without modification), making available to the\npublic, and in some countries other activities as well.\n\n  To \"convey\" a work means any kind of propagation that enables other\nparties to make or receive copies.  Mere interaction with a user through\na computer network, with no transfer of a copy, is not conveying.\n\n  An interactive user interface displays \"Appropriate Legal Notices\"\nto the extent that it includes a convenient and prominently visible\nfeature that (1) displays an appropriate copyright notice, and (2)\ntells the user that there is no warranty for the work (except to the\nextent that warranties are provided), that licensees may convey the\nwork under this License, and how to view a copy of this License.  If\nthe interface presents a list of user commands or options, such as a\nmenu, a prominent item in the list meets this criterion.\n\n  1. Source Code.\n\n  The \"source code\" for a work means the preferred form of the work\nfor making modifications to it.  \"Object code\" means any non-source\nform of a work.\n\n  A \"Standard Interface\" means an interface that either is an official\nstandard defined by a recognized standards body, or, in the case of\ninterfaces specified for a particular programming language, one that\nis widely used among developers working in that language.\n\n  The \"System Libraries\" of an executable work include anything, other\nthan the work as a whole, that (a) is included in the normal form of\npackaging a Major Component, but which is not part of that Major\nComponent, and (b) serves only to enable use of the work with that\nMajor Component, or to implement a Standard Interface for which an\nimplementation is available to the public in source code form.  A\n\"Major Component\", in this context, means a major essential component\n(kernel, window system, and so on) of the specific operating system\n(if any) on which the executable work runs, or a compiler used to\nproduce the work, or an object code interpreter used to run it.\n\n  The \"Corresponding Source\" for a work in object code form means all\nthe source code needed to generate, install, and (for an executable\nwork) run the object code and to modify the work, including scripts to\ncontrol those activities.  However, it does not include the work's\nSystem Libraries, or general-purpose tools or generally available free\nprograms which are used unmodified in performing those activities but\nwhich are not part of the work.  For example, Corresponding Source\nincludes interface definition files associated with source files for\nthe work, and the source code for shared libraries and dynamically\nlinked subprograms that the work is specifically designed to require,\nsuch as by intimate data communication or control flow between those\nsubprograms and other parts of the work.\n\n  The Corresponding Source need not include anything that users\ncan regenerate automatically from other parts of the Corresponding\nSource.\n\n  The Corresponding Source for a work in source code form is that\nsame work.\n\n  2. Basic Permissions.\n\n  All rights granted under this License are granted for the term of\ncopyright on the Program, and are irrevocable provided the stated\nconditions are met.  This License explicitly affirms your unlimited\npermission to run the unmodified Program.  The output from running a\ncovered work is covered by this License only if the output, given its\ncontent, constitutes a covered work.  This License acknowledges your\nrights of fair use or other equivalent, as provided by copyright law.\n\n  You may make, run and propagate covered works that you do not\nconvey, without conditions so long as your license otherwise remains\nin force.  You may convey covered works to others for the sole purpose\nof having them make modifications exclusively for you, or provide you\nwith facilities for running those works, provided that you comply with\nthe terms of this License in conveying all material for which you do\nnot control copyright.  Those thus making or running the covered works\nfor you must do so exclusively on your behalf, under your direction\nand control, on terms that prohibit them from making any copies of\nyour copyrighted material outside their relationship with you.\n\n  Conveying under any other circumstances is permitted solely under\nthe conditions stated below.  Sublicensing is not allowed; section 10\nmakes it unnecessary.\n\n  3. Protecting Users' Legal Rights From Anti-Circumvention Law.\n\n  No covered work shall be deemed part of an effective technological\nmeasure under any applicable law fulfilling obligations under article\n11 of the WIPO copyright treaty adopted on 20 December 1996, or\nsimilar laws prohibiting or restricting circumvention of such\nmeasures.\n\n  When you convey a covered work, you waive any legal power to forbid\ncircumvention of technological measures to the extent such circumvention\nis effected by exercising rights under this License with respect to\nthe covered work, and you disclaim any intention to limit operation or\nmodification of the work as a means of enforcing, against the work's\nusers, your or third parties' legal rights to forbid circumvention of\ntechnological measures.\n\n  4. Conveying Verbatim Copies.\n\n  You may convey verbatim copies of the Program's source code as you\nreceive it, in any medium, provided that you conspicuously and\nappropriately publish on each copy an appropriate copyright notice;\nkeep intact all notices stating that this License and any\nnon-permissive terms added in accord with section 7 apply to the code;\nkeep intact all notices of the absence of any warranty; and give all\nrecipients a copy of this License along with the Program.\n\n  You may charge any price or no price for each copy that you convey,\nand you may offer support or warranty protection for a fee.\n\n  5. Conveying Modified Source Versions.\n\n  You may convey a work based on the Program, or the modifications to\nproduce it from the Program, in the form of source code under the\nterms of section 4, provided that you also meet all of these conditions:\n\n    a) The work must carry prominent notices stating that you modified\n    it, and giving a relevant date.\n\n    b) The work must carry prominent notices stating that it is\n    released under this License and any conditions added under section\n    7.  This requirement modifies the requirement in section 4 to\n    \"keep intact all notices\".\n\n    c) You must license the entire work, as a whole, under this\n    License to anyone who comes into possession of a copy.  This\n    License will therefore apply, along with any applicable section 7\n    additional terms, to the whole of the work, and all its parts,\n    regardless of how they are packaged.  This License gives no\n    permission to license the work in any other way, but it does not\n    invalidate such permission if you have separately received it.\n\n    d) If the work has interactive user interfaces, each must display\n    Appropriate Legal Notices; however, if the Program has interactive\n    interfaces that do not display Appropriate Legal Notices, your\n    work need not make them do so.\n\n  A compilation of a covered work with other separate and independent\nworks, which are not by their nature extensions of the covered work,\nand which are not combined with it such as to form a larger program,\nin or on a volume of a storage or distribution medium, is called an\n\"aggregate\" if the compilation and its resulting copyright are not\nused to limit the access or legal rights of the compilation's users\nbeyond what the individual works permit.  Inclusion of a covered work\nin an aggregate does not cause this License to apply to the other\nparts of the aggregate.\n\n  6. Conveying Non-Source Forms.\n\n  You may convey a covered work in object code form under the terms\nof sections 4 and 5, provided that you also convey the\nmachine-readable Corresponding Source under the terms of this License,\nin one of these ways:\n\n    a) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by the\n    Corresponding Source fixed on a durable physical medium\n    customarily used for software interchange.\n\n    b) Convey the object code in, or embodied in, a physical product\n    (including a physical distribution medium), accompanied by a\n    written offer, valid for at least three years and valid for as\n    long as you offer spare parts or customer support for that product\n    model, to give anyone who possesses the object code either (1) a\n    copy of the Corresponding Source for all the software in the\n    product that is covered by this License, on a durable physical\n    medium customarily used for software interchange, for a price no\n    more than your reasonable cost of physically performing this\n    conveying of source, or (2) access to copy the\n    Corresponding Source from a network server at no charge.\n\n    c) Convey individual copies of the object code with a copy of the\n    written offer to provide the Corresponding Source.  This\n    alternative is allowed only occasionally and noncommercially, and\n    only if you received the object code with such an offer, in accord\n    with subsection 6b.\n\n    d) Convey the object code by offering access from a designated\n    place (gratis or for a charge), and offer equivalent access to the\n    Corresponding Source in the same way through the same place at no\n    further charge.  You need not require recipients to copy the\n    Corresponding Source along with the object code.  If the place to\n    copy the object code is a network server, the Corresponding Source\n    may be on a different server (operated by you or a third party)\n    that supports equivalent copying facilities, provided you maintain\n    clear directions next to the object code saying where to find the\n    Corresponding Source.  Regardless of what server hosts the\n    Corresponding Source, you remain obligated to ensure that it is\n    available for as long as needed to satisfy these requirements.\n\n    e) Convey the object code using peer-to-peer transmission, provided\n    you inform other peers where the object code and Corresponding\n    Source of the work are being offered to the general public at no\n    charge under subsection 6d.\n\n  A separable portion of the object code, whose source code is excluded\nfrom the Corresponding Source as a System Library, need not be\nincluded in conveying the object code work.\n\n  A \"User Product\" is either (1) a \"consumer product\", which means any\ntangible personal property which is normally used for personal, family,\nor household purposes, or (2) anything designed or sold for incorporation\ninto a dwelling.  In determining whether a product is a consumer product,\ndoubtful cases shall be resolved in favor of coverage.  For a particular\nproduct received by a particular user, \"normally used\" refers to a\ntypical or common use of that class of product, regardless of the status\nof the particular user or of the way in which the particular user\nactually uses, or expects or is expected to use, the product.  A product\nis a consumer product regardless of whether the product has substantial\ncommercial, industrial or non-consumer uses, unless such uses represent\nthe only significant mode of use of the product.\n\n  \"Installation Information\" for a User Product means any methods,\nprocedures, authorization keys, or other information required to install\nand execute modified versions of a covered work in that User Product from\na modified version of its Corresponding Source.  The information must\nsuffice to ensure that the continued functioning of the modified object\ncode is in no case prevented or interfered with solely because\nmodification has been made.\n\n  If you convey an object code work under this section in, or with, or\nspecifically for use in, a User Product, and the conveying occurs as\npart of a transaction in which the right of possession and use of the\nUser Product is transferred to the recipient in perpetuity or for a\nfixed term (regardless of how the transaction is characterized), the\nCorresponding Source conveyed under this section must be accompanied\nby the Installation Information.  But this requirement does not apply\nif neither you nor any third party retains the ability to install\nmodified object code on the User Product (for example, the work has\nbeen installed in ROM).\n\n  The requirement to provide Installation Information does not include a\nrequirement to continue to provide support service, warranty, or updates\nfor a work that has been modified or installed by the recipient, or for\nthe User Product in which it has been modified or installed.  Access to a\nnetwork may be denied when the modification itself materially and\nadversely affects the operation of the network or violates the rules and\nprotocols for communication across the network.\n\n  Corresponding Source conveyed, and Installation Information provided,\nin accord with this section must be in a format that is publicly\ndocumented (and with an implementation available to the public in\nsource code form), and must require no special password or key for\nunpacking, reading or copying.\n\n  7. Additional Terms.\n\n  \"Additional permissions\" are terms that supplement the terms of this\nLicense by making exceptions from one or more of its conditions.\nAdditional permissions that are applicable to the entire Program shall\nbe treated as though they were included in this License, to the extent\nthat they are valid under applicable law.  If additional permissions\napply only to part of the Program, that part may be used separately\nunder those permissions, but the entire Program remains governed by\nthis License without regard to the additional permissions.\n\n  When you convey a copy of a covered work, you may at your option\nremove any additional permissions from that copy, or from any part of\nit.  (Additional permissions may be written to require their own\nremoval in certain cases when you modify the work.)  You may place\nadditional permissions on material, added by you to a covered work,\nfor which you have or can give appropriate copyright permission.\n\n  Notwithstanding any other provision of this License, for material you\nadd to a covered work, you may (if authorized by the copyright holders of\nthat material) supplement the terms of this License with terms:\n\n    a) Disclaiming warranty or limiting liability differently from the\n    terms of sections 15 and 16 of this License; or\n\n    b) Requiring preservation of specified reasonable legal notices or\n    author attributions in that material or in the Appropriate Legal\n    Notices displayed by works containing it; or\n\n    c) Prohibiting misrepresentation of the origin of that material, or\n    requiring that modified versions of such material be marked in\n    reasonable ways as different from the original version; or\n\n    d) Limiting the use for publicity purposes of names of licensors or\n    authors of the material; or\n\n    e) Declining to grant rights under trademark law for use of some\n    trade names, trademarks, or service marks; or\n\n    f) Requiring indemnification of licensors and authors of that\n    material by anyone who conveys the material (or modified versions of\n    it) with contractual assumptions of liability to the recipient, for\n    any liability that these contractual assumptions directly impose on\n    those licensors and authors.\n\n  All other non-permissive additional terms are considered \"further\nrestrictions\" within the meaning of section 10.  If the Program as you\nreceived it, or any part of it, contains a notice stating that it is\ngoverned by this License along with a term that is a further\nrestriction, you may remove that term.  If a license document contains\na further restriction but permits relicensing or conveying under this\nLicense, you may add to a covered work material governed by the terms\nof that license document, provided that the further restriction does\nnot survive such relicensing or conveying.\n\n  If you add terms to a covered work in accord with this section, you\nmust place, in the relevant source files, a statement of the\nadditional terms that apply to those files, or a notice indicating\nwhere to find the applicable terms.\n\n  Additional terms, permissive or non-permissive, may be stated in the\nform of a separately written license, or stated as exceptions;\nthe above requirements apply either way.\n\n  8. Termination.\n\n  You may not propagate or modify a covered work except as expressly\nprovided under this License.  Any attempt otherwise to propagate or\nmodify it is void, and will automatically terminate your rights under\nthis License (including any patent licenses granted under the third\nparagraph of section 11).\n\n  However, if you cease all violation of this License, then your\nlicense from a particular copyright holder is reinstated (a)\nprovisionally, unless and until the copyright holder explicitly and\nfinally terminates your license, and (b) permanently, if the copyright\nholder fails to notify you of the violation by some reasonable means\nprior to 60 days after the cessation.\n\n  Moreover, your license from a particular copyright holder is\nreinstated permanently if the copyright holder notifies you of the\nviolation by some reasonable means, this is the first time you have\nreceived notice of violation of this License (for any work) from that\ncopyright holder, and you cure the violation prior to 30 days after\nyour receipt of the notice.\n\n  Termination of your rights under this section does not terminate the\nlicenses of parties who have received copies or rights from you under\nthis License.  If your rights have been terminated and not permanently\nreinstated, you do not qualify to receive new licenses for the same\nmaterial under section 10.\n\n  9. Acceptance Not Required for Having Copies.\n\n  You are not required to accept this License in order to receive or\nrun a copy of the Program.  Ancillary propagation of a covered work\noccurring solely as a consequence of using peer-to-peer transmission\nto receive a copy likewise does not require acceptance.  However,\nnothing other than this License grants you permission to propagate or\nmodify any covered work.  These actions infringe copyright if you do\nnot accept this License.  Therefore, by modifying or propagating a\ncovered work, you indicate your acceptance of this License to do so.\n\n  10. Automatic Licensing of Downstream Recipients.\n\n  Each time you convey a covered work, the recipient automatically\nreceives a license from the original licensors, to run, modify and\npropagate that work, subject to this License.  You are not responsible\nfor enforcing compliance by third parties with this License.\n\n  An \"entity transaction\" is a transaction transferring control of an\norganization, or substantially all assets of one, or subdividing an\norganization, or merging organizations.  If propagation of a covered\nwork results from an entity transaction, each party to that\ntransaction who receives a copy of the work also receives whatever\nlicenses to the work the party's predecessor in interest had or could\ngive under the previous paragraph, plus a right to possession of the\nCorresponding Source of the work from the predecessor in interest, if\nthe predecessor has it or can get it with reasonable efforts.\n\n  You may not impose any further restrictions on the exercise of the\nrights granted or affirmed under this License.  For example, you may\nnot impose a license fee, royalty, or other charge for exercise of\nrights granted under this License, and you may not initiate litigation\n(including a cross-claim or counterclaim in a lawsuit) alleging that\nany patent claim is infringed by making, using, selling, offering for\nsale, or importing the Program or any portion of it.\n\n  11. Patents.\n\n  A \"contributor\" is a copyright holder who authorizes use under this\nLicense of the Program or a work on which the Program is based.  The\nwork thus licensed is called the contributor's \"contributor version\".\n\n  A contributor's \"essential patent claims\" are all patent claims\nowned or controlled by the contributor, whether already acquired or\nhereafter acquired, that would be infringed by some manner, permitted\nby this License, of making, using, or selling its contributor version,\nbut do not include claims that would be infringed only as a\nconsequence of further modification of the contributor version.  For\npurposes of this definition, \"control\" includes the right to grant\npatent sublicenses in a manner consistent with the requirements of\nthis License.\n\n  Each contributor grants you a non-exclusive, worldwide, royalty-free\npatent license under the contributor's essential patent claims, to\nmake, use, sell, offer for sale, import and otherwise run, modify and\npropagate the contents of its contributor version.\n\n  In the following three paragraphs, a \"patent license\" is any express\nagreement or commitment, however denominated, not to enforce a patent\n(such as an express permission to practice a patent or covenant not to\nsue for patent infringement).  To \"grant\" such a patent license to a\nparty means to make such an agreement or commitment not to enforce a\npatent against the party.\n\n  If you convey a covered work, knowingly relying on a patent license,\nand the Corresponding Source of the work is not available for anyone\nto copy, free of charge and under the terms of this License, through a\npublicly available network server or other readily accessible means,\nthen you must either (1) cause the Corresponding Source to be so\navailable, or (2) arrange to deprive yourself of the benefit of the\npatent license for this particular work, or (3) arrange, in a manner\nconsistent with the requirements of this License, to extend the patent\nlicense to downstream recipients.  \"Knowingly relying\" means you have\nactual knowledge that, but for the patent license, your conveying the\ncovered work in a country, or your recipient's use of the covered work\nin a country, would infringe one or more identifiable patents in that\ncountry that you have reason to believe are valid.\n\n  If, pursuant to or in connection with a single transaction or\narrangement, you convey, or propagate by procuring conveyance of, a\ncovered work, and grant a patent license to some of the parties\nreceiving the covered work authorizing them to use, propagate, modify\nor convey a specific copy of the covered work, then the patent license\nyou grant is automatically extended to all recipients of the covered\nwork and works based on it.\n\n  A patent license is \"discriminatory\" if it does not include within\nthe scope of its coverage, prohibits the exercise of, or is\nconditioned on the non-exercise of one or more of the rights that are\nspecifically granted under this License.  You may not convey a covered\nwork if you are a party to an arrangement with a third party that is\nin the business of distributing software, under which you make payment\nto the third party based on the extent of your activity of conveying\nthe work, and under which the third party grants, to any of the\nparties who would receive the covered work from you, a discriminatory\npatent license (a) in connection with copies of the covered work\nconveyed by you (or copies made from those copies), or (b) primarily\nfor and in connection with specific products or compilations that\ncontain the covered work, unless you entered into that arrangement,\nor that patent license was granted, prior to 28 March 2007.\n\n  Nothing in this License shall be construed as excluding or limiting\nany implied license or other defenses to infringement that may\notherwise be available to you under applicable patent law.\n\n  12. No Surrender of Others' Freedom.\n\n  If conditions are imposed on you (whether by court order, agreement or\notherwise) that contradict the conditions of this License, they do not\nexcuse you from the conditions of this License.  If you cannot convey a\ncovered work so as to satisfy simultaneously your obligations under this\nLicense and any other pertinent obligations, then as a consequence you may\nnot convey it at all.  For example, if you agree to terms that obligate you\nto collect a royalty for further conveying from those to whom you convey\nthe Program, the only way you could satisfy both those terms and this\nLicense would be to refrain entirely from conveying the Program.\n\n  13. Use with the GNU Affero General Public License.\n\n  Notwithstanding any other provision of this License, you have\npermission to link or combine any covered work with a work licensed\nunder version 3 of the GNU Affero General Public License into a single\ncombined work, and to convey the resulting work.  The terms of this\nLicense will continue to apply to the part which is the covered work,\nbut the special requirements of the GNU Affero General Public License,\nsection 13, concerning interaction through a network will apply to the\ncombination as such.\n\n  14. Revised Versions of this License.\n\n  The Free Software Foundation may publish revised and/or new versions of\nthe GNU General Public License from time to time.  Such new versions will\nbe similar in spirit to the present version, but may differ in detail to\naddress new problems or concerns.\n\n  Each version is given a distinguishing version number.  If the\nProgram specifies that a certain numbered version of the GNU General\nPublic License \"or any later version\" applies to it, you have the\noption of following the terms and conditions either of that numbered\nversion or of any later version published by the Free Software\nFoundation.  If the Program does not specify a version number of the\nGNU General Public License, you may choose any version ever published\nby the Free Software Foundation.\n\n  If the Program specifies that a proxy can decide which future\nversions of the GNU General Public License can be used, that proxy's\npublic statement of acceptance of a version permanently authorizes you\nto choose that version for the Program.\n\n  Later license versions may give you additional or different\npermissions.  However, no additional obligations are imposed on any\nauthor or copyright holder as a result of your choosing to follow a\nlater version.\n\n  15. Disclaimer of Warranty.\n\n  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY\nAPPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT\nHOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY\nOF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,\nTHE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\nPURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM\nIS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF\nALL NECESSARY SERVICING, REPAIR OR CORRECTION.\n\n  16. Limitation of Liability.\n\n  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\nWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS\nTHE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY\nGENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE\nUSE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF\nDATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD\nPARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),\nEVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF\nSUCH DAMAGES.\n\n  17. Interpretation of Sections 15 and 16.\n\n  If the disclaimer of warranty and limitation of liability provided\nabove cannot be given local legal effect according to their terms,\nreviewing courts shall apply local law that most closely approximates\nan absolute waiver of all civil liability in connection with the\nProgram, unless a warranty or assumption of liability accompanies a\ncopy of the Program in return for a fee.\n\n                     END OF TERMS AND CONDITIONS\n\n            How to Apply These Terms to Your New Programs\n\n  If you develop a new program, and you want it to be of the greatest\npossible use to the public, the best way to achieve this is to make it\nfree software which everyone can redistribute and change under these terms.\n\n  To do so, attach the following notices to the program.  It is safest\nto attach them to the start of each source file to most effectively\nstate the exclusion of warranty; and each file should have at least\nthe \"copyright\" line and a pointer to where the full notice is found.\n\n    <one line to give the program's name and a brief idea of what it does.>\n    Copyright (C) <year>  <name of author>\n\n    This program is free software: you can redistribute it and/or modify\n    it under the terms of the GNU General Public License as published by\n    the Free Software Foundation, either version 3 of the License, or\n    (at your option) any later version.\n\n    This program is distributed in the hope that it will be useful,\n    but WITHOUT ANY WARRANTY; without even the implied warranty of\n    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n    GNU General Public License for more details.\n\n    You should have received a copy of the GNU General Public License\n    along with this program.  If not, see <https://www.gnu.org/licenses/>.\n\nAlso add information on how to contact you by electronic and paper mail.\n\n  If the program does terminal interaction, make it output a short\nnotice like this when it starts in an interactive mode:\n\n    <program>  Copyright (C) <year>  <name of author>\n    This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n    This is free software, and you are welcome to redistribute it\n    under certain conditions; type `show c' for details.\n\nThe hypothetical commands `show w' and `show c' should show the appropriate\nparts of the General Public License.  Of course, your program's commands\nmight be different; for a GUI interface, you would use an \"about box\".\n\n  You should also get your employer (if you work as a programmer) or school,\nif any, to sign a \"copyright disclaimer\" for the program, if necessary.\nFor more information on this, and how to apply and follow the GNU GPL, see\n<https://www.gnu.org/licenses/>.\n\n  The GNU General Public License does not permit incorporating your program\ninto proprietary programs.  If your program is a subroutine library, you\nmay consider it more useful to permit linking proprietary applications with\nthe library.  If this is what you want to do, use the GNU Lesser General\nPublic License instead of this License.  But first, please read\n<https://www.gnu.org/licenses/why-not-lgpl.html>.\n"
  },
  {
    "path": "README.md",
    "content": "# Save File Converter\n\nWeb-based tool to convert save files from retro game consoles to different formats\n\n![Save file conversion](https://github.com/euan-forrester/save-file-converter/raw/main/images/main-window.png \"Save file conversion\")\n\nAvailable at https://savefileconverter.com\n\n## Upcoming features\n\n- PS2 formats (check out https://gamefaqs.gamespot.com/ps2/536777-suikoden-iii/saves for a potential list)\n\n## Contact\n\nIf you have questions, need help, or have comments or suggestions, please hop on Discord: https://discord.gg/wtJ7xUKKTR\n\nOr email savefileconverter (at) gmail (dot) com\n\n## Donations\n\nEverything on this site is free and open source with no advertising. If you find the site helpful and want to donate you can here:\n\n[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif)](https://www.paypal.com/donate/?hosted_button_id=DHDERHCQVLGPJ)\n\n## Emulators with incompatible save formats\n\n- (GBA) Pizza Boy files incompatible with mGBA (believe mGBA uses raw files)\n- (PS1) Beetle HW incompatible with DuckStation\n- (Saturn) SSF incompatible with Mednafen/Beetle Saturn\n- (N64) Mupen64Plus Next files incompatible with Wii64\n- (32X) Picodrive has its own save format (somewhere around here? https://github.com/notaz/picodrive/blob/1d366b1ad9362fd463c42979c8a687dfc7f46c46/platform/common/emu.c#L873)\n\n## Save file formats\n\n- Retron5\n  - https://www.retro5.net/viewtopic.php?f=5&t=67&start=10\n- GameShark (GBA)\n  - (partial): https://gbatemp.net/threads/converting-gsv-or-sps-files-to-sav.51838/#post-664786\n  - (reading): https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/src/gba/GBA.cpp#L1025\n  - (writing): https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/src/gba/GBA.cpp#L1146\n  - (partial): https://github.com/mgba-emu/mgba/blob/master/src/gba/sharkport.c\n- GameShark SP (GBA)\n  - (reading): https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/src/gba/GBA.cpp#L1078\n- GameShark (PS2)\n  - (partial): https://www.ps2savetools.com/documents/xps-format/\n- PS2\n  - Tool to parse images, contains links to docs describing various parts of the filesystem: https://github.com/sevonj/eightmb\n  - Description of PS2 save data: https://babyno.top/en/posts/2023/09/parsing-ps2-memcard-file-system/\n  - Parsing PS2 save data: https://babyno.top/en/posts/2023/09/exporting-file-from-ps2-memcard/\n  - Parser with 3D icon viewer: https://github.com/caol64/ps2mc-browser\n  - Save Tools: https://www.ps2savetools.com/\n  - mymc save tool:\n    - http://www.csclub.uwaterloo.ca:11068/mymc/\n    - https://github.com/ps2dev/mymc\n    - https://git.sr.ht/~thestr4ng3r/mymcplus (port of mymc with some enhancements)\n  - Memory card format:\n    - http://www.csclub.uwaterloo.ca:11068/mymc/ps2mcfs.html\n    - https://www.ps2savetools.com/ps2memcardformat.html (same info as link above, and that one appears to be newer/more cleaned up)\n  - Use PS2 files on PS3: https://github.com/bucanero/apollo-ps3\n  - Convert PS2 formats: https://github.com/bucanero/psv-save-converter\n  - Manage PS2 memory cards: https://github.com/bucanero/ps2vmc-tool\n- Wii Virtual Console save game format (note that the files are encrypted)\n  - https://wiibrew.org/wiki/Wii_Savegame_Parser\n  - https://wiibrew.org/wiki/Savegame_Files\n  - https://wiibrew.org/wiki/FE100\n  - https://hackmii.com/2008/04/keys-keys-keys/\n  - https://github.com/Plombo/segher-wii-tools\n  - (writing) https://github.com/Plombo/segher-wii-tools/blob/master/twintig.c\n  - https://github.com/Plombo/vcromclaim\n  - https://github.com/JanErikGunnar/vcromclaim\n- Wii U Virtual Console:\n  - https://github.com/mstan/SaveAIO\n- PSP save file decryption/encryption (note that some files require a per-game key):\n  - KIRK engine reverse-engineering: https://github.com/ProximaV/kirk-engine-full/tree/master\n  - https://www.psdevwiki.com/ps3/PSP_Savedata\n  - https://github.com/BrianBTB/SED-PC (PC application that decrypts/encrypts saves)\n  - https://github.com/cielavenir/psp-savedata-endecrypter (improvement to SED-PC that works with \"mode 4\" (whatever that is???))\n  - https://wololo.net/talk/viewtopic.php?t=37556 (PSP plugin that dumps a game's key)\n  - https://github.com/TheHellcat/psp-hb/blob/master/SavegameDeemer_620TN/deemer_hooker/main.c#L204 Code for a plugin that does this. It intercepts the call to save the game, and writes out a copy of the save in plaintext, plus the key\n  - https://wololo.net/talk/viewtopic.php?p=137153&sid=37bd385d91e7c2d89cf1ff8d70e8c640#p137153 Discussion saying that you need to either use a plugin, or parse the executable for look for code around a certain system call to figure out what value is being passed to it\n  - I can't seem to find an online list of game keys, and requiring users to install a plugin on their PSP then type a gamekey into the interface seems like too much to ask.\n  - https://github.com/hrydgard/ppsspp PSP emulator\n    - https://github.com/hrydgard/ppsspp/blob/master/Tools/SaveTool/decrypt.c This decrypts a savegame file\n    - https://github.com/hrydgard/ppsspp/blob/81b5e080ff885e98b5761632158457ce3e5d1fb5/Core/HLE/sceKernelModule.cpp#L1251 The code before here decrypts the executable\n    - https://github.com/euan-forrester/psp-encryption-webassembly Copy of the relevant code in PPSSPP, compiled into webassembly\n  - For Gran Turismo the game key is device-specific. Must be generated somehow from a device ID. So can't find it in the executable.\n    - So we still need a box to enter the game key instead of just ISO/eboot\n    - Maybe detect this ISO and warn the user?\n- NES/SNES Classic save game format\n  - https://github.com/TeamShinkansen/Hakchi2-CE (tool used to write games onto the devices)\n  - https://github.com/JanErikGunnar/ClassicEditionTools (scripts to convert raw saves to/from NES Classic format)\n  - http://darkakuma.z-net.us/p/sfromtool.html (convert SNES ROMs and/or saves to the SNES Classic ROM and/or save format)\n  - I'm not sure there's enough demand for a web-based tool that does this. The devices aren't available for sale anymore and you already have to run a Windows program to transfer the games. Also the Windows tool for the SNES Classic has the ability to convert saves already.\n- PS1:\n  - https://www.psdevwiki.com/ps3/PS1_Savedata\n  - MemcardRex format: https://github.com/ShendoXT/memcardrex/blob/master/MemcardRex/ps1card.cs\n  - DexDrive format: https://github.com/ShendoXT/memcardrex/blob/master/MemcardRex/ps1card.cs\n  - Signing a PSP .VMP file: https://github.com/dots-tb/vita-mcr2vmp\n  - PS3 format: https://psdevwiki.com/ps3/PS1_Savedata#PS1_Single_Save_.3F_.28.PSV.29\n  - Command line tool for PS1 memcards: https://github.com/G4Vi/psx_mc_cli\n- N64:\n  - https://github.com/bryc/mempak\n    - https://bryc.github.io/mempak/ (online preview)\n  - https://github.com/bryc/mempak/wiki/DexDrive-.N64-format\n  - https://github.com/bryc/mempak/wiki/MemPak-structure\n  - https://github.com/DragonMinded/libdragon/wiki/Cpaktool\n  - https://github.com/heuripedes/pj64tosrm (convert raw save to emulator format)\n  - http://micro-64.com/database/gamesave.shtml (list of games which use each save type)\n  - https://www.reddit.com/r/n64/comments/ezhleg/guide_how_to_backup_your_n64_saves_to_your_pc/\n  - https://www.youtube.com/watch?v=PpolokImIeU (convert individual note to .eep format)\n  - https://github.com/ssokolow/saveswap Swap endianness of N64 saves to move between Everdrive/emulators/etc\n  - https://github.com/Ninjiteu/N64SaveConverter Does endian swaps, padding/trimming of files, and parses retroarch files that store n64 cart saves at various offsets\n  - https://github.com/drehren/ra_mp64_srm_convert Combines/splits retroarch saves. Also has GUI version: https://github.com/drehren/ramp64-convert-gui and web version: https://github.com/drehren/ramp64-convert-web\n  - Game serial codes:\n    - https://niwanetwork.org/wiki/List_of_Nintendo_64_games_by_serial_code\n    - https://meanwhileblog.wordpress.com/n64-game-code-list/\n- 3DS Virtual Console\n  - SNES games: https://github.com/manuGMG/3ds-snes-sc\n    - This tool above apparently works on some WiiU VC games as well: https://gbatemp.net/threads/release-3ds-snes-save-converter.574927/\n  - Pokemon saves: https://sav2vc.fm1337.com/\n  - https://github.com/mstan/SaveAIO\n  - List of emulators on the 3DS: https://wiki.gbatemp.net/wiki/List_of_3DS_homebrew_emulators\n  - open_agb_firm: https://github.com/profi200/open_agb_firm allows usage of the build-in GBA hardware\n    - Save files from here need to be 64-bit endian-swapped to work in a regular emulator: https://github.com/exelotl/gba-eeprom-save-fix\n- Sega Saturn\n  - https://github.com/hitomi2500/ss-save-parser\n  - https://github.com/slinga-homebrew/Save-Game-BUP-Scripts (description of the `.BUP` save format)\n  - https://github.com/slinga-homebrew/Save-Game-Copier\n  - https://segaxtreme.net/resources/saturn-save-converter.74/\n  - https://github.com/slinga-homebrew/Save-Game-Extractor (cool, but hopefully not the main method of getting files off of an actual Saturn)\n  - http://ppcenter.free.fr/satdocs/ST-162-R1-092994.html (official documentation)\n  - https://segaxtreme.net/threads/backup-memory-structure.16803/\n  - Saroo:\n    - https://github.com/tpunix/SAROO/tree/master/tools/savetool (SAROO save file converter)\n    - https://github.com/tpunix/SAROO/issues/131 (description of how the saroo deals with save files, also watch this for potential changes)\n    - https://github.com/tpunix/SAROO/issues/117 (description of current process of copying save files to saroo)\n    - https://www.reddit.com/r/SegaSaturn/comments/1acty0v/saroo_save_file_format/ (information on the saroo file format, tools, and example files)\n  - Potential save formats (based on what Saturn Save Converter does):\n    - These ones to initially support:\n      - BUP (is this the standardized format? Used by Psuedo Saturn Kai -> this is the tool used by ODEs as well?)\n        - https://github.com/slinga-homebrew/Save-Game-BUP-Scripts/blob/main/bup_header.h#L94\n      - SaroSave (Saroo flash cart)\n        - https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_bup.c#L135\n        - https://github.com/tpunix/SAROO/blob/6f6e18289bbdc9b23b4c91b9da343a1362ed921c/doc/SAROO%E6%8A%80%E6%9C%AF%E7%82%B9%E6%BB%B4.txt#L448 (translation posted at https://www.reddit.com/r/SegaSaturn/comments/1acty0v/comment/kjz73ft/)\n      - Mednafen - generates 3 files:\n        - `.bkr`: Internal save memory? Appears to be described here: https://www.reddit.com/r/SegaSaturn/comments/1acty0v/comment/kjz73ft/\n        - `.bcr`: Cartridge save memory? Compressed with gzip, then as described in link above but with bigger block size: https://www.reddit.com/r/RetroArch/comments/wke28j/comment/ijmw25t/\n        - `.smpc`: System management data, including clock information: https://docs.exodusemulator.com/Archives/SSDDV25/segahtml/index.html?page=hard/smpc/index.htm\n    - These ones to maybe support based on feedback:\n      - SSF (SSF emulator: https://segaretro.org/SSF)\n      - Yabause (https://yabause.org/ -- seems old, Kronos is a newer fork: https://github.com/FCare/Kronos)\n      - Giri Giri\n      - Nova\n      - Action Replay (https://github.com/hitomi2500/ss-save-parser/blob/master/config.cpp#L26)\n      - Druid II (https://github.com/hitomi2500/ss-save-parser/blob/master/config.cpp#L59)\n- TG-16/PCE:\n  - https://github.com/Widdiful/PCE_BRAM_Manager\n- Gamecube\n  - Memory card image\n    - https://www.gc-forever.com/yagcd/chap12.html#sec12\n    - https://github.com/bodgit/gc\n    - https://github.com/bodgit/memcardpro\n    - https://github.com/suloku/gcmm\n  - .GCI individual save file\n    - http://www.surugi.com/projects/gcifaq.html\n    - https://github.com/suloku/gcmm/blob/master/source/gci.h#L12\n  - Recovery tool\n    - https://github.com/GerbilSoft/mcrecover\n- Flash carts:\n  - Goomba emulator (for GB/C games on GBA flash cart)\n    - https://github.com/libertyernie/goombasav (save converter)\n    - https://github.com/masterhou/goombacolor/blob/master/src/sram.c\n    - https://www.reddit.com/r/everdrive/comments/qcgus7/using_a_gba_x5_goomba_sram_save_file_on_a_gbc_x7/****\n    - It seems that uncompressed save data may be available at `0x6000` rather than `0xe000`? Was there a bug in Goomba Save Converter?\n      - https://www.reddit.com/r/everdrive/comments/1368o8d/converting_goomba_gbc_saves_for_use_on_other/\n  - N64 Everdrive\n    - https://github.com/ssokolow/saveswap\n    - GB/C emulator: https://github.com/lambertjamesd/gb64/blob/master/src/save.c\n    - NES emulator:\n      - https://github.com/hcs64/neon64v2/issues/20\n      - http://themanbehindcurtain.blogspot.com/\n- Sega CD:\n  - https://github.com/superctr/buram/\n  - Sega operating manuals\n    - Standards that games were to use when interfacing with backup RAM: https://segaretro.org/images/6/6e/Sega-CD_Software_Standards.pdf\n    - BIOS calls that games were to use to access backup RAM: https://segaretro.org/images/4/44/MCDBios.pdf\n  - https://segaretro.org/CD_BackUp_RAM_Cart\n  - https://github.com/ekeeke/Genesis-Plus-GX/issues/449\n  - savesplitter tool here: https://krikzz.com/pub/support/mega-everdrive/pro-series/\n- Dreamcast\n  - https://vmu.falcogirgis.net/filesystem.html\n  - https://github.com/likeagfeld/VM2_TO_VMUPRO_CONVERTER\n  - https://github.com/DerekPascarella/VMU-Disc-Builder (just packs up save files and doesn't do much parsing, so not much info about their format)\n  - https://bswirl.kitsunet.org/dci_converter/ (old and unmaintained, only parts of it worK: https://www.dreamcast-talk.com/forum/viewtopic.php?t=17425)\n  - https://segaretro.org/VMU_Explorer (Old Windows-only tool without source code)\n  - https://github.com/sizious/vmu-tool-pc\n  - https://github.com/bucanero/dc-save-converter\n  - Official docs: https://segaxtreme.net/resources/maple-bus-1-0-function-type-specifications-ft1-storage-function.195/ (these were apparently leaked, apparently have been translated back and forth, and do not appear to be final as they contain multiple descrepancies vs the actual files)\n- Analogue Pocket:\n  - List of available cores: https://openfpga-cores-inventory.github.io/analogue-pocket/\n    - Note that there are sometimes multiple cores for a particular platform (e.g. Genesis)\n- Visual Boy Advance emulator\n  - Explanation of its format: https://emulation.gametechwiki.com/index.php/Game_Boy_Advance_emulators#Save_formats\n  - Code that does the conversion:\n    - https://github.com/Thysbelon/gbaconv-web\n    - https://github.com/libretro/vbam-libretro/blob/25fefc1b3dcdc6362c44845687bea70dd350c33a/src/libretro/gbaconv/gbaconv.c\n  - Online converter: https://thysbelon.github.io/gbaconv-web/\n  - Info on some ports of this emulator: https://thysbelon.github.io/2023/03/07/How-to-Convert-4GS-and-DSZ-save-files-to-SAV\n- Online emulators\n  - `.ggz` files when unzipped apparently contain one or more pairs of `.gba`/`.snes`/etc and `.png` file: a save state and a thumbnail\n  - There's a port of Retroarch available online here: https://binbashbanana.github.io/webretro/ with code here: https://github.com/BinBashBanana/webretro . Its save file compatibility is the same as regular Retroarch and the emulators therein\n- Retroarch\n  - Some save files are compressed with ZLIB compression. I'm not sure the circumstances under which this happens: https://github.com/libretro/RetroArch/issues/14031#issuecomment-1159400581\n- iOS\n  - The Delta emulator uses .svs for save states. Instructions for creating a raw save instead: https://www.reddit.com/r/Delta_Emulator/comments/1helbo1/svs_to_sav/\n- Gameboy\n  - Games using the MBC2 mapper can have their save files represented differently\n    - Either as half-bytes with the top nybble set to `0x0000` or as packed bytes\n    - Half bytes are more common; mGBA uses packed bytes but can convert\n    - See discussion here: https://github.com/Gronis/gb-save-manager/issues/5#issuecomment-4101338096\n    - See more details here: https://github.com/Gronis/gb-save-manager?tab=readme-ov-file#games-to-watch-out-for---mbc2-cartridges\n    - Game affected:\n      - F-1 Race\n      - Golf\n      - Kirby's Pinball Land\n      - Top Rank Tennis\n\n## Cart reader notes\n\n- Retrode2\n  - Genesis: SRAM/FRAM saves are byte expanded by doubling: \"HELLO\" becomes \"HHEELLLLOO\" rather than \" H E L L O\" like in many emulators/flash carts\n- Retroblaster\n  - Same as Retrode2\n\n## GBA save file size difficulty\n- https://zork.net/~st/jottings/GBA_saves.html\n- https://dillonbeliveau.com/2020/06/05/GBA-FLASH.html\n\n## Real-Time Clock save format\n- https://bgb.bircd.org/rtcsave.html\n\nSome platforms (e.g. some MiSTer cores) append RTC data to the end of a save file. The above link describes a common format for RTC data.\n\n## PSP decompiling\n- Use ghidra:\n  - Download from: https://github.com/NationalSecurityAgency/ghidra/releases\n  - Add this extension: https://github.com/kotcrab/ghidra-allegrex\n  - Add these scripts: https://github.com/pspdev/psp-ghidra-scripts\n  - Libraries documentation: https://github.com/mathieulh/PSP-PRX-Libraries-Documentation-Project\n\n## Offline use\n\nOccassionally there's a need to use the tool offline, such as when you'll be without an Internet connection for an extended period. There's 2 methods to achieve this:\n\n### Method 1: Use a website saving tool\n\nYou can't just right click on the page and select Save As... because the site is divided internally into many different files, and that will only download some of them.\n\nGoogle `website saving tool` or something similar to find an up-to-date list of such tools.\n\n### Method 2: Build it locally (for people comfortable with the command line and development tools)\n\nYou may need to modify some of these steps depending on your development environment, but this should give you the general idea.\n\n#### MacOS/Linux\n\nInstall `homebrew`: https://brew.sh/\n\n```\nbrew install yarn\nbrew install git\n```\nThen proceed to the [Common](https://github.com/euan-forrester/save-file-converter#common) section\n\n#### Windows\n\nFind an equivalent package manager to `homebrew`, and use it to install `git` and `yarn` (or install them and their dependencies manually: `git`: https://github.com/git-guides/install-git, `yarn`: https://yarnpkg.com/getting-started/install)\n\nThen proceed to the [Common](https://github.com/euan-forrester/save-file-converter#common) section\n\n#### Common\n\n```\ngit clone git@github.com:euan-forrester/save-file-converter.git\ncd save-file-converter/frontend\nyarn install\nyarn serve\n```\n\nThen open http://localhost:8080/ in your browser.\n\nNote that you'll have to keep the command line window open with `yarn serve` running for as long as you want to access the site.\n\n## Internet archive\n\nIf you need to, you can also access the site via the Internet archive here: https://web.archive.org/web/https://savefileconverter.com/\n"
  },
  {
    "path": "frontend/.editorconfig",
    "content": "[*.{js,jsx,ts,tsx,vue}]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ntrim_trailing_whitespace = true\ninsert_final_newline = true\nmax_line_length = 100\n"
  },
  {
    "path": "frontend/.eslintignore",
    "content": "src/save-formats/PSP/psp-encryption/*\nlib/*"
  },
  {
    "path": "frontend/.gitignore",
    "content": ".DS_Store\nnode_modules\n/dist\n\n# local env files\n.env.local\n.env.*.local\n\n# Log files\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n# Editor directories and files\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n*.sw?\n"
  },
  {
    "path": "frontend/.nvmrc",
    "content": "16.19.1\n"
  },
  {
    "path": "frontend/README.md",
    "content": "# Vue 3 upgrade notes\n\nNeed to undo these changes made for vscode: https://github.com/vuejs/language-tools/wiki/Vue-2-Compat-Guides\n\nDescribed here: https://github.com/vuejs/language-tools/discussions/5455\n"
  },
  {
    "path": "frontend/babel.config.js",
    "content": "module.exports = {\n  presets: [\n    '@vue/cli-plugin-babel/preset',\n  ],\n};\n"
  },
  {
    "path": "frontend/buildspec.yml",
    "content": "version: 0.2\n\nphases:\n  install:\n    runtime-versions:\n      nodejs: 16\n    commands:\n      - apt-get update -y\n      - apt-get install -y yarn\n      - cd frontend\n      - yarn install\n  pre_build:\n    commands:\n      - yarn test:unit\n  build:\n    commands:\n      - yarn build --mode=$ENVIRONMENT\n  post_build:\n    commands:\n      - yarn deploy --mode=$ENVIRONMENT && yarn deploy:cleanup --mode=$ENVIRONMENT\n"
  },
  {
    "path": "frontend/lib/minlzo-js/lzo1x.js",
    "content": "// This file is copied from https://github.com/euan-forrester/minilzo-js\n// Which was forked from https://github.com/abraidwood/minilzo-js\n\n/*\n * minilzo-js\n * JavaScript port of minilzo by Alistair Braidwood\n *\n *\n * This library is free software; you can redistribute it and/or\n *  modify it under the terms of the GNU General Public License as\n *  published by the Free Software Foundation; either version 2 of\n *  the License, or (at your option) any later version.\n *\n * You should have received a copy of the GNU General Public License\n *  along with the minilzo-js library; see the file COPYING.\n *  If not, write to the Free Software Foundation, Inc.,\n *  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.\n */\n\n/*\n * original minilzo.c by:\n *\n * Markus F.X.J. Oberhumer\n * <markus@oberhumer.com>\n * http://www.oberhumer.com/opensource/lzo/\n */\n\n/*\n * NOTE:\n *   the full LZO package can be found at\n *   http://www.oberhumer.com/opensource/lzo/\n */\n\nfunction _lzo1x() {\n    this.blockSize = 128 * 1024;\n    this.minNewSize = this.blockSize;\n    this.maxSize = 0;\n\n    this.OK = 0;\n    this.INPUT_OVERRUN = -4;\n    this.OUTPUT_OVERRUN = -5;\n    this.LOOKBEHIND_OVERRUN = -6;\n    this.EOF_FOUND = -999;\n    this.ret = 0;\n\n    this.buf = null;\n    this.buf32 = null;\n\n    this.out = new Uint8Array(256 * 1024);\n    this.cbl = 0;\n    this.ip_end = 0;\n    this.op_end = 0;\n    this.t = 0;\n\n    this.ip = 0;\n    this.op = 0;\n    this.m_pos = 0;\n    this.m_len = 0;\n    this.m_off = 0;\n\n    this.dv_hi = 0;\n    this.dv_lo = 0;\n    this.dindex = 0;\n\n    this.ii = 0;\n    this.jj = 0;\n    this.tt = 0;\n    this.v = 0;\n\n    this.dict = new Uint32Array(16384);\n    this.emptyDict = new Uint32Array(16384);\n\n    this.skipToFirstLiteralFun = false;\n    this.returnNewBuffers = true;\n\n    this.setBlockSize = function(blockSize) {\n        if(typeof blockSize === 'number' && !isNaN(blockSize) && parseInt(blockSize) > 0) {\n            this.blockSize = parseInt(blockSize);\n            return true;\n        } else {\n            return false;\n        }\n    };\n\n    this.setOutputSize = function(outputSize) {\n        if(typeof outputSize === 'number' && !isNaN(outputSize) && parseInt(outputSize) > 0) {\n            this.out = new Uint8Array(parseInt(outputSize));\n            return true;\n        } else {\n            return false;\n        }\n    };\n\n    this.setReturnNewBuffers = function(b) {\n        this.returnNewBuffers = !!b;\n    };\n\n    this.applyConfig = function(cfg) {\n        if(cfg !== undefined) {\n            if(cfg.outputSize !== undefined) {\n                instance.setOutputSize(cfg.outputSize);\n            }\n            if(cfg.blockSize !== undefined) {\n                instance.setBlockSize(cfg.blockSize);\n            }\n        }\n    };\n\n    this.ctzl = function(v) {\n        // this might be needed for _compressCore (it isn't in my current test files)\n        /*\n         * https://graphics.stanford.edu/~seander/bithacks.html#ZerosOnRightBinSearch\n         * Matt Whitlock suggested this on January 25, 2006. Andrew Shapira shaved a couple operations off on Sept. 5, 2007 (by setting c=1 and unconditionally subtracting at the end).\n         */\n\n        var c;     // c will be the number of zero bits on the right,\n        // so if v is 1101000 (base 2), then c will be 3\n        // NOTE: if 0 == v, then c = 31.\n        if (v & 0x1) {\n            // special case for odd v (assumed to happen half of the time)\n            c = 0;\n        } else {\n            c = 1;\n            if ((v & 0xffff) === 0) {\n                v >>= 16;\n                c += 16;\n            }\n            if ((v & 0xff) === 0) {\n                v >>= 8;\n                c += 8;\n            }\n            if ((v & 0xf) === 0) {\n                v >>= 4;\n                c += 4;\n            }\n            if ((v & 0x3) === 0) {\n                v >>= 2;\n                c += 2;\n            }\n            c -= v & 0x1;\n        }\n        return c;\n    };\n\n    // It might be faster to copy 4 bytes at a time, but\n    // the allocation seems to kill performance.\n    // this._get4ByteAlignedBuf = function(buf) {\n    //  if(buf.length % 4 === 0) {\n    //      return new Uint32Array(buf.buffer);\n\n    //  } else {\n    //      var buf_4b = new Uint8Array(buf.length + (4 - buf.length % 4));\n    //      buf_4b.set(buf);\n    //      return new Uint32Array(buf_4b.buffer);\n    //  }\n    // };\n\n    this.extendBuffer = function() {\n        var newBuffer = new Uint8Array(this.minNewSize + (this.blockSize - this.minNewSize % this.blockSize));\n        newBuffer.set(this.out);\n        this.out = newBuffer;\n        this.cbl = this.out.length;\n    };\n\n    this.match_next = function() {\n        // if (op_end - op < t) return OUTPUT_OVERRUN;\n        // if (this.ip_end - ip < t+3) return INPUT_OVERRUN;\n\n        this.minNewSize = this.op + 3;\n        if(this.minNewSize > this.cbl) {this.extendBuffer();}\n\n        this.out[this.op++] = this.buf[this.ip++];\n        if(this.t > 1) {\n            this.out[this.op++] = this.buf[this.ip++];\n            if(this.t > 2) {\n                this.out[this.op++] = this.buf[this.ip++];\n            }\n        }\n\n        this.t = this.buf[this.ip++];\n    };\n\n    this.match_done = function() {\n        this.t = this.buf[this.ip-2] & 3;\n        return this.t;\n    };\n\n    this.copy_match = function() {\n        this.t += 2;\n        this.minNewSize = this.op + this.t;\n        if(this.minNewSize > this.cbl) {this.extendBuffer();}\n\n        do {\n            this.out[this.op++] = this.out[this.m_pos++];\n        } while(--this.t > 0);\n    };\n\n    this.copy_from_buf = function() {\n        this.minNewSize = this.op + this.t;\n        if(this.minNewSize > this.cbl) {this.extendBuffer();}\n\n        do {\n            this.out[this.op++] = this.buf[this.ip++];\n        } while (--this.t > 0);\n    };\n\n    this.match = function() {\n        for (;;) {\n            if (this.t >= 64) {\n                this.m_pos = (this.op - 1) - ((this.t >> 2) & 7) - (this.buf[this.ip++] << 3);\n                this.t = (this.t >> 5) - 1;\n\n                // if ( m_pos < out || m_pos >= op) return LOOKBEHIND_OVERRUN;\n                // if (op_end - op < t+3-1) return OUTPUT_OVERRUN;\n\n                this.copy_match();\n\n            } else if (this.t >= 32) {\n                this.t &= 31;\n                if (this.t === 0) {\n                    while (this.buf[this.ip] === 0) {\n                        this.t += 255;\n                        this.ip++;\n                        // if (t > -511) return OUTPUT_OVERRUN;\n                        // if (this.ip_end - ip < 1) return INPUT_OVERRUN;\n                    }\n                    this.t += 31 + this.buf[this.ip++];\n                    // if (this.ip_end - ip < 2) return INPUT_OVERRUN;\n                }\n\n                this.m_pos = (this.op - 1) - (this.buf[this.ip] >> 2) - (this.buf[this.ip + 1] << 6);\n                this.ip += 2;\n\n                this.copy_match();\n\n            } else if (this.t >= 16) {\n                this.m_pos = this.op - ((this.t & 8) << 11);\n\n                this.t &= 7;\n                if (this.t === 0) {\n                    while (this.buf[this.ip] === 0) {\n                        this.t += 255;\n                        this.ip++;\n                        // if (t > -511) return OUTPUT_OVERRUN;\n                        // if (this.ip_end - ip < 1) return INPUT_OVERRUN;\n                    }\n                    this.t += 7 + this.buf[this.ip++];\n                    // if (this.ip_end - ip < 2) return INPUT_OVERRUN;\n                }\n\n                this.m_pos -= (this.buf[this.ip] >> 2) + (this.buf[this.ip + 1] << 6);\n                this.ip += 2;\n\n                if (this.m_pos === this.op) {\n                    this.state.outputBuffer = this.returnNewBuffers === true ?\n                        new Uint8Array(this.out.subarray(0, this.op)) :\n                        this.out.subarray(0, this.op);\n                    return this.EOF_FOUND;\n\n                } else {\n                    this.m_pos -= 0x4000;\n                    this.copy_match();\n                }\n\n            } else {\n                this.m_pos = (this.op - 1) - (this.t >> 2) - (this.buf[this.ip++] << 2);\n\n                // if (m_pos < out || m_pos >= op) return LOOKBEHIND_OVERRUN;\n                // if (op_end - op < 2) return OUTPUT_OVERRUN;\n                this.minNewSize = this.op + 2;\n                if(this.minNewSize > this.cbl) {this.extendBuffer();}\n\n                this.out[this.op++] = this.out[this.m_pos++];\n                this.out[this.op++] = this.out[this.m_pos];\n            }\n\n            // if (m_pos < out || m_pos >= op) return LOOKBEHIND_OVERRUN;\n            // if (op_end - op < t+3-1) return OUTPUT_OVERRUN;\n\n            if(this.match_done() === 0) {\n                return this.OK;\n            }\n            this.match_next();\n        }\n    };\n\n    this.decompress = function(state) {\n        this.state = state;\n\n        this.buf = this.state.inputBuffer;\n        this.cbl = this.out.length;\n        this.ip_end = this.buf.length;\n        // this.op_end = this.out.length;\n\n        this.t = 0;\n        this.ip = 0;\n        this.op = 0;\n        this.m_pos = 0;\n\n        this.skipToFirstLiteralFun = false;\n\n        // if (this.ip_end - ip < 1) return INPUT_OVERRUN;\n        if (this.buf[this.ip] > 17) {\n            this.t = this.buf[this.ip++] - 17;\n            if (this.t < 4) {\n                this.match_next();\n                this.ret = this.match();\n                if(this.ret !== this.OK) {\n                    return this.ret === this.EOF_FOUND ? this.OK : this.ret;\n                }\n\n            } else {\n                // if (op_end - op < t) return OUTPUT_OVERRUN;\n                // if (this.ip_end - ip < t+3) return INPUT_OVERRUN;\n                this.copy_from_buf();\n                this.skipToFirstLiteralFun = true;\n            }\n        }\n\n        for (;;) {\n            if(!this.skipToFirstLiteralFun) {\n                // EDIT EUAN: I re-enabled the line below because otherwise the function enters an infinite loop when presented with\n                //            unexpected data. this.ip gets incremented forever, and this.t gets set to undefined as it tries to read past the end of the array\n                if (this.ip_end - this.ip < 3) return this.INPUT_OVERRUN;\n\n                this.t = this.buf[this.ip++];\n\n                if (this.t >= 16) {\n                    this.ret = this.match();\n                    if(this.ret !== this.OK) {\n                        return this.ret === this.EOF_FOUND ? this.OK : this.ret;\n                    }\n                    continue;\n\n                } else if (this.t === 0) {\n                    while (this.buf[this.ip] === 0) {\n                        this.t += 255;\n                        this.ip++;\n                        // if (t > 511) return INPUT_OVERRUN;\n                        // if (this.ip_end - ip < 1) return INPUT_OVERRUN;\n                    }\n                    this.t += 15 + this.buf[this.ip++];\n                }\n                // if (op_end - op < t+3) return OUTPUT_OVERRUN;\n                // if (this.ip_end - ip < t+6) return INPUT_OVERRUN;\n\n                this.t += 3;\n                this.copy_from_buf();\n            } else {\n                this.skipToFirstLiteralFun = false;\n            }\n\n            this.t = this.buf[this.ip++];\n\n            if (this.t < 16) {\n                this.m_pos = this.op - (1 + 0x0800);\n                this.m_pos -= this.t >> 2;\n                this.m_pos -= this.buf[this.ip++] << 2;\n\n                // if ( m_pos <  out || m_pos >= op) return LOOKBEHIND_OVERRUN;\n                // if (op_end - op < 3) return OUTPUT_OVERRUN;\n                this.minNewSize = this.op + 3;\n                if(this.minNewSize > this.cbl) {this.extendBuffer();}\n                this.out[this.op++] = this.out[this.m_pos++];\n                this.out[this.op++] = this.out[this.m_pos++];\n                this.out[this.op++] = this.out[this.m_pos];\n\n                if(this.match_done() === 0) {\n                    continue;\n                } else {\n                    this.match_next();\n                }\n            }\n\n            this.ret = this.match();\n            if(this.ret !== this.OK) {\n                return this.ret === this.EOF_FOUND ? this.OK : this.ret;\n            }\n        }\n\n        return this.OK;\n    };\n\n    this._compressCore = function() {\n        this.ip_start = this.ip;\n        this.ip_end = this.ip + this.ll - 20;\n        this.jj = this.ip;\n        this.ti = this.t;\n\n        this.ip += this.ti < 4 ? 4 - this.ti : 0;\n\n        this.ip += 1 + ((this.ip - this.jj) >> 5);\n\n        for (;;) {\n            if(this.ip >= this.ip_end) {\n                break;\n            }\n\n            // dv = this.buf[this.ip] | (this.buf[this.ip + 1] << 8) | (this.buf[this.ip + 2] << 16) | (this.buf[this.ip + 3] << 24);\n            // this.dindex = ((0x1824429d * dv) >> 18) & 16383;\n            // The above code doesn't work in JavaScript due to a lack of 64 bit bitwise operations\n            // Instead, use (optimised two's complement integer arithmetic)\n            // Optimization is based on us only needing the high 16 bits of the lower 32 bit integer.\n            this.dv_lo = this.buf[this.ip] | (this.buf[this.ip + 1] << 8);\n            this.dv_hi = this.buf[this.ip + 2] | (this.buf[this.ip + 3] << 8);\n            this.dindex = (((this.dv_lo * 0x429d) >>> 16) + (this.dv_hi * 0x429d) + (this.dv_lo  * 0x1824) & 0xFFFF) >>> 2;\n\n            this.m_pos = this.ip_start + this.dict[this.dindex];\n\n            this.dict[this.dindex] = this.ip - this.ip_start;\n            if ((this.dv_hi<<16) + this.dv_lo != (this.buf[this.m_pos] | (this.buf[this.m_pos + 1] << 8) | (this.buf[this.m_pos + 2] << 16) | (this.buf[this.m_pos + 3] << 24))) {\n                this.ip += 1 + ((this.ip - this.jj) >> 5);\n                continue;\n            }\n            this.jj -= this.ti;\n            this.ti = 0;\n            this.v = this.ip - this.jj;\n\n            if (this.v !== 0) {\n                if (this.v <= 3) {\n                    this.out[this.op - 2] |= this.v;\n                    do {\n                        this.out[this.op++] = this.buf[this.jj++];\n                    } while (--this.v > 0);\n\n                } else {\n                    if (this.v <= 18) {\n                        this.out[this.op++] = this.v - 3;\n\n                    } else {\n                        this.tt = this.v - 18;\n                        this.out[this.op++] = 0;\n                        while (this.tt > 255) {\n                            this.tt -= 255;\n                            this.out[this.op++] = 0;\n                        }\n                        this.out[this.op++] = this.tt;\n                    }\n\n                    do {\n                        this.out[this.op++] = this.buf[this.jj++];\n                    } while (--this.v > 0);\n                }\n            }\n\n            this.m_len = 4;\n\n            // var skipTo_this.m_len_done = false;\n            if (this.buf[this.ip + this.m_len] === this.buf[this.m_pos + this.m_len]) {\n                do {\n                    this.m_len += 1; if(this.buf[this.ip + this.m_len] !==  this.buf[this.m_pos + this.m_len]) {break;}\n                    this.m_len += 1; if(this.buf[this.ip + this.m_len] !==  this.buf[this.m_pos + this.m_len]) {break;}\n                    this.m_len += 1; if(this.buf[this.ip + this.m_len] !==  this.buf[this.m_pos + this.m_len]) {break;}\n                    this.m_len += 1; if(this.buf[this.ip + this.m_len] !==  this.buf[this.m_pos + this.m_len]) {break;}\n                    this.m_len += 1; if(this.buf[this.ip + this.m_len] !==  this.buf[this.m_pos + this.m_len]) {break;}\n                    this.m_len += 1; if(this.buf[this.ip + this.m_len] !==  this.buf[this.m_pos + this.m_len]) {break;}\n                    this.m_len += 1; if(this.buf[this.ip + this.m_len] !==  this.buf[this.m_pos + this.m_len]) {break;}\n                    this.m_len += 1; if(this.buf[this.ip + this.m_len] !==  this.buf[this.m_pos + this.m_len]) {break;}\n                    if(this.ip + this.m_len >= this.ip_end) {\n                        // skipTo_this.m_len_done = true;\n                        break;\n                    }\n                } while (this.buf[this.ip + this.m_len] ===  this.buf[this.m_pos + this.m_len]);\n            }\n\n            // if (!skipTo_this.m_len_done) {\n            //     var inc = this.ctzl(this.buf[this.ip + this.m_len] ^ this.buf[this.m_pos + this.m_len]) >> 3;\n            //     this.m_len += inc;\n            // }\n\n            this.m_off = this.ip - this.m_pos;\n            this.ip += this.m_len;\n            this.jj = this.ip;\n            if (this.m_len <= 8 && this.m_off <= 0x0800) {\n\n                this.m_off -= 1;\n\n                this.out[this.op++] = ((this.m_len - 1) << 5) | ((this.m_off & 7) << 2);\n                this.out[this.op++] = this.m_off >> 3;\n\n            } else if (this.m_off <= 0x4000) {\n                this.m_off -= 1;\n                if (this.m_len <= 33) {\n                    this.out[this.op++] = 32 | (this.m_len - 2);\n\n                } else {\n                    this.m_len -= 33;\n                    this.out[this.op++] = 32;\n                    while (this.m_len > 255) {\n                        this.m_len -= 255;\n                        this.out[this.op++] = 0;\n                    }\n                    this.out[this.op++] = this.m_len;\n                }\n                this.out[this.op++] = this.m_off << 2;\n                this.out[this.op++] = this.m_off >> 6;\n            } else {\n                this.m_off -= 0x4000;\n                if (this.m_len <= 9) {\n                    this.out[this.op++] = 16 | ((this.m_off >> 11) & 8) | (this.m_len - 2);\n\n                } else {\n                    this.m_len -= 9;\n                    this.out[this.op++] = 16 | ((this.m_off >> 11) & 8);\n\n                    while (this.m_len > 255) {\n                        this.m_len -= 255;\n                        this.out[this.op++] = 0;\n                    }\n                    this.out[this.op++] = this.m_len;\n                }\n                this.out[this.op++] = this.m_off << 2;\n                this.out[this.op++] = this.m_off >> 6;\n            }\n        }\n        this.t = this.ll - ((this.jj - this.ip_start) - this.ti);\n    };\n\n    this.compress = function (state) {\n        this.state = state;\n        this.ip = 0;\n        this.buf = this.state.inputBuffer;\n        this.maxSize = this.buf.length + Math.ceil(this.buf.length / 16) + 64 + 3;\n        if(this.maxSize > this.out.length) {\n            this.out = new Uint8Array(this.maxSize);\n        }\n        // this.state.outputBuffer = new Uint8Array(this.buf.length + Math.ceil(this.buf.length / 16) + 64 + 3);\n        // this.out = this.state.outputBuffer;\n        this.op = 0;\n        this.l = this.buf.length;\n        this.t = 0;\n\n        while (this.l > 20) {\n            this.ll = (this.l <= 49152) ? this.l : 49152;\n            if ((this.t + this.ll) >> 5 <= 0) {\n                break;\n            }\n\n            this.dict.set(this.emptyDict);\n\n            this.prev_ip = this.ip;\n            this._compressCore();\n            this.ip = this.prev_ip + this.ll;\n            this.l -= this.ll;\n        }\n        this.t += this.l;\n\n        if (this.t > 0) {\n            this.ii = this.buf.length - this.t;\n\n            if (this.op === 0 && this.t <= 238) {\n                this.out[this.op++] = 17 + this.t;\n\n            } else if (this.t <= 3) {\n                this.out[this.op-2] |= this.t;\n\n            } else if (this.t <= 18) {\n                this.out[this.op++] = this.t - 3;\n\n            } else {\n                this.tt = this.t - 18;\n                this.out[this.op++] = 0;\n                while (this.tt > 255) {\n                    this.tt -= 255;\n                    this.out[this.op++] = 0;\n                }\n                this.out[this.op++] = this.tt;\n            }\n\n            do {\n                this.out[this.op++] = this.buf[this.ii++];\n            } while (--this.t > 0);\n        }\n\n        this.out[this.op++] = 17;\n        this.out[this.op++] = 0;\n        this.out[this.op++] = 0;\n\n        this.state.outputBuffer = this.returnNewBuffers === true ?\n            new Uint8Array(this.out.subarray(0, this.op)) :\n            this.out.subarray(0, this.op);\n        return this.OK;\n    }\n};\n\nvar instance = new _lzo1x();\n\nexport default {\n    OK: instance.OK,\n    INPUT_OVERRUN: instance.INPUT_OVERRUN,\n    OUTPUT_OVERRUN: instance.OUTPUT_OVERRUN,\n    LOOKBEHIND_OVERRUN: instance.LOOKBEHIND_OVERRUN,\n    EOF_FOUND: instance.EOF_FOUND,\n\n    setBlockSize: function(blockSize) {\n        return instance.setBlockSize(blockSize);\n    },\n\n    setOutputEstimate: function(outputSize) {\n        return instance.setOutputSize(outputSize);\n    },\n\n    setReturnNewBuffers: function(b) {\n        instance.setReturnNewBuffers(b);\n    },\n\n    compress: function(state, cfg) {\n        if(cfg !== undefined) {\n            instance.applyConfig(cfg);\n        }\n        return instance.compress(state);\n    },\n\n    decompress: function(state, cfg) {\n        if(cfg !== undefined) {\n            instance.applyConfig(cfg);\n        }\n        return instance.decompress(state);\n    }\n};\n"
  },
  {
    "path": "frontend/package.json",
    "content": "{\n  \"name\": \"save-file-converter\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"scripts\": {\n    \"serve\": \"vue-cli-service serve\",\n    \"build\": \"vue-cli-service build\",\n    \"test:unit\": \"vue-cli-service test:unit\",\n    \"lint\": \"vue-cli-service lint\",\n    \"deploy\": \"vue-cli-service s3-deploy\",\n    \"deploy:cleanup\": \"vue-cli-service s3-deploy-cleanup\"\n  },\n  \"dependencies\": {\n    \"@fortawesome/fontawesome-svg-core\": \"^1.2.34\",\n    \"@fortawesome/free-solid-svg-icons\": \"^6.5.0\",\n    \"@fortawesome/vue-fontawesome\": \"^2.0.2\",\n    \"@gtm-support/vue2-gtm\": \"^1.2.0\",\n    \"axios\": \"^0.21.2\",\n    \"axios-retry\": \"^3.1.9\",\n    \"bootstrap\": \"^4.5.3\",\n    \"bootstrap-vue\": \"^2.22.0\",\n    \"browserfs\": \"^1.4.3\",\n    \"browserify-aes\": \"^1.2.0\",\n    \"browserify-des\": \"^1.0.2\",\n    \"core-js\": \"^3.6.5\",\n    \"crc-32\": \"^1.2.0\",\n    \"create-hash\": \"^1.2.0\",\n    \"dayjs\": \"^1.10.4\",\n    \"encoding-japanese\": \"^2.2.0\",\n    \"file-saver\": \"^2.0.5\",\n    \"jszip\": \"^3.10.1\",\n    \"lodash-es\": \"^4.17.21\",\n    \"node-html-parser\": \"^4.0.0\",\n    \"pako\": \"^2.0.3\",\n    \"path\": \"^0.12.7\",\n    \"process\": \"^0.11.10\",\n    \"rzipjs\": \"^1.0.0\",\n    \"stream-browserify\": \"^3.0.0\",\n    \"vue\": \"^2.6.12\",\n    \"vue-async-computed\": \"^4.0.1\",\n    \"vue-mq\": \"^1.0.1\",\n    \"vue-router\": \"^3.2.0\",\n    \"vuex\": \"^3.4.0\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.12.16\",\n    \"@babel/eslint-parser\": \"^7.12.16\",\n    \"@vue/cli-plugin-babel\": \"~5.0.4\",\n    \"@vue/cli-plugin-eslint\": \"~5.0.4\",\n    \"@vue/cli-plugin-router\": \"~5.0.4\",\n    \"@vue/cli-plugin-unit-mocha\": \"~5.0.4\",\n    \"@vue/cli-plugin-vuex\": \"~5.0.4\",\n    \"@vue/cli-service\": \"~5.0.4\",\n    \"@vue/eslint-config-airbnb\": \"^6.0.0\",\n    \"@vue/language-server\": \"~3.0.0\",\n    \"@vue/test-utils\": \"^1.0.3\",\n    \"chai\": \"^4.1.2\",\n    \"eslint\": \"^7.32.0\",\n    \"eslint-plugin-import\": \"^2.25.3\",\n    \"eslint-plugin-vue\": \"^8.0.3\",\n    \"eslint-plugin-vuejs-accessibility\": \"^1.1.0\",\n    \"file-loader\": \"^6.2.0\",\n    \"pkcs7\": \"^1.0.4\",\n    \"seedrandom\": \"^3.0.5\",\n    \"vue-cli-plugin-s3-deploy\": \"~4.0.0-rc3\",\n    \"vue-cli-plugin-s3-deploy-cleanup\": \"^1.1.0\",\n    \"vue-cli-plugin-webpack-bundle-analyzer\": \"~4.0.0\",\n    \"vue-template-compiler\": \"^2.6.12\",\n    \"webpack-bundle-analyzer\": \"^4.5.0\"\n  },\n  \"eslintConfig\": {\n    \"root\": true,\n    \"env\": {\n      \"node\": true\n    },\n    \"extends\": [\n      \"plugin:vue/essential\",\n      \"@vue/airbnb\"\n    ],\n    \"parserOptions\": {\n      \"parser\": \"@babel/eslint-parser\"\n    },\n    \"rules\": {\n      \"max-len\": [\n        \"error\",\n        {\n          \"code\": 200,\n          \"tabWidth\": 2,\n          \"ignoreComments\": true,\n          \"ignoreTrailingComments\": true,\n          \"ignoreUrls\": true\n        }\n      ]\n    },\n    \"overrides\": [\n      {\n        \"files\": [\n          \"**/__tests__/*.{j,t}s?(x)\",\n          \"**/tests/unit/**/*.spec.{j,t}s?(x)\"\n        ],\n        \"env\": {\n          \"mocha\": true\n        }\n      }\n    ]\n  },\n  \"browserslist\": [\n    \"> 1%\",\n    \"last 2 versions\",\n    \"not dead\"\n  ]\n}\n"
  },
  {
    "path": "frontend/public/browserconfig.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<browserconfig>\n    <msapplication>\n        <tile>\n            <square150x150logo src=\"/mstile-150x150.png\"/>\n            <TileColor>#da532c</TileColor>\n        </tile>\n    </msapplication>\n</browserconfig>\n"
  },
  {
    "path": "frontend/public/index.html",
    "content": "<!DOCTYPE html>\n<html lang=\"en\">\n  <head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\">\n    <meta name=\"robots\" content=\"max-image-preview:none\">\n    <meta name=\"description\" content=\"Converts save files for retro consoles: MiSTer, srm to sav, sav to srm, GameShark (sps and gsv), PS1, GameCube, N64, DexDrive, Action Replay, Dreamcast, Sega Saturn, Saroo, Sega CD, Nintendo Switch Online, Retron 5, Wii Virtual Console, emulators, various flash cartridge formats, and save states from online emulation websites. Decrypts PSP saves. Provides help for downloading save files, erasing cartridge saves, and copying saves to and from original hardware.\" />\n    <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"<%= BASE_URL %>apple-touch-icon.png\">\n    <link rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"<%= BASE_URL %>favicon-32x32.png\">\n    <link rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"<%= BASE_URL %>favicon-16x16.png\">\n    <link rel=\"manifest\" href=\"<%= BASE_URL %>site.webmanifest\">\n    <link rel=\"mask-icon\" href=\"<%= BASE_URL %>safari-pinned-tab.svg\" color=\"#5bbad5\">\n    <meta name=\"msapplication-TileColor\" content=\"#da532c\">\n    <meta name=\"theme-color\" content=\"#ffffff\">\n    <title>Save File Converter</title>\n  </head>\n  <body>\n    <!-- Google Tag Manager (noscript) -->\n    <noscript>\n      <iframe src=\"https://www.googletagmanager.com/ns.html?id=GTM-MFQ82X4\" height=\"0\" width=\"0\" style=\"display:none;visibility:hidden\"></iframe>\n    </noscript>\n    <!-- End Google Tag Manager (noscript) -->\n    <noscript>\n      <strong>We're sorry but Save File Converter doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>\n    </noscript>\n    <div id=\"app\"></div>\n    <!-- built files will be auto injected -->\n  </body>\n</html>\n"
  },
  {
    "path": "frontend/public/robots.txt",
    "content": "Sitemap: http://savefileconverter.com/sitemap.txt"
  },
  {
    "path": "frontend/public/site.webmanifest",
    "content": "{\"name\":\"\",\"short_name\":\"\",\"icons\":[{\"src\":\"/android-chrome-192x192.png\",\"sizes\":\"192x192\",\"type\":\"image/png\"},{\"src\":\"/android-chrome-512x512.png\",\"sizes\":\"512x512\",\"type\":\"image/png\"}],\"theme_color\":\"#ffffff\",\"background_color\":\"#ffffff\",\"display\":\"standalone\"}"
  },
  {
    "path": "frontend/public/sitemap.txt",
    "content": "https://savefileconverter.com/#/retron-5\nhttps://savefileconverter.com/#/retron-5/erase-save\nhttps://savefileconverter.com/#/wii\nhttps://savefileconverter.com/#/nintendo-switch-online\nhttps://savefileconverter.com/#/gba/gameshark\nhttps://savefileconverter.com/#/gba/gameshark-sp\nhttps://savefileconverter.com/#/gba/action-replay\nhttps://savefileconverter.com/#/ps1/dexdrive\nhttps://savefileconverter.com/#/ps1/psp\nhttps://savefileconverter.com/#/ps1/ps3\nhttps://savefileconverter.com/#/ps1/emulator\nhttps://savefileconverter.com/#/psp\nhttps://savefileconverter.com/#/sega-cd\nhttps://savefileconverter.com/#/sega-saturn/emulator\nhttps://savefileconverter.com/#/sega-saturn/saroo\nhttps://savefileconverter.com/#/dreamcast\nhttps://savefileconverter.com/#/gamecube\nhttps://savefileconverter.com/#/n64/dexdrive\nhttps://savefileconverter.com/#/n64/controller-pak\nhttps://savefileconverter.com/#/mister\nhttps://savefileconverter.com/#/flash-carts\nhttps://savefileconverter.com/#/online-emulators\nhttps://savefileconverter.com/#/srm-sav\nhttps://savefileconverter.com/#/utilities/erase-save\nhttps://savefileconverter.com/#/utilities/advanced\nhttps://savefileconverter.com/#/other-converters\nhttps://savefileconverter.com/#/download-saves\nhttps://savefileconverter.com/#/original-hardware\nhttps://savefileconverter.com/#/about"
  },
  {
    "path": "frontend/src/App.vue",
    "content": "<template>\n  <div id=\"app\">\n    <div id=\"nav\">\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/mister\">MiSTer</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/srm-sav\">\n            .srm{{'\\xa0'}}\n            <span class=\"arrow-spacing\"><i class=\"fa fa-arrow-right-arrow-left\"></i></span>\n            {{'\\xa0'}}.sav{{'\\xa0'}}\n          </router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/flash-carts\">Flash{{'\\xa0'}}cartridges{{'\\xa0'}}/ original{{'\\xa0'}}cartridges</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/nintendo-switch-online\">Nintendo{{'\\xa0'}}Switch{{'\\xa0'}}Online</router-link> |\n          <router-link to=\"/wii\">Wii{{'\\xa0'}}Virtual{{'\\xa0'}}Console</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/online-emulators\">Online{{'\\xa0'}}emulators{{'\\xa0'}}</router-link> |\n          <router-link to=\"/retron-5\">Retron{{'\\xa0'}}5 / RetroFreak</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/n64/dexdrive\">N64{{'\\xa0'}}-{{'\\xa0'}}DexDrive</router-link> |\n          <router-link to=\"/n64/controller-pak\">N64{{'\\xa0'}}-{{'\\xa0'}}Controller{{'\\xa0'}}Pak{{'\\xa0'}}/{{'\\xa0'}}emulator</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/gba/gameshark\">GBA{{'\\xa0'}}-{{'\\xa0'}}GameShark</router-link> |\n          <router-link to=\"/gba/gameshark-sp\">GBA{{'\\xa0'}}-{{'\\xa0'}}GameShark{{'\\xa0'}}SP</router-link> |\n          <router-link to=\"/gba/action-replay\">GBA{{'\\xa0'}}-{{'\\xa0'}}Action{{'\\xa0'}}Replay</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/ps1/dexdrive\">PS1{{'\\xa0'}}-{{'\\xa0'}}DexDrive</router-link> |\n          <router-link to=\"/ps1/psp\">PS1{{'\\xa0'}}-{{'\\xa0'}}PSP</router-link> |\n          <router-link to=\"/ps1/ps3\">PS1{{'\\xa0'}}-{{'\\xa0'}}PS3</router-link> |\n          <router-link to=\"/ps1/emulator\">PS1{{'\\xa0'}}-{{'\\xa0'}}emulator</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/dreamcast\">Dreamcast{{'\\xa0'}}<span class=\"new-text\">(New)</span></router-link> |\n          <router-link to=\"/sega-saturn/saroo\">Sega{{'\\xa0'}}Saturn{{'\\xa0'}}-{{'\\xa0'}}Saroo</router-link> |\n          <router-link to=\"/sega-saturn/emulator\">Sega{{'\\xa0'}}Saturn{{'\\xa0'}}-{{'\\xa0'}}Emulator</router-link> |\n          <router-link to=\"/sega-cd\">Sega{{'\\xa0'}}CD</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/gamecube\">GameCube{{'\\xa0'}}<span class=\"new-text\">(New)</span></router-link> |\n          <router-link to=\"/psp\">PSP{{'\\xa0'}}-{{'\\xa0'}}Save{{'\\xa0'}}decryption</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col class=\"nav-row\">\n          <router-link to=\"/download-saves\">Download{{'\\xa0'}}saves</router-link> |\n          <router-link to=\"/original-hardware\">Copy{{'\\xa0'}}saves{{'\\xa0'}}to/from{{'\\xa0'}}original{{'\\xa0'}}hardware</router-link> |\n          <router-link to=\"/utilities/erase-save\">Erase{{'\\xa0'}}save from cartridge</router-link>\n        </b-col>\n      </b-row>\n      <b-row class=\"nav-row\">\n        <b-col>\n          <router-link to=\"/other-converters\">Other{{'\\xa0'}}converters</router-link> |\n          <router-link to=\"/utilities/advanced\">Advanced</router-link>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <router-link to=\"/about\">Discord{{'\\xa0'}}/{{'\\xa0'}}Contact{{'\\xa0'}}/{{'\\xa0'}}Donate</router-link>\n        </b-col>\n      </b-row>\n      <hr/>\n    </div>\n    <router-view/>\n    <div class=\"footer\"/> <!-- Add some blank space at the bottom to look better -->\n  </div>\n</template>\n\n<style>\n#app {\n  font-family: Avenir, Helvetica, Arial, sans-serif;\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  text-align: center;\n  color: #2c3e50;\n}\n\n#nav {\n  padding: 2em;\n}\n\n#nav a {\n  font-weight: bold;\n  color: #2c3e50;\n}\n\n#nav a.router-link-exact-active {\n  color: #42b983;\n}\n\n.arrow-spacing {\n  padding-left: 0.1em;\n  padding-right: 0.1em;\n}\n\n.nav-row {\n  padding-bottom: 1em;\n}\n\n.footer {\n  min-height: 6em;\n}\n\n.new-text {\n  color: indianred;\n}\n\n.beta-text {\n  color: indianred;\n}\n</style>\n"
  },
  {
    "path": "frontend/src/components/AdvancedUtils.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-tabs v-model=\"tabIndex\" content-class=\"mt-3\" justified>\n\n        <b-tab title=\"Resize\">\n          <tab-resize ref=\"tabResize\"/>\n        </b-tab>\n\n        <b-tab :title=\"'Endian\\xa0swap'\">\n          <tab-endian-swap ref=\"tabEndianSwap\"/>\n        </b-tab>\n\n        <b-tab title=\"Slice\">\n          <tab-slice ref=\"tabSlice\"/>\n        </b-tab>\n\n        <b-tab :title=\"'File\\xa0compare'\">\n          <tab-file-compare ref=\"tabFileCompare\"/>\n        </b-tab>\n\n        <b-tab title=\"Remove header/footer\">\n          <tab-remove-header-footer ref=\"tabRemoveHeaderFooter\"/>\n        </b-tab>\n\n        <b-tab title=\"Add header/footer\">\n          <tab-add-header-footer ref=\"tabAddHeaderFooter\"/>\n        </b-tab>\n\n        <b-tab title=\"Compression\">\n          <tab-compression ref=\"tabCompression\"/>\n        </b-tab>\n\n        <b-tab :title=\"'Byte\\xa0expansion'\">\n          <tab-byte-expansion ref=\"tabByteExpansion\"/>\n        </b-tab>\n\n      </b-tabs>\n\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n</style>\n\n<script>\nimport TabResize from './TabResize.vue';\nimport TabEndianSwap from './TabEndianSwap.vue';\nimport TabSlice from './TabSlice.vue';\nimport TabFileCompare from './TabFileCompare.vue';\nimport TabRemoveHeaderFooter from './TabRemoveHeaderFooter.vue';\nimport TabAddHeaderFooter from './TabAddHeaderFooter.vue';\nimport TabCompression from './TabCompression.vue';\nimport TabByteExpansion from './TabByteExpansion.vue';\n\nexport default {\n  name: 'AdvancedUtils',\n  components: {\n    TabResize,\n    TabEndianSwap,\n    TabSlice,\n    TabFileCompare,\n    TabRemoveHeaderFooter,\n    TabAddHeaderFooter,\n    TabCompression,\n    TabByteExpansion,\n  },\n  props: {\n    initialTab: {\n      type: String,\n      default: 'resize',\n    },\n  },\n  data() {\n    return {\n      tabIndex: 0,\n    };\n  },\n  beforeMount() {\n    // Need to keep these in sync with the template above. Is there a way to get these programmatically?\n    const possibleTabNames = [\n      'resize',\n      'endian-swap',\n      'slice',\n      'file-compare',\n      'remove-header-footer',\n      'add-header-footer',\n      'compression',\n      'byte-expansion',\n    ];\n\n    const initialTabIndex = possibleTabNames.indexOf(this.initialTab);\n\n    this.tabIndex = (initialTabIndex >= 0) ? initialTabIndex : 0;\n  },\n  watch: {\n    tabIndex() {\n      this.$refs.tabResize.reset();\n      this.$refs.tabEndianSwap.reset();\n      this.$refs.tabSlice.reset();\n      this.$refs.tabFileCompare.reset();\n      this.$refs.tabRemoveHeaderFooter.reset();\n      this.$refs.tabAddHeaderFooter.reset();\n      this.$refs.tabCompression.reset();\n      this.$refs.tabByteExpansion.reset();\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ByteExpandContract.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"Different emulators, cores, flash carts, and cart readers store Sega Genesis/Mega Drive save files in different ways.\n            Some store each 8-bit byte as a 16-bit word with 0x00 as the high byte, some use 0xFF as the high byte,\n            some duplicate each byte into a 16-bit word, and some store the individual bytes as-is with no expansion.\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'ByteExpandContract',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: null, text: 'Choose byte expansion style or contraction', disabled: true },\n        { value: 'byte-expand-00', text: 'Byte expansion with 0x00 (\"HELLO\" -> \" H E L L O\")' },\n        { value: 'byte-expand-ff', text: 'Byte expansion with 0xFF (\"HELLO\" -> \" H E L L O\")' },\n        { value: 'byte-expand-duplicate', text: 'Byte expansion with duplication (\"HELLO\" -> \"HHEELLLLOO\")' },\n        { value: 'byte-contract', text: 'Byte contraction (\" H E L L O\"/\"HHEELLLLOO\" -> \"HELLO\")' },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/CompressionDecompression.vue",
    "content": "<template>\n    <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"Whether to decompress or compress the save file\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'CompressionDecompression',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: 'decompress', text: 'Decompress file' }, // I think the most common use of this tool will be to decompress retroarch save files, so making decompress the default here makes sense\n        { value: 'compress', text: 'Compress file' },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/CompressionType.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"The algorithm to use to compress or decompress the save file\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'CompressionType',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: 'zlib', text: 'zlib algorithm' }, // Used by retroarch (also used internally in Retron 5 files). I think this is by far the most common compression type users will run into, so I think it makes sense to make this the default\n        { value: 'gzip', text: 'gzip algorithm' }, // Used by mednafen to compress Saturn saves (to cartridge memory)\n        { value: 'rzip', text: 'rzip algorithm' }, // Proprietary format for retroarch, which can be turned on optionally\n        { value: 'lzo', text: 'LZO algorithm' }, // This is used internally in goomba etc files, so it was easy to include here\n        // We could potentially add .zip compression here as well, since we handle it elsewhere for online emulators\n        // But that's the only use case I've found for it so far, and it has a dedicated page in the app and we can always ask users\n        // to just use their operating system's zip program. Also, zip supports multiple files inside one .zip file, which would increase\n        // the complexity of our Advanced tab, and without a use case for that it doesn't seem like the right thing to do at the moment.\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConversionDirection.vue",
    "content": "<template>\n  <div>\n    <mq-layout :mq=\"this.horizontalLayout\">\n      <b-form-group class=\"horizontal-arrangement\" v-slot=\"{ ariaDescribedby }\">\n        <b-form-radio-group\n          v-model=\"conversionDirectionInternal\"\n          :options=\"optionsHorizontal\"\n          :aria-describedby=\"ariaDescribedby\"\n          button-variant=\"outline-info\"\n          @change=\"onChange($event)\"\n          stacked\n          buttons\n        />\n      </b-form-group>\n    </mq-layout>\n    <mq-layout :mq=\"this.verticalLayout\">\n      <b-form-group class=\"vertical-arrangement\" v-slot=\"{ ariaDescribedby }\">\n        <b-form-radio-group\n          v-model=\"conversionDirectionInternal\"\n          :options=\"optionsVertical\"\n          :aria-describedby=\"ariaDescribedby\"\n          button-variant=\"outline-info\"\n          @change=\"onChange($event)\"\n          buttons\n        />\n      </b-form-group>\n    </mq-layout>\n  </div>\n</template>\n\n<style scoped>\n\n.horizontal-arrangement {\n  margin-top: 2.5em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n.vertical-arrangement {\n  margin-top: 1em;\n}\n\n</style>\n\n<script>\nexport default {\n  props: {\n    horizontalLayout: Array,\n    verticalLayout: Array,\n    conversionDirection: String,\n    disableDirection: {\n      type: String,\n      default: null,\n    },\n  },\n  data() {\n    return {\n      conversionDirectionInternal: this.conversionDirection, // We shouldn't directly mutate a prop because when the parent gets reloaded it'll reset its value\n      optionsHorizontal: [\n        { html: '<i class=\"fa fa-arrow-circle-right fa-3x\"></i>', value: 'convertToRaw', disabled: this.disableDirection === 'convertToRaw' },\n        { html: '<i class=\"fa fa-arrow-circle-left fa-3x\"></i>', value: 'convertToFormat', disabled: this.disableDirection === 'convertToFormat' },\n      ],\n      optionsVertical: [\n        { html: '<i class=\"fa fa-arrow-circle-down fa-3x\"></i>', value: 'convertToRaw', disabled: this.disableDirection === 'convertToRaw' },\n        { html: '<i class=\"fa fa-arrow-circle-up fa-3x\"></i>', value: 'convertToFormat', disabled: this.disableDirection === 'convertToFormat' },\n      ],\n    };\n  },\n  methods: {\n    onChange(event) {\n      this.$emit('change', event);\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertDreamcast.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Raw/emulator</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readDreamcastSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.bin, *.vmu, *.flash)\"\n              :leaveRoomForHelpIcon=\"false\"\n              acceptExtension=\".bin,.vmu,.flash\"\n              ref=\"inputFileDreamcastSaveData\"\n            />\n            <file-list\n              :display=\"this.dreamcastSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron\n                fluid\n                :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\"\n                :class=\"($mq === 'md') ? 'fix-jumbotron' : ''\"\n              >\n                <template v-slot:header>{{ individualSavesOrSaveText }}</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <div v-if=\"this.individualSaveType === 'dci'\">\n              <output-filename\n                v-model=\"outputFilename\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"false\"\n              />\n            </div>\n            <div v-else>\n              <output-filename\n                v-model=\"outputFilenameVmi\"\n                placeholder=\"Output filename (.vmi)\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"false\"\n              />\n              <output-filename\n                v-model=\"outputFilenameVms\"\n                placeholder=\"Output filename (.vms)\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"false\"\n              />\n            </div>\n            <dreamcast-individual-save-type-selector\n              :value=\"this.individualSaveType\"\n              @change=\"changeIndividualSaveType($event)\"\n            />\n          </div>\n          <div v-else>\n            <div v-if=\"this.individualSaveType === 'dci'\">\n              <input-file\n                @load=\"readEmulatorSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose files to add (*.dci)\"\n                :leaveRoomForHelpIcon=\"false\"\n                :allowMultipleFiles=\"true\"\n                ref=\"inputFileIndividualSaveDci\"\n                acceptExtension=\".dci\"\n              />\n            </div>\n            <div v-else>\n              <input-file\n                @load=\"readVmiSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose file to add (*.vmi)\"\n                :leaveRoomForHelpIcon=\"false\"\n                :allowMultipleFiles=\"false\"\n                acceptExtension=\".vmi\"\n                ref=\"inputFileIndividualSaveVmi\"\n              />\n              <input-file\n                @load=\"readVmsSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose file to add (*.vms)\"\n                :leaveRoomForHelpIcon=\"false\"\n                :allowMultipleFiles=\"false\"\n                acceptExtension=\".vms\"\n                ref=\"inputFileIndividualSaveVms\"\n              />\n            </div>\n            <dreamcast-individual-save-type-selector\n              :value=\"this.individualSaveType\"\n              @change=\"changeIndividualSaveType($event)\"\n            />\n            <file-list\n              :display=\"this.dreamcastSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"dreamcast-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=dc\">copy save files to and from a Dreamcast console</router-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.dreamcast-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* Mpve this up rather than deleting the margin under the selector above so that if this isn't visible there's still margin under the one above */\n.output-filesize {\n  margin-top: -1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards inside it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport DreamcastIndividualSaveTypeSelector from './DreamcastIndividualSaveTypeSelector.vue';\n\nimport DreamcastSaveData from '../save-formats/Dreamcast/Dreamcast';\nimport DreamcastDciSaveData from '../save-formats/Dreamcast/IndividualSaves/Dci';\nimport DreamcastVmiVmsSaveData from '../save-formats/Dreamcast/IndividualSaves/VmiVms';\nimport DreamcastBasics from '../save-formats/Dreamcast/Components/Basics';\n\nconst DEFAULT_ICON_SHAPE = 0;\nconst DEFAULT_INDIVIDUAL_SAVE_TYPE = 'dci';\n\nexport default {\n  name: 'ConvertDreamcast',\n  data() {\n    return {\n      dreamcastSaveData: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      outputFilenameVmi: null,\n      outputFilenameVms: null,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n      individualSaveType: DEFAULT_INDIVIDUAL_SAVE_TYPE,\n      vmiVmsParts: {},\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n    DreamcastIndividualSaveTypeSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      let hasOutputFilename = false;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        hasOutputFilename = ((this.individualSaveType === 'dci') && (this.outputFilename !== null))\n          || ((this.individualSaveType !== 'dci') && (this.outputFilenameVmi !== null) && (this.outputFilenameVms !== null));\n      } else {\n        hasOutputFilename = (this.outputFilename !== null);\n      }\n\n      return !this.dreamcastSaveData || this.dreamcastSaveData.getSaveFiles().length === 0 || !haveDataSelected || !hasOutputFilename;\n    },\n    individualSavesOrSaveText() {\n      return ((this.individualSaveType === 'vmivms') && (this.conversionDirection === 'convertToFormat')) ? 'Individual save' : 'Individual saves';\n    },\n  },\n  methods: {\n    changeIndividualSaveType(newValue) {\n      if (this.individualSaveType !== newValue) {\n        this.individualSaveType = newValue;\n        this.outputFilename = null;\n        this.outputFilenameVmi = null;\n        this.outputFilenameVms = null;\n        this.vmiVmsParts = {};\n\n        if (this.conversionDirection === 'convertToFormat') {\n          // When converting to a memcard image, we want to start over when we select a different input file type\n          // When when converting from a memcard image, we want to be able to freely select our output file type without having to start over selecting a new memcard image\n          this.dreamcastSaveData = null;\n        }\n\n        if (this.$refs.inputFileIndividualSaveDci) {\n          this.$refs.inputFileIndividualSaveDci.reset();\n        }\n\n        if (this.$refs.inputFileIndividualSaveVmi) {\n          this.$refs.inputFileIndividualSaveVmi.reset();\n        }\n\n        if (this.$refs.inputFileIndividualSaveVms) {\n          this.$refs.inputFileIndividualSaveVms.reset();\n        }\n\n        this.changeSelectedSaveData(this.selectedSaveData);\n      }\n    },\n    getFileNameFromSaveFile(saveFile) {\n      return Util.convertDescriptionToFilename(`${saveFile.filename}`);\n    },\n    getFileListNames() {\n      if ((this.dreamcastSaveData !== null) && (this.dreamcastSaveData.getSaveFiles() !== null)) {\n        return this.dreamcastSaveData.getSaveFiles().map((x) => {\n          const fileTypeText = (x.fileType === DreamcastBasics.FILE_TYPE_GAME) ? 'Game: ' : '';\n\n          const storageComment = x.storageComment.trim();\n          const fileComment = x.fileComment.trim();\n\n          if ((storageComment.length > 0) && (fileComment.length > 0)) {\n            return { displayText: `${fileTypeText}${storageComment} - ${fileComment}` };\n          }\n\n          if (storageComment.length > 0) {\n            return { displayText: `${fileTypeText}${storageComment}` };\n          }\n\n          if (fileComment.length > 0) {\n            return { displayText: `${fileTypeText}${fileComment}` };\n          }\n\n          // The filename isn't great to display, but it always contains something and none of our comments have anything in them\n          return { displayText: `${fileTypeText}${x.filename}` };\n        });\n      }\n\n      return [];\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.dreamcastSaveData = null;\n      this.errorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.outputFilenameVmi = null;\n      this.outputFilenameVms = null;\n      this.selectedSaveData = null;\n      this.individualSaveType = DEFAULT_INDIVIDUAL_SAVE_TYPE;\n      this.vmiVmsParts = {};\n\n      // The refs become undefined when the components are removed using a v-if\n      if (this.$refs.inputFileDreamcastSaveData) {\n        this.$refs.inputFileDreamcastSaveData.reset();\n      }\n\n      if (this.$refs.inputFileIndividualSaveDci) {\n        this.$refs.inputFileIndividualSaveDci.reset();\n      }\n\n      if (this.$refs.inputFileIndividualSaveVmi) {\n        this.$refs.inputFileIndividualSaveVmi.reset();\n      }\n\n      if (this.$refs.inputFileIndividualSaveVms) {\n        this.$refs.inputFileIndividualSaveVms.reset();\n      }\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (newSaveData !== null) {\n        if ((this.dreamcastSaveData !== null) && (this.dreamcastSaveData.getSaveFiles().length > 0)) {\n          this.selectedSaveData = newSaveData;\n\n          const filename = this.getFileNameFromSaveFile(this.dreamcastSaveData.getSaveFiles()[this.selectedSaveData]);\n\n          if (this.individualSaveType === 'dci') {\n            this.outputFilename = `${filename}.dci`;\n          } else {\n            this.outputFilenameVmi = `${filename}.vmi`;\n            this.outputFilenameVms = `${filename}.vms`;\n          }\n        } else {\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n          this.outputFilenameVmi = null;\n          this.outputFilenameVms = null;\n        }\n      }\n    },\n    readDreamcastSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.outputFilename = null;\n      this.outputFilenameVmi = null;\n      this.outputFilenameVms = null;\n      this.inputFilename = event.filename;\n      try {\n        this.dreamcastSaveData = DreamcastSaveData.createFromDreamcastData(event.arrayBuffer);\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.dreamcastSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readVmiSaveData(event) {\n      this.vmiVmsParts.vmiArrayBuffer = event.arrayBuffer;\n      if (Object.hasOwn(this.vmiVmsParts, 'vmiArrayBuffer') && Object.hasOwn(this.vmiVmsParts, 'vmsArrayBuffer')) {\n        this.readEmulatorSaveData(null);\n      }\n    },\n    readVmsSaveData(event) {\n      this.vmiVmsParts.vmsArrayBuffer = event.arrayBuffer;\n      if (Object.hasOwn(this.vmiVmsParts, 'vmiArrayBuffer') && Object.hasOwn(this.vmiVmsParts, 'vmsArrayBuffer')) {\n        this.readEmulatorSaveData(null);\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        let saveFiles = [];\n\n        if (this.individualSaveType === 'dci') {\n          const saveFileArrayBuffers = event.map((f) => f.arrayBuffer);\n          saveFiles = saveFileArrayBuffers.map((saveFileArrayBuffer) => DreamcastDciSaveData.convertIndividualSaveToSaveFile(saveFileArrayBuffer));\n        } else {\n          saveFiles = [DreamcastVmiVmsSaveData.convertIndividualSaveToSaveFile(this.vmiVmsParts.vmiArrayBuffer, this.vmiVmsParts.vmsArrayBuffer)];\n        }\n\n        const volumeInfo = {\n          useCustomColor: false,\n          timestamp: new Date(),\n          iconShape: DEFAULT_ICON_SHAPE,\n        };\n\n        this.dreamcastSaveData = DreamcastSaveData.createFromSaveFiles(saveFiles, volumeInfo);\n\n        if (this.dreamcastSaveData.getSaveFiles().length > 0) {\n          this.outputFilename = `${this.getFileNameFromSaveFile(this.dreamcastSaveData.getSaveFiles()[0])}.bin`;\n        } else {\n          this.outputFilename = 'output.bin';\n        }\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.dreamcastSaveData = null;\n        this.selectedSaveData = null;\n        this.outputFilename = null;\n        this.outputFilenameVmi = null;\n        this.outputFilenameVms = null;\n      }\n    },\n    convertFile() {\n      const outputFileList = [];\n\n      if (this.conversionDirection === 'convertToRaw') {\n        const saveFile = this.dreamcastSaveData.getSaveFiles()[this.selectedSaveData];\n\n        if (this.individualSaveType === 'dci') {\n          outputFileList.push({\n            arrayBuffer: DreamcastDciSaveData.convertSaveFileToDci(saveFile),\n            filename: this.outputFilename,\n          });\n        } else {\n          const vmiVmsSaveFile = {\n            ...saveFile,\n            description: 'Created by savefileconverter.com',\n            copyright: 'savefileconverter.com',\n            resourceName: saveFile.filename, // Will be truncated from 12 -> 8 characters\n          };\n\n          const { vmiArrayBuffer, vmsArrayBuffer } = DreamcastVmiVmsSaveData.convertSaveFileToVmiVms(vmiVmsSaveFile);\n\n          outputFileList.push(\n            {\n              arrayBuffer: vmiArrayBuffer,\n              filename: this.outputFilenameVmi,\n            },\n            {\n              arrayBuffer: vmsArrayBuffer,\n              filename: this.outputFilenameVms,\n            },\n          );\n        }\n      } else {\n        outputFileList.push({\n          arrayBuffer: this.dreamcastSaveData.getArrayBuffer(),\n          filename: this.outputFilename,\n        });\n      }\n\n      outputFileList.forEach((outputFile) => {\n        const outputBlob = new Blob([outputFile.arrayBuffer], { type: 'application/octet-stream' });\n\n        saveAs(outputBlob, outputFile.filename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n      });\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertFlashCarts.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Flash{{'\\xa0'}}cartridge</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readFlashCartSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <flash-cart-type\n              v-model=\"flashCartType\"\n              id=\"flash-cart-type\"\n              v-on:input=\"flashCartTypeChanged()\"\n              :disabled=\"false\"\n            />\n            <div v-if=\"this.isSegaCdWithTwoOutputFiles\">\n              <sega-cd-save-type-selector\n                :value=\"this.segaCdSaveType\"\n                @change=\"changeSegaCdSaveType($event)\"\n              />\n            </div>\n            <div v-if=\"this.romIsRequired\">\n              <input-file\n                id=\"choose-raw-file-rom\"\n                @load=\"readRomData($event)\"\n                :errorMessage=\"null\"\n                :placeholderText=\"`Choose the ROM for this file ${getFileExtensionsString(this.flashCartTypeClass.requiresRom().clazz)}`\"\n                helpText=\"These save files require some information from the corresponding ROM.\n                All processing by this website is done on your local machine, and your ROMs are not sent anywhere.\"\n                :acceptExtension=\"this.flashCartTypeClass.requiresRom().clazz.getFileExtensions().join(',')\"\n                :leaveRoomForHelpIcon=\"true\"\n              />\n            </div>\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <div v-if=\"this.displayOutputFileSize\">\n              <output-filesize v-model=\"outputFilesize\" id=\"output-filesize\" :platform=\"this.flashCartTypeClass.adjustOutputSizesPlatform()\"/>\n            </div>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <div v-if=\"this.isSegaCdWithOneOutputFile\">\n              <sega-cd-save-type-selector\n                :value=\"this.segaCdSaveType\"\n                @change=\"changeSegaCdSaveType($event)\"\n              />\n            </div>\n            <div v-if=\"this.displayOutputFileSize\">\n              <output-filesize v-model=\"outputFilesize\" id=\"output-filesize\" :platform=\"this.flashCartTypeClass.adjustOutputSizesPlatform()\"/>\n            </div>\n          </div>\n          <div v-else>\n            <div v-if=\"this.isSegaCdWithOneOutputFile\">\n              <input-file\n                @load=\"readEmulatorSaveData($event, 'rawInternalSaveArrayBuffer')\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose an internal memory save file to convert\"\n                :leaveRoomForHelpIcon=\"false\"\n                ref=\"inputFileSegaCdInternalMemory\"\n              />\n              <input-file\n                @load=\"readEmulatorSaveData($event, 'rawRamCartSaveArrayBuffer')\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose a RAM cartridge save file to convert\"\n                :leaveRoomForHelpIcon=\"false\"\n                ref=\"inputFileSegaCdRamCart\"\n              />\n            </div>\n            <div v-else>\n              <input-file\n                @load=\"readEmulatorSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose a file to convert\"\n                :leaveRoomForHelpIcon=\"false\"\n                ref=\"inputFileEmulator\"\n              />\n            </div>\n            <flash-cart-type\n              v-model=\"flashCartType\"\n              id=\"flash-cart-type\"\n              v-on:input=\"flashCartTypeChanged()\"\n              :disabled=\"false\"\n            />\n            <div v-if=\"this.isSegaCdWithTwoOutputFiles\">\n              <sega-cd-save-type-selector\n                :value=\"this.segaCdSaveType\"\n                @change=\"changeSegaCdSaveType($event)\"\n              />\n            </div>\n            <div v-if=\"this.romIsRequired\">\n              <input-file\n                id=\"choose-raw-file-rom\"\n                @load=\"readRomData($event)\"\n                :errorMessage=\"null\"\n                :placeholderText=\"`Choose the ROM for this file ${getFileExtensionsString(this.flashCartTypeClass.requiresRom().clazz)}`\"\n                helpText=\"These save files require some information from the corresponding ROM.\n                All processing by this website is done on your local machine, and your ROMs are not sent anywhere.\"\n                :acceptExtension=\"this.flashCartTypeClass.requiresRom().clazz.getFileExtensions().join(',')\"\n                :leaveRoomForHelpIcon=\"true\"\n              />\n            </div>\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"flash-cart-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.flashCartSaveData || !this.flashCartType || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Before copying a save file to or from a flash cart, please launch a different game first.<br>\n            Please see your flash cart documentation for more details, or check #faqs on the <router-link to=\"/about\">Discord</router-link>.\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.flash-cart-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport SegaCdUtil from '../util/SegaCd';\n\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FlashCartType from './FlashCartType.vue';\nimport SegaCdSaveTypeSelector from './SegaCdSaveTypeSelector.vue';\n\nimport GoombaEmulatorSaveData from '../save-formats/FlashCarts/GBA/GoombaEmulator';\nimport PocketNesEmulatorSaveData from '../save-formats/FlashCarts/GBA/PocketNesEmulator';\nimport SmsAdvanceEmulatorSaveData from '../save-formats/FlashCarts/GBA/SmsAdvanceEmulator';\nimport NesFlashCartSaveData from '../save-formats/FlashCarts/NES';\nimport SnesFlashCartSaveData from '../save-formats/FlashCarts/SNES/SNES';\nimport SuperGameboyFlashCartSaveData from '../save-formats/FlashCarts/SNES/GB';\nimport GenesisMegaEverdriveProGenesisFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaEverdrivePro/Genesis';\nimport GenesisMegaEverdriveProSegaCdFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaEverdrivePro/SegaCd';\nimport GenesisMegaEverdriveProNesFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaEverdrivePro/NES';\nimport GenesisMegaEverdriveProSmsFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaEverdrivePro/SMS';\nimport GenesisMegaEverdrivePro32xFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaEverdrivePro/32X';\nimport GenesisMegaSdGenesisFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaSD/Genesis';\nimport GenesisMegaSdSegaCdFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaSD/SegaCd';\nimport GenesisMegaSdSmsFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaSD/SMS';\nimport GenesisMegaSd32xFlashCartSaveData from '../save-formats/FlashCarts/Genesis/MegaSD/32X';\nimport GbFlashCartSaveData from '../save-formats/FlashCarts/GB';\nimport GbaFlashCartSaveData from '../save-formats/FlashCarts/GBA/GBA';\nimport N64FlashCartSaveData from '../save-formats/FlashCarts/N64/N64';\nimport N64NesFlashCartSaveData from '../save-formats/FlashCarts/N64/NES';\nimport Neon64EmulatorSaveData from '../save-formats/FlashCarts/N64/Neon64Emulator';\nimport Gb64EmulatorSaveData from '../save-formats/FlashCarts/N64/GB64Emulator';\nimport PcEngineFlashCartSaveData from '../save-formats/FlashCarts/PcEngine';\nimport GameGearFlashCartSaveData from '../save-formats/FlashCarts/GameGear';\nimport SmsFlashCartSaveData from '../save-formats/FlashCarts/SMS';\n\nexport default {\n  name: 'ConvertFlashCarts',\n  data() {\n    return {\n      flashCartSaveData: null,\n      romData: null,\n      flashCartType: null,\n      flashCartTypePrevious: null,\n      flashCartTypeClass: null,\n      errorMessage: null,\n      outputFilename: null,\n      outputFilesize: null,\n      conversionDirection: 'convertToRaw',\n      inputArrayBuffer: null,\n      inputFilename: null,\n      inputSegaCd: {},\n      segaCdSaveType: 'internal-memory',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n    FlashCartType,\n    SegaCdSaveTypeSelector,\n  },\n  computed: {\n    isSegaCdWithTwoOutputFiles: {\n      get() { return this.flashCartTypeIsSegaCdWithTwoOutputFiles(this.flashCartType); },\n    },\n    isSegaCdWithOneOutputFile: {\n      get() { return this.flashCartTypeIsSegaCdWithOneOutputFile(this.flashCartType); },\n    },\n    isSegaCd: {\n      get() { return this.flashCartTypeIsSegaCd(this.flashCartType); },\n    },\n    displayOutputFileSize: {\n      get() {\n        if ((this.flashCartTypeClass !== null) && (this.flashCartTypeClass.adjustOutputSizesPlatform() !== null)) {\n          if (this.isSegaCd) {\n            // Flash carts have fixed sizes for their RAM carts, so we don't want to adjust them.\n            // Emulators may have any size\n            return ((this.conversionDirection === 'convertToRaw') && (this.segaCdSaveType === 'ram-cart'));\n          }\n\n          return true;\n        }\n\n        return false;\n      },\n    },\n    romIsRequired: {\n      get() {\n        if (this.flashCartTypeClass === null) {\n          return false;\n        }\n\n        let requiresRomToConvert = [];\n\n        if (this.flashCartTypeClass.requiresRom() !== null) {\n          requiresRomToConvert = this.flashCartTypeClass.requiresRom().requiredToConvert;\n        }\n\n        return (requiresRomToConvert.indexOf(this.conversionDirection) >= 0);\n      },\n    },\n  },\n  methods: {\n    flashCartTypeIsSegaCdWithTwoOutputFiles(flashCartType) {\n      return (flashCartType === 'FlashCart-SegaCDGenesisEverdrive');\n    },\n    flashCartTypeIsSegaCdWithOneOutputFile(flashCartType) {\n      return (flashCartType === 'FlashCart-SegaCDMegaSD');\n    },\n    flashCartTypeIsSegaCd(flashCartType) {\n      return (this.flashCartTypeIsSegaCdWithTwoOutputFiles(flashCartType) || this.flashCartTypeIsSegaCdWithOneOutputFile(flashCartType));\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.flastCartSaveData = null;\n      this.romData = null;\n      this.flashCartType = null;\n      this.flashCartTypePrevious = null;\n      this.flashCartTypeClass = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.outputFilesize = null;\n      this.inputArrayBuffer = null;\n      this.inputFilename = null;\n      this.inputSegaCd = {};\n      this.segaCdSaveType = 'internal-memory';\n    },\n    getFileExtensionsString(romFormatClass) {\n      return `(${romFormatClass.getFileExtensions().map((f) => `*${f}`).join(', ')})`;\n    },\n    flashCartTypeChanged() {\n      if (this.flashCartType !== null) {\n        this.romData = null;\n\n        switch (this.flashCartType) {\n          case 'FlashCart-GoombaEmulator': {\n            this.flashCartTypeClass = GoombaEmulatorSaveData;\n            break;\n          }\n\n          case 'FlashCart-PocketNesEmulator': {\n            this.flashCartTypeClass = PocketNesEmulatorSaveData;\n            break;\n          }\n\n          case 'FlashCart-SMSAdvanceEmulator': {\n            this.flashCartTypeClass = SmsAdvanceEmulatorSaveData;\n            break;\n          }\n\n          case 'FlashCart-NES': {\n            this.flashCartTypeClass = NesFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-SNES': {\n            this.flashCartTypeClass = SnesFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-SuperGameBoy': {\n            this.flashCartTypeClass = SuperGameboyFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-GenesisEverdrive': {\n            this.flashCartTypeClass = GenesisMegaEverdriveProGenesisFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-SegaCDGenesisEverdrive': {\n            this.flashCartTypeClass = GenesisMegaEverdriveProSegaCdFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-NESGenesisEverdrive': {\n            this.flashCartTypeClass = GenesisMegaEverdriveProNesFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-SMSGenesisEverdrive': {\n            this.flashCartTypeClass = GenesisMegaEverdriveProSmsFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-32XGenesisEverdrive': {\n            this.flashCartTypeClass = GenesisMegaEverdrivePro32xFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-GenesisMegaSD': {\n            this.flashCartTypeClass = GenesisMegaSdGenesisFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-SegaCDMegaSD': {\n            this.flashCartTypeClass = GenesisMegaSdSegaCdFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-SMSGenesisMegaSD': {\n            this.flashCartTypeClass = GenesisMegaSdSmsFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-32XGenesisMegaSD': {\n            this.flashCartTypeClass = GenesisMegaSd32xFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-GB': {\n            this.flashCartTypeClass = GbFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-GBA': {\n            this.flashCartTypeClass = GbaFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-N64': {\n            this.flashCartTypeClass = N64FlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-NESN64': {\n            this.flashCartTypeClass = N64NesFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-Neon64Emulator': {\n            this.flashCartTypeClass = Neon64EmulatorSaveData;\n            break;\n          }\n\n          case 'FlashCart-GB64Emulator': {\n            this.flashCartTypeClass = Gb64EmulatorSaveData;\n            break;\n          }\n\n          case 'FlashCart-PCE': {\n            this.flashCartTypeClass = PcEngineFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-GG': {\n            this.flashCartTypeClass = GameGearFlashCartSaveData;\n            break;\n          }\n\n          case 'FlashCart-SMS': {\n            this.flashCartTypeClass = SmsFlashCartSaveData;\n            break;\n          }\n\n          default: {\n            this.flashCartTypeClass = null;\n            break;\n          }\n        }\n      } else {\n        this.flashCartTypeClass = null;\n      }\n\n      // We use different input boxes in the UI depending on whether there are 1 or 2 raw files to read,\n      // and so we want to wipe out any input file info that may be lurking internally when we switch to showing a different input box\n      // because it's not clear which box we would assign that to\n      //\n      // Additionally, there's a browser optimization/bug where when we swap out a different file input that's\n      // in the same location as a previous one, then the contents of the file box in the DOM carry over to the new box\n      // even though it's a different element. So, we call reset() here\n\n      const currentlySegaCd = this.isSegaCd;\n      const previouslySegaCd = this.flashCartTypeIsSegaCd(this.flashCartTypePrevious);\n\n      if ((currentlySegaCd !== previouslySegaCd) && (this.conversionDirection !== 'convertToRaw')) {\n        this.inputArrayBuffer = null;\n        this.flashCartSaveData = null;\n        this.inputFilename = null;\n        this.inputSegaCd = {};\n        this.outputFilesize = null;\n        // The refs become undefined when the components are removed using a v-if\n        if (this.$refs.inputFileSegaCdInternalMemory) {\n          this.$refs.inputFileSegaCdInternalMemory.reset();\n        }\n        if (this.$refs.inputFileSegaCdRamCart) {\n          this.$refs.inputFileSegaCdRamCart.reset();\n        }\n        if (this.$refs.inputFileEmulator) {\n          this.$refs.inputFileEmulator.reset();\n        }\n      }\n\n      this.flashCartTypePrevious = this.flashCartType;\n\n      this.segaCdSaveType = this.getDefaultSegaCdSaveType();\n      this.updateFlashCartSaveData();\n    },\n    changeSegaCdSaveType(newSaveType) {\n      this.segaCdSaveType = newSaveType;\n\n      this.updateFlashCartSaveData();\n    },\n    readRomData(event) {\n      this.romData = event.arrayBuffer;\n      this.segaCdSaveType = this.getDefaultSegaCdSaveType();\n\n      this.updateFlashCartSaveData();\n    },\n    hasRequiredRomData() {\n      return (!this.romIsRequired || (this.romData !== null));\n    },\n    hasRequiredInputFileData() {\n      return (this.inputArrayBuffer !== null) && (this.inputFilename !== null);\n    },\n    getOutputFilename(inputFilename, fileExtension) {\n      if (fileExtension !== null) {\n        return Util.changeFilenameExtension(inputFilename, fileExtension);\n      }\n\n      return inputFilename;\n    },\n    getFlashCartInput() {\n      if (this.isSegaCdWithTwoOutputFiles) {\n        return (this.segaCdSaveType === 'internal-memory') ? { flashCartInternalSaveArrayBuffer: this.inputArrayBuffer } : { flashCartRamCartSaveArrayBuffer: this.inputArrayBuffer };\n      }\n\n      return this.inputArrayBuffer;\n    },\n    getRawInput() {\n      if (this.isSegaCdWithTwoOutputFiles) {\n        return (this.segaCdSaveType === 'internal-memory') ? { rawInternalSaveArrayBuffer: this.inputArrayBuffer } : { rawRamCartSaveArrayBuffer: this.inputArrayBuffer };\n      }\n\n      if (this.isSegaCdWithOneOutputFile) {\n        return this.inputSegaCd;\n      }\n\n      return this.inputArrayBuffer;\n    },\n    getFlashCartFilename() {\n      if (this.isSegaCdWithTwoOutputFiles) {\n        return this.flashCartTypeClass.getFlashCartFileName(this.segaCdSaveType);\n      }\n\n      return this.getOutputFilename(this.inputFilename, this.flashCartTypeClass.getFlashCartFileExtension());\n    },\n    getRawFilename() {\n      if (this.isSegaCd) {\n        const filenameSuffix = (this.segaCdSaveType === 'internal-memory') ? ' - internal memory' : ' - ram cartridge';\n\n        return `${Util.removeFilenameExtension(this.inputFilename)}${filenameSuffix}.${this.flashCartTypeClass.getRawFileExtension()}`;\n      }\n\n      return this.getOutputFilename(this.inputFilename, this.flashCartTypeClass.getRawFileExtension());\n    },\n    getDefaultOutputFilesize() {\n      if (this.isSegaCd) {\n        // All flash cart types have the same internal memory size\n\n        if (this.segaCdSaveType === 'internal-memory') {\n          return SegaCdUtil.INTERNAL_SAVE_SIZE;\n        }\n\n        // RAM cart, so ask the class the default size\n\n        if (this.conversionDirection === 'convertToRaw') {\n          return this.flashCartTypeClass.getRawDefaultRamCartSize();\n        }\n\n        return this.flashCartTypeClass.getFlashCartDefaultRamCartSize();\n      }\n\n      return this.flashCartSaveData.getRawArrayBuffer().byteLength;\n    },\n    getDefaultSegaCdSaveType() {\n      if (this.isSegaCdWithTwoOutputFiles) {\n        if ((this.inputArrayBuffer !== null) && (this.inputArrayBuffer.byteLength > SegaCdUtil.INTERNAL_SAVE_SIZE)) {\n          return 'ram-cart';\n        }\n      }\n\n      return 'internal-memory';\n    },\n    updateFlashCartSaveData() {\n      this.errorMessage = null;\n\n      if ((this.flashCartTypeClass !== null) && this.hasRequiredRomData() && this.hasRequiredInputFileData()) {\n        try {\n          if (this.conversionDirection === 'convertToRaw') {\n            this.flashCartSaveData = this.flashCartTypeClass.createFromFlashCartData(this.getFlashCartInput(), this.romData);\n            this.outputFilename = this.getRawFilename();\n          } else {\n            this.flashCartSaveData = this.flashCartTypeClass.createFromRawData(this.getRawInput(), this.romData);\n            this.outputFilename = this.getFlashCartFilename();\n          }\n          this.outputFilesize = this.getDefaultOutputFilesize();\n        } catch (e) {\n          this.errorMessage = 'This file does not seem to be in the correct format';\n          this.flashCartSaveData = null;\n          this.outputFilename = null;\n          this.segaCdSaveType = 'internal-memory';\n        }\n      } else {\n        this.flashCartSaveData = null;\n        this.outputFilename = null;\n      }\n    },\n    readFlashCartSaveData(event) {\n      this.inputArrayBuffer = event.arrayBuffer;\n      this.inputFilename = event.filename;\n      this.segaCdSaveType = this.getDefaultSegaCdSaveType();\n      this.inputSegaCd = {};\n\n      this.updateFlashCartSaveData();\n    },\n    readEmulatorSaveData(event, inputSegaCdType = null) {\n      this.inputArrayBuffer = event.arrayBuffer;\n      this.inputFilename = event.filename;\n      this.segaCdSaveType = this.getDefaultSegaCdSaveType();\n\n      if (inputSegaCdType !== null) {\n        this.inputSegaCd[inputSegaCdType] = event.arrayBuffer;\n      } else {\n        this.inputSegaCd = {};\n      }\n\n      this.updateFlashCartSaveData();\n    },\n    convertFile() {\n      let finalFlashCartSaveData = this.flashCartSaveData;\n\n      let needsResize = false;\n\n      if (this.isSegaCd) {\n        needsResize = this.flashCartSaveData.getRawArrayBuffer(this.flashCartTypeClass.RAM_CART).byteLength !== this.outputFilesize;\n      } else {\n        needsResize = this.flashCartSaveData.getRawArrayBuffer().byteLength !== this.outputFilesize;\n      }\n\n      if (needsResize) {\n        finalFlashCartSaveData = this.flashCartTypeClass.createWithNewSize(this.flashCartSaveData, this.outputFilesize);\n      }\n\n      let output = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        if (this.isSegaCd) {\n          output = finalFlashCartSaveData.getRawArrayBuffer(this.segaCdSaveType);\n        } else {\n          output = finalFlashCartSaveData.getRawArrayBuffer();\n        }\n      } else {\n        if (this.isSegaCd) { // eslint-disable-line no-lonely-if\n          output = finalFlashCartSaveData.getFlashCartArrayBuffer(this.segaCdSaveType);\n        } else {\n          output = finalFlashCartSaveData.getFlashCartArrayBuffer();\n        }\n      }\n\n      const outputBlob = new Blob([output], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename);\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertGameCube.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Raw/emulator</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readGameCubeSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.raw, *.gcp)\"\n              :leaveRoomForHelpIcon=\"false\"\n              acceptExtension=\".raw,.gcp\"\n              ref=\"inputFileGameCubeSaveData\"\n            />\n            <file-list\n              :display=\"this.gameCubeSaveDataLargest !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <output-filesize\n              :value=\"this.outputFilesize\"\n              @input=\"changeOutputFilesize($event)\"\n              platform=\"gamecube\"\n              :customFormatter=\"formatSize\"\n              overrideHelpText=\"Select the size of memory card that you wish to create\"\n            />\n            <game-cube-encoding-selector\n              :value=\"this.outputEncoding\"\n              @input=\"changeOutputEncoding($event)\"\n              id=\"gameCubeEncodingSelector\"\n            />\n            <input-file\n              @load=\"readGameCubeExampleFileSaveData($event)\"\n              :errorMessage=\"this.errorMessageExampleFile\"\n              placeholderText=\"Optional: example file (*.raw, *.gcp)\"\n              :leaveRoomForHelpIcon=\"false\"\n              acceptExtension=\".raw,.gcp\"\n              helpText=\"When copying a .raw file to an original memory card, the file must contain a special ID number specific to that individual memory card.\n              Provide an example file here from that memory card so that the ID number can be copied from it. This is not required when using an emulator or the Memcard Pro GC.\"\n              ref=\"inputFileGameCubeExampleSaveData\"\n              id=\"inputFileGameCubeExampleSaveData\"\n            />\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron\n                fluid\n                :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\"\n                :class=\"($mq === 'md') && (this.individualSavesOrMemoryCard === 'individual-saves') ? 'fix-jumbotron' : ''\"\n              >\n                <template v-slot:header>{{ individualSavesOrMemoryCardText }}</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <div v-if=\"this.individualSavesOrMemoryCard === 'individual-saves'\">\n              <output-filename\n                v-model=\"outputFilename\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"false\"\n              />\n            </div>\n            <div v-else>\n             <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            </div>\n            <individual-saves-or-memory-card-selector\n              :value=\"this.individualSavesOrMemoryCard\"\n              @change=\"changeIndividualSavesOrMemoryCard($event)\"\n              :individualSavesText=\"this.individualSavesText\"\n              :memoryCardText=\"this.memoryCardText\"\n            />\n            <div v-if=\"this.individualSavesOrMemoryCard === 'memory-card'\">\n              <output-filesize\n                class=\"output-filesize\"\n                :value=\"this.outputFilesize\"\n                @input=\"changeOutputFilesize($event)\"\n                platform=\"gamecube\"\n                :customFormatter=\"formatSize\"\n                overrideHelpText=\"Select the size of memory card that you wish to create\"\n              />\n            </div>\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose files to add (*.gci, *.gcs, *.sav)\"\n              :leaveRoomForHelpIcon=\"false\"\n              :allowMultipleFiles=\"true\"\n              acceptExtension=\".gci,.gcs,.sav\"\n            />\n            <file-list\n              :display=\"this.gameCubeSaveDataLargest !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"gamecube-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=gcn\">copy save files to and from a GameCube console</router-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.gamecube-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* Mpve this up rather than deleting the margin under the selector above so that if this isn't visible there's still margin under the one above */\n.output-filesize {\n  margin-top: -1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport IndividualSavesOrMemoryCardSelector from './IndividualSavesOrMemoryCardSelector.vue';\nimport GameCubeEncodingSelector from './GameCubeEncodingSelector.vue';\n\nimport GameCubeSaveData from '../save-formats/GameCube/GameCube';\nimport GameCubeGciSaveData from '../save-formats/GameCube/IndividualSaves/Gci';\nimport GameCubeIndividualSaves from '../save-formats/GameCube/IndividualSaves/IndividualSaves';\nimport GameCubeUtil from '../save-formats/GameCube/Util';\nimport GameCubeHeader from '../save-formats/GameCube/Components/Header';\n\nimport PlatformSaveSizes from '../save-formats/PlatformSaveSizes';\n\nconst DEFAULT_OUTPUT_FILE_SIZE = 2097152; // 251 blocks (16 megabits)\nconst DEFAULT_OUTPUT_ENCODING = 'US-ASCII';\n\nexport default {\n  name: 'ConvertGameCube',\n  data() {\n    return {\n      gameCubeSaveDataLargest: null,\n      gameCubeSaveDataResized: null,\n      gameCubeSaveDataExample: null,\n      errorMessage: null,\n      errorMessageExampleFile: null,\n      inputFilename: null,\n      outputFilename: null,\n      outputFilesize: DEFAULT_OUTPUT_FILE_SIZE,\n      outputEncoding: DEFAULT_OUTPUT_ENCODING,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n      individualSavesOrMemoryCard: 'individual-saves',\n      individualSavesText: 'Individual saves',\n      memoryCardText: 'Raw/emulator',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n    FileList,\n    IndividualSavesOrMemoryCardSelector,\n    GameCubeEncodingSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      const gameCubeSaveData = (this.individualSavesOrMemoryCard === 'individual-saves') ? this.gameCubeSaveDataLargest : this.gameCubeSaveDataResized;\n\n      return !gameCubeSaveData || gameCubeSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n    individualSavesOrMemoryCardText() {\n      return (this.individualSavesOrMemoryCard === 'individual-saves') ? this.individualSavesText : this.memoryCardText;\n    },\n    largestSaveSize() {\n      return PlatformSaveSizes.gamecube.at(-1); // Last element of array\n    },\n  },\n  methods: {\n    formatSize(sizeBytes) {\n      const sizeMegabits = GameCubeUtil.bytesToMegabits(sizeBytes);\n      const { numTotalBlocks } = GameCubeUtil.getTotalSizes(sizeMegabits);\n\n      return `${numTotalBlocks} blocks (${sizeMegabits} megabits)`;\n    },\n    getFileNameFromSaveFile(saveFile) {\n      // Let's just copy the same format that Dolphin uses:\n      // https://github.com/dolphin-emu/dolphin/blob/58a70db588dbcdbebcb25531f85dbab5d236b60e/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp#L305\n\n      const sanitizedFilename = Util.convertDescriptionToFilename(`${saveFile.publisherCode}-${saveFile.gameCode}-${saveFile.fileName}`);\n\n      return `${sanitizedFilename}.gci`;\n    },\n    getFileSizeErrorMessage() {\n      const sizeMegabits = GameCubeUtil.bytesToMegabits(this.outputFilesize);\n      const { numTotalBlocks } = GameCubeUtil.getTotalSizes(sizeMegabits);\n\n      return `A GameCube memory card of size ${numTotalBlocks} blocks (${sizeMegabits} megabits) is not large enough to contain all of the files specified`;\n    },\n    getGameCubeDataResized() {\n      this.gameCubeSaveDataResized = null;\n      if (this.gameCubeSaveDataLargest !== null) {\n        try {\n          this.gameCubeSaveDataResized = GameCubeSaveData.createWithNewSize(this.gameCubeSaveDataLargest, this.outputFilesize);\n        } catch (e) {\n          this.errorMessage = this.getFileSizeErrorMessage();\n          this.gameCubeSaveDataResized = null;\n          this.selectedSaveData = null;\n        }\n      }\n    },\n    changeOutputFilesize(newValue) {\n      this.outputFilesize = newValue;\n      this.errorMessage = null;\n\n      this.getGameCubeDataResized();\n    },\n    changeOutputEncoding(newValue) {\n      this.outputEncoding = newValue;\n      this.errorMessage = null;\n\n      if (this.gameCubeSaveDataLargest !== null) {\n        try {\n          this.gameCubeSaveDataLargest = GameCubeSaveData.createWithNewEncoding(this.gameCubeSaveDataLargest, this.outputEncoding);\n        } catch (e) {\n          this.errorMessage = 'Could not create save file for this region';\n          this.gameCubeSaveDataLargest = null;\n          this.selectedSaveData = null;\n        }\n      }\n\n      this.getGameCubeDataResized();\n    },\n    changeIndividualSavesOrMemoryCard(newValue) {\n      this.errorMessage = null;\n\n      if (this.individualSavesOrMemoryCard !== newValue) {\n        this.individualSavesOrMemoryCard = newValue;\n\n        if (newValue === 'individual-saves') {\n          if (this.selectedSaveData === null) {\n            this.changeSelectedSaveData(0);\n          }\n        } else {\n          if (this.inputFilename !== null) {\n            this.outputFilename = Util.changeFilenameExtension(this.inputFilename, 'raw');\n          }\n          this.selectedSaveData = null;\n          this.getGameCubeDataResized();\n        }\n      }\n    },\n    getFileListNames() {\n      if ((this.gameCubeSaveDataLargest !== null) && (this.gameCubeSaveDataLargest.getSaveFiles() !== null)) {\n        return this.gameCubeSaveDataLargest.getSaveFiles().map((x) => ({ displayText: `${x.comments[0]} - ${x.comments[1]}` }));\n      }\n\n      return [];\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.gameCubeSaveDataLargest = null;\n      this.gameCubeSaveDataResized = null;\n      this.gameCubeSaveDataExample = null;\n      this.errorMessage = null;\n      this.errorMessageExampleFile = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.outputFilesize = DEFAULT_OUTPUT_FILE_SIZE;\n      this.outputEncoding = DEFAULT_OUTPUT_ENCODING;\n      this.selectedSaveData = null;\n      this.individualSavesOrMemoryCard = 'individual-saves';\n\n      // The refs become undefined when the components are removed using a v-if\n      if (this.$refs.inputFileGameCubeSaveData) {\n        this.$refs.inputFileGameCubeSaveData.reset();\n      }\n      if (this.$refs.inputFileGameCubeExampleSaveData) {\n        this.$refs.inputFileGameCubeExampleSaveData.reset();\n      }\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (newSaveData !== null) {\n        if ((this.gameCubeSaveDataLargest !== null) && (this.gameCubeSaveDataLargest.getSaveFiles().length > 0)) {\n          this.selectedSaveData = newSaveData;\n          this.outputFilename = this.getFileNameFromSaveFile(this.gameCubeSaveDataLargest.getSaveFiles()[this.selectedSaveData]);\n          this.changeIndividualSavesOrMemoryCard('individual-saves');\n        } else {\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n        }\n      }\n    },\n    readGameCubeExampleFileSaveData(event) {\n      this.errorMessageExampleFile = null;\n\n      try {\n        this.gameCubeSaveDataExample = GameCubeSaveData.createFromGameCubeData(event.arrayBuffer);\n\n        this.changeOutputFilesize(this.gameCubeSaveDataExample.getArrayBuffer().byteLength);\n      } catch (e) {\n        this.errorMessageExampleFile = 'File appears to not be in the correct format';\n        this.gameCubeSaveDataExample = null;\n      }\n    },\n    readGameCubeSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      try {\n        this.gameCubeSaveDataLargest = GameCubeSaveData.createFromGameCubeData(event.arrayBuffer);\n\n        this.individualSavesOrMemoryCard = null;\n\n        this.changeIndividualSavesOrMemoryCard('individual-saves');\n        this.changeOutputFilesize(this.gameCubeSaveDataLargest.getArrayBuffer().byteLength);\n\n        this.getGameCubeDataResized();\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.gameCubeSaveDataLargest = null;\n        this.gameCubeSaveDataResized = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        const saveFileArrayBuffers = event.map((f) => f.arrayBuffer);\n        const saveFiles = saveFileArrayBuffers.map((saveFileArrayBuffer) => GameCubeIndividualSaves.convertIndividualSaveToSaveFile(saveFileArrayBuffer)); // Note that here we use the inferred encoding. This will be overwritten when we convert to a memory card image below\n\n        const volumeInfo = {\n          formatOsTimeCode: GameCubeUtil.getOsTimeFromDate(new Date()), // Represents now, by the brower's clock\n          rtcBias: 0,\n          languageCode: GameCubeUtil.getLanguageCode('English'),\n          viDtvStatus: 0,\n          memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n          memcardSizeMegabits: GameCubeUtil.bytesToMegabits(this.largestSaveSize),\n          encodingCode: GameCubeUtil.getEncodingCode(this.outputEncoding),\n        };\n\n        this.gameCubeSaveDataLargest = GameCubeSaveData.createFromSaveFiles(saveFiles, volumeInfo);\n\n        if (this.gameCubeSaveDataLargest.getSaveFiles().length > 0) {\n          this.outputFilename = `${Util.removeFilenameExtension(this.getFileNameFromSaveFile(this.gameCubeSaveDataLargest.getSaveFiles()[0]))}.raw`;\n        } else {\n          this.outputFilename = 'output.raw';\n        }\n\n        this.getGameCubeDataResized();\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.gameCubeSaveDataLargest = null;\n        this.selectedSaveData = null;\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if ((this.conversionDirection === 'convertToRaw') && (this.individualSavesOrMemoryCard === 'individual-saves')) {\n        const individualArrayBuffers = GameCubeGciSaveData.convertSaveFilesToGcis(this.gameCubeSaveDataLargest.getSaveFiles());\n        outputArrayBuffer = individualArrayBuffers[this.selectedSaveData];\n      } else {\n        if (this.gameCubeSaveDataExample !== null) {\n          const volumeInfo = {\n            ...this.gameCubeSaveDataLargest.getVolumeInfo(),\n            cardFlashId: this.gameCubeSaveDataExample.getVolumeInfo().cardFlashId,\n          };\n\n          this.gameCubeSaveDataLargest = GameCubeSaveData.createFromSaveFiles(this.gameCubeSaveDataLargest.getSaveFiles(), volumeInfo);\n\n          this.getGameCubeDataResized();\n        }\n\n        outputArrayBuffer = this.gameCubeSaveDataResized.getArrayBuffer();\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertGbaActionReplay.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Action Replay</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readActionReplaySaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.xps)\"\n              acceptExtension=\".xps\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <output-filesize v-model=\"outputFilesize\" id=\"action-replay-filesize\" platform=\"gba\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <output-filesize v-model=\"outputFilesize\" id=\"action-replay-filesize\" platform=\"gba\"/>\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"action-replay-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.actionReplaySaveData || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=gba\">copy save files to and from a GBA cartridge</router-link>?\n          </div>\n          <div class=\"help\">\n            Help: how do I copy files to and from my <b-link href=\"https://www.youtube.com/watch?v=o7WQYnYYT6Y\">Action Replay DSi</b-link> or <b-link href=\"http://uk.codejunkies.com/downloads/manuals/armax_gba_ds_english.pdf\">Action Replay MAX DUO</b-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n.action-replay-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport ActionReplaySaveData from '../save-formats/GBA/ActionReplay';\n\nexport default {\n  name: 'ConvertGbaActionReplay',\n  data() {\n    return {\n      actionReplaySaveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      outputFilesize: null,\n      conversionDirection: 'convertToRaw',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.actionReplaySaveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.outputFilesize = null;\n    },\n    readActionReplaySaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.actionReplaySaveData = ActionReplaySaveData.createFromActionReplayData(event.arrayBuffer);\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'srm');\n        this.outputFilesize = this.actionReplaySaveData.getRawSaveData().byteLength;\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.actionReplaySaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.actionReplaySaveData = ActionReplaySaveData.createFromEmulatorData(event.arrayBuffer);\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'xps');\n        this.outputFilesize = this.actionReplaySaveData.getRawSaveData().byteLength;\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.actionReplaySaveData = null;\n      }\n    },\n    convertFile() {\n      let finalActionReplaySaveData = this.actionReplaySaveData;\n\n      if (this.actionReplaySaveData.getRawSaveData().byteLength !== this.outputFilesize) {\n        finalActionReplaySaveData = ActionReplaySaveData.createWithNewSize(this.actionReplaySaveData, this.outputFilesize);\n      }\n\n      const outputArrayBuffer = (this.conversionDirection === 'convertToRaw') ? finalActionReplaySaveData.getRawSaveData() : finalActionReplaySaveData.getArrayBuffer();\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertGbaGameShark.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"center\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>GameShark</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\" class=\"inputs-row\">\n            <input-file\n              id=\"choose-gameshark-file\"\n              @load=\"readGameSharkSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.sps)\"\n              acceptExtension=\".sps\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n          <div v-else class=\"inputs-row\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"true\"/>\n            <output-filesize v-model=\"outputFilesize\" id=\"gameshark-filesize\" platform=\"gba\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\" class=\"inputs-row\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"true\"/>\n            <output-filesize v-model=\"outputFilesize\" id=\"raw-filesize\" platform=\"gba\"/>\n          </div>\n          <div v-else class=\"inputs-row\">\n            <input-file\n              id=\"choose-raw-file\"\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"true\"\n            />\n            <input-file\n              id=\"choose-raw-file-rom\"\n              @load=\"readRomData($event)\"\n              :errorMessage=\"null\"\n              placeholderText=\"Choose the ROM for this file (*.gba)\"\n              helpText=\"GameShark save files contain some information from the corresponding ROM, and some emulators check this information before allowing the save to be loaded.\n              All processing by this website is done on your local machine, and your ROMs are not sent anywhere.\"\n              acceptExtension=\".gba\"\n              :leaveRoomForHelpIcon=\"true\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"gameshark-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.gameSharkSaveData || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=gba\">copy save files to and from a GBA cartridge</router-link>?\n          </div>\n          <div class=\"help\">\n            Help: how do I <b-link href=\"https://gamehacking.org/vb/forum/video-game-hacking-and-development/school-of-hacking/14153-gameshark-advance-and-color-save-backup\">copy save files to and from my GameShark</b-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.gameshark-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n.inputs-row {\n  min-height: 4.8em;\n}\n\n</style>\n\n<script>\nimport dayjs from 'dayjs';\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport GameSharkSaveData from '../save-formats/GBA/GameShark';\n\nexport default {\n  name: 'ConvertGbaGameShark',\n  data() {\n    return {\n      gameSharkSaveData: null,\n      romData: null,\n      emulatorSaveData: null,\n      emulatorSaveDataFilename: null,\n      errorMessage: null,\n      outputFilename: null,\n      outputFilesize: null,\n      conversionDirection: 'convertToRaw',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.gameSharkSaveData = null;\n      this.romData = null;\n      this.emulatorSaveData = null;\n      this.emulatorSaveDataFilename = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.outputFilesize = null;\n    },\n    readRomData(event) {\n      this.romData = event.arrayBuffer;\n      this.tryToCreateGameSharkSaveDataFromEmulatorSaveData();\n    },\n    readEmulatorSaveData(event) {\n      this.emulatorSaveData = event.arrayBuffer;\n      this.emulatorSaveDataFilename = event.filename;\n      this.tryToCreateGameSharkSaveDataFromEmulatorSaveData();\n    },\n    readGameSharkSaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.gameSharkSaveData = GameSharkSaveData.createFromGameSharkData(event.arrayBuffer);\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'srm');\n        this.outputFilesize = this.gameSharkSaveData.getRawSaveData().byteLength;\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.gameSharkSaveData = null;\n        this.outputFilename = null;\n        this.outputFilesize = null;\n      }\n    },\n    tryToCreateGameSharkSaveDataFromEmulatorSaveData() {\n      if ((this.romData !== null) && (this.emulatorSaveData !== null) && (this.emulatorSaveDataFilename !== null)) { // Need to be careful that the user can choose the save data and ROM files in any order, so only proceed once both have been chosen\n        this.errorMessage = null;\n\n        try {\n          const title = Util.removeFilenameExtension(this.emulatorSaveDataFilename);\n          const date = dayjs().format('DD/MM/YYYY hh:mm:ss a');\n          const notes = 'Created with savefileconverter.com';\n          this.gameSharkSaveData = GameSharkSaveData.createFromEmulatorData(this.emulatorSaveData, title, date, notes, this.romData);\n          this.outputFilename = Util.changeFilenameExtension(this.emulatorSaveDataFilename, 'sps');\n          this.outputFilesize = this.gameSharkSaveData.getRawSaveData().byteLength;\n        } catch (e) {\n          this.errorMessage = e.message;\n          this.gameSharkSaveData = null;\n          this.outputFilename = null;\n          this.outputFilesize = null;\n        }\n      }\n    },\n    convertFile() {\n      let finalGameSharkSaveData = this.gameSharkSaveData;\n\n      if (this.gameSharkSaveData.getRawSaveData().byteLength !== this.outputFilesize) {\n        finalGameSharkSaveData = GameSharkSaveData.createWithNewSize(this.gameSharkSaveData, this.outputFilesize);\n      }\n\n      const outputArrayBuffer = (this.conversionDirection === 'convertToRaw') ? finalGameSharkSaveData.getRawSaveData() : finalGameSharkSaveData.getArrayBuffer();\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertGbaGameSharkSP.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"center\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>GameShark{{'\\xa0'}}SP</template> <!-- Not sure why &nbsp; doesn't work here, but this does -->\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\" class=\"inputs-row\">\n            <input-file\n              id=\"choose-gameshark-file\"\n              @load=\"readGameSharkSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.gsv)\"\n              acceptExtension=\".gsv\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n          <div v-else class=\"inputs-row\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"true\"/>\n            <output-filesize v-model=\"outputFilesize\" id=\"gameshark-filesize\" platform=\"gba\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            disableDirection=\"convertToFormat\"\n            @change=\"changeConversionDirection($event)\"\n            id=\"conversion-direction\"\n          />\n          <b-popover target=\"conversion-direction\" triggers=\"focus hover\" placement=\"bottom\">\n            Not enough is known about GameShark SP saves to be able to write out a file in this format. We can currently only extract the raw save from these files.\n          </b-popover>\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\" class=\"inputs-row\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"true\"/>\n            <output-filesize v-model=\"outputFilesize\" id=\"raw-filesize\" platform=\"gba\"/>\n          </div>\n          <div v-else class=\"inputs-row\">\n            <input-file\n              id=\"choose-raw-file\"\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"true\"\n            />\n            <input-file\n              id=\"choose-raw-file-rom\"\n              @load=\"readRomData($event)\"\n              :errorMessage=\"null\"\n              placeholderText=\"Choose the ROM for this file (*.gba)\"\n              helpText=\"GameShark SP save files contain some information from the corresponding ROM, and some emulators check this information before allowing the save to be loaded.\n              All processing by this website is done on your local machine, and your ROMs are not sent anywhere.\"\n              acceptExtension=\".gba\"\n              :leaveRoomForHelpIcon=\"true\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"gameshark-sp-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.gameSharkSaveData || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=gba\">copy save files to and from a GBA cartridge</router-link>?\n          </div>\n          <div class=\"help\">\n            Help: how do I <b-link href=\"https://www.manualslib.com/manual/515605/Mad-Catz-Gameshark-Sp.html?page=17#manual\">copy save files to and from my GameShark SP</b-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.gameshark-sp-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n.inputs-row {\n  min-height: 4.8em;\n}\n\n</style>\n\n<script>\nimport { BPopover } from 'bootstrap-vue';\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport SaveFilesUtil from '../util/SaveFiles';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport GameSharkSpSaveData from '../save-formats/GBA/GameSharkSP';\n\nexport default {\n  name: 'ConvertGbaGameSharkSP',\n  data() {\n    return {\n      gameSharkSaveData: null,\n      romData: null,\n      emulatorSaveData: null,\n      emulatorSaveDataFilename: null,\n      errorMessage: null,\n      outputFilename: null,\n      outputFilesize: null,\n      conversionDirection: 'convertToRaw',\n    };\n  },\n  components: {\n    BPopover,\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.gameSharkSaveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.outputFilesize = null;\n    },\n    readGameSharkSaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.gameSharkSaveData = GameSharkSpSaveData.createFromGameSharkSpData(event.arrayBuffer);\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'srm');\n        this.outputFilesize = this.gameSharkSaveData.getRawSaveData().byteLength;\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.gameSharkSaveData = null;\n        this.outputFilename = null;\n        this.outputFilesize = null;\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = this.gameSharkSaveData.getRawSaveData();\n\n      if (outputArrayBuffer.byteLength !== this.outputFilesize) {\n        outputArrayBuffer = SaveFilesUtil.resizeRawSave(outputArrayBuffer, this.outputFilesize);\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertMister.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>MiSTer</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readMisterSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <mister-platform\n              v-model=\"misterPlatform\"\n              id=\"platform\"\n              v-on:input=\"misterPlatformChanged()\"\n              :disabled=\"false\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <div v-if=\"this.isSegaCd\">\n              <sega-cd-save-type-selector\n                :value=\"this.segaCdSaveType\"\n                @change=\"changeSegaCdSaveType($event)\"\n                :ramCartText=\"this.misterPlatform === 'Mister-SAT' ? 'Backup cartridge' : 'RAM cartridge'\"\n              />\n            </div>\n            <div v-if=\"this.displayOutputFileSize\">\n              <output-filesize v-model=\"outputFilesize\" id=\"output-filesize\" :platform=\"this.misterPlatformClass.adjustOutputSizesPlatform()\"/>\n            </div>\n          </div>\n          <div v-else>\n            <div v-if=\"this.isSegaCd\">\n              <input-file\n                @load=\"readEmulatorSaveData($event, 'rawInternalSaveArrayBuffer')\"\n                :errorMessage=\"this.segaCdInternalMemoryErrorMessage\"\n                placeholderText=\"Choose an internal memory save file to convert\"\n                :leaveRoomForHelpIcon=\"false\"\n                ref=\"inputFileSegaCdInternalMemory\"\n              />\n              <input-file\n                @load=\"readEmulatorSaveData($event, 'rawCartSaveArrayBuffer')\"\n                :errorMessage=\"this.segaCdRamCartridgeErrorMessage\"\n                placeholderText=\"Choose a RAM cartridge save file to convert\"\n                :leaveRoomForHelpIcon=\"false\"\n                ref=\"inputFileSegaCdRamCart\"\n              />\n            </div>\n            <div v-else>\n              <input-file\n                @load=\"readEmulatorSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose a file to convert\"\n                :leaveRoomForHelpIcon=\"false\"\n                ref=\"inputFileEmulator\"\n              />\n            </div>\n            <mister-platform\n              v-model=\"misterPlatform\"\n              id=\"platform\"\n              v-on:input=\"misterPlatformChanged()\"\n              :disabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"mister-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.misterSaveData || !this.misterPlatform || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.mister-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport MisterPlatform from './MisterPlatform.vue';\nimport SegaCdSaveTypeSelector from './SegaCdSaveTypeSelector.vue';\n\nimport MisterNesSaveData from '../save-formats/Mister/Nes';\nimport MisterSnesSaveData from '../save-formats/Mister/Snes';\nimport MisterN64CartSaveData from '../save-formats/Mister/N64Cart';\nimport MisterN64MempackSaveData from '../save-formats/Mister/N64Mempack';\nimport MisterGameboySaveData from '../save-formats/Mister/Gameboy';\nimport MisterGameboyAdvanceSaveData from '../save-formats/Mister/GameboyAdvance';\nimport MisterGameGearSaveData from '../save-formats/Mister/GameGear';\nimport MisterSmsSaveData from '../save-formats/Mister/Sms';\nimport MisterGenesisSaveData from '../save-formats/Mister/Genesis';\nimport MisterSegaCdSaveData from '../save-formats/Mister/SegaCd';\nimport MisterSegaSaturnSaveData from '../save-formats/Mister/SegaSaturn';\nimport MisterPcEngineSaveData from '../save-formats/Mister/PcEngine';\nimport MisterPs1SaveData from '../save-formats/Mister/Ps1';\nimport MisterWonderSwanSaveData from '../save-formats/Mister/WonderSwan';\nimport SegaError from '../save-formats/SegaError';\n\nexport default {\n  name: 'ConvertMister',\n  data() {\n    return {\n      misterSaveData: null,\n      misterPlatform: null,\n      misterPlatformPrevious: null,\n      misterPlatformClass: null,\n      errorMessage: null,\n      segaCdInternalMemoryErrorMessage: null,\n      segaCdRamCartridgeErrorMessage: null,\n      outputFilename: null,\n      outputFilesize: null,\n      conversionDirection: 'convertToRaw',\n      inputArrayBuffer: null,\n      inputFilename: null,\n      inputFileType: null,\n      inputSegaCd: {},\n      segaCdSaveType: 'internal-memory',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n    MisterPlatform,\n    SegaCdSaveTypeSelector,\n  },\n  computed: {\n    isSegaCd: {\n      get() { return (this.misterPlatform === 'Mister-MCD') || (this.misterPlatform === 'Mister-SAT'); },\n    },\n    displayOutputFileSize: {\n      get() {\n        if ((this.misterPlatformClass !== null) && (this.misterPlatformClass.adjustOutputSizesPlatform() !== null)) {\n          if (this.isSegaCd) {\n            return (this.segaCdSaveType === 'ram-cart');\n          }\n\n          return true;\n        }\n\n        return false;\n      },\n    },\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.misterSaveData = null;\n      this.misterPlatform = null;\n      this.misterPlatformPrevious = null;\n      this.misterPlatformClass = null;\n      this.errorMessage = null;\n      this.segaCdInternalMemoryErrorMessage = null;\n      this.segaCdRamCartridgeErrorMessage = null;\n      this.outputFilename = null;\n      this.outputFilesize = null;\n      this.inputArrayBuffer = null;\n      this.inputFilename = null;\n      this.inputFileType = null;\n      this.inputSegaCd = {};\n      this.segaCdSaveType = 'internal-memory';\n    },\n    changeSegaCdSaveType(newSaveType) {\n      this.segaCdSaveType = newSaveType;\n      if ((this.inputFilename !== null) && (this.misterPlatformClass !== null)) {\n        this.outputFilename = this.getSegaCdRawFileName();\n      }\n    },\n    getSegaCdRawFileName() {\n      const filenameSuffix = (this.segaCdSaveType === 'internal-memory') ? ' - internal memory' : ' - cartridge';\n\n      return `${Util.removeFilenameExtension(this.inputFilename)}${filenameSuffix}.${this.misterPlatformClass.getRawFileExtension(this.segaCdSaveType)}`;\n    },\n    misterPlatformChanged() {\n      if (this.misterPlatform !== null) {\n        switch (this.misterPlatform) {\n          case 'Mister-NES': {\n            this.misterPlatformClass = MisterNesSaveData;\n            break;\n          }\n\n          case 'Mister-SNES': {\n            this.misterPlatformClass = MisterSnesSaveData;\n            break;\n          }\n\n          case 'Mister-N64-Cart': {\n            this.misterPlatformClass = MisterN64CartSaveData;\n            break;\n          }\n\n          case 'Mister-N64-Mempack': {\n            this.misterPlatformClass = MisterN64MempackSaveData;\n            break;\n          }\n\n          case 'Mister-GB': {\n            this.misterPlatformClass = MisterGameboySaveData;\n            break;\n          }\n\n          case 'Mister-GBA': {\n            this.misterPlatformClass = MisterGameboyAdvanceSaveData;\n            break;\n          }\n\n          case 'Mister-GG': {\n            this.misterPlatformClass = MisterGameGearSaveData;\n            break;\n          }\n\n          case 'Mister-SMS': {\n            this.misterPlatformClass = MisterSmsSaveData;\n            break;\n          }\n\n          case 'Mister-MD': {\n            this.misterPlatformClass = MisterGenesisSaveData;\n            break;\n          }\n\n          case 'Mister-MCD': {\n            this.misterPlatformClass = MisterSegaCdSaveData;\n            break;\n          }\n\n          case 'Mister-SAT': {\n            this.misterPlatformClass = MisterSegaSaturnSaveData;\n            break;\n          }\n\n          case 'Mister-PCE': {\n            this.misterPlatformClass = MisterPcEngineSaveData;\n            break;\n          }\n\n          case 'Mister-PS1': {\n            this.misterPlatformClass = MisterPs1SaveData;\n            break;\n          }\n\n          case 'Mister-WS': {\n            this.misterPlatformClass = MisterWonderSwanSaveData;\n            break;\n          }\n\n          default: {\n            this.misterPlatformClass = null;\n            break;\n          }\n        }\n      } else {\n        this.misterPlatformClass = null;\n      }\n\n      // We use different input boxes in the UI depending on whether there are 1 or 2 raw files to read,\n      // and so we want to wipe out any input file info that may be lurking internally when we switch to showing a different input box\n      // because it's not clear which box we would assign that to\n      //\n      // Additionally, there's a browser optimization/bug where when we swap out a different file input that's\n      // in the same location as a previous one, then the contents of the file box in the DOM carry over to the new box\n      // even though it's a different element. So, we call reset() here\n\n      if ((this.misterPlatform !== this.misterPlatformPrevious) && (this.conversionDirection !== 'convertToRaw')) {\n        this.inputFileType = null;\n        this.inputArrayBuffer = null;\n        this.inputFilename = null;\n        this.inputSegaCd = {};\n        // The refs become undefined when the components are removed using a v-if\n        if (this.$refs.inputFileSegaCdInternalMemory) {\n          this.$refs.inputFileSegaCdInternalMemory.reset();\n        }\n        if (this.$refs.inputFileSegaCdRamCart) {\n          this.$refs.inputFileSegaCdRamCart.reset();\n        }\n        if (this.$refs.inputFileEmulator) {\n          this.$refs.inputFileEmulator.reset();\n        }\n      }\n\n      this.misterPlatformPrevious = this.misterPlatform;\n\n      this.updateMisterSaveData();\n    },\n    updateMisterSaveData(inputSegaCdType) {\n      this.errorMessage = null;\n      this.segaCdInternalMemoryErrorMessage = null;\n      this.segaCdRamCartridgeErrorMessage = null;\n      this.outputFilesize = null;\n\n      if ((this.misterPlatformClass !== null) && (this.inputArrayBuffer !== null) && (this.inputFilename !== null) && (this.inputFileType !== null)) {\n        try {\n          if (this.inputFileType === 'mister') {\n            this.misterSaveData = this.misterPlatformClass.createFromMisterData(this.inputArrayBuffer);\n            if (this.isSegaCd) {\n              this.outputFilename = this.getSegaCdRawFileName();\n            } else {\n              this.outputFilename = Util.changeFilenameExtension(this.inputFilename, this.misterPlatformClass.getRawFileExtension(this.inputArrayBuffer));\n            }\n          } else {\n            if (this.isSegaCd) {\n              this.misterSaveData = this.misterPlatformClass.createFromRawData(this.inputSegaCd); // It can take up to 2 input array buffers to create this data\n            } else {\n              this.misterSaveData = this.misterPlatformClass.createFromRawData(this.inputArrayBuffer);\n            }\n            this.outputFilename = Util.changeFilenameExtension(this.inputFilename, this.misterPlatformClass.getMisterFileExtension(this.inputArrayBuffer));\n          }\n          if (this.isSegaCd) {\n            // The internal memory save buffer size can't be changed; only the RAM cart size\n            this.outputFilesize = this.misterSaveData.getRawArrayBuffer(MisterSegaCdSaveData.RAM_CART).byteLength;\n          } else {\n            this.outputFilesize = this.misterSaveData.getRawArrayBuffer().byteLength;\n          }\n        } catch (e) {\n          if (e instanceof SegaError) {\n            if (e.internalSaveError !== null) {\n              this.segaCdInternalMemoryErrorMessage = 'This file does not seem to be in the correct format';\n            }\n            if (e.ramCartError !== null) {\n              this.segaCdRamCartridgeErrorMessage = 'This file does not seem to be in the correct format';\n            }\n          } else if (inputSegaCdType === null) {\n            this.errorMessage = 'This file does not seem to be in the correct format';\n          }\n          this.misterSaveData = null;\n        }\n      } else {\n        this.misterSaveData = null;\n        this.outputFilename = null;\n        this.outputFilesize = null;\n        this.segaCdSaveType = 'internal-memory';\n      }\n    },\n    readMisterSaveData(event) {\n      this.inputFileType = 'mister';\n      this.inputArrayBuffer = event.arrayBuffer;\n      this.inputFilename = event.filename;\n      this.inputSegaCd = {};\n\n      this.updateMisterSaveData();\n    },\n    readEmulatorSaveData(event, inputSegaCdType = null) {\n      this.inputFileType = 'raw';\n      this.inputArrayBuffer = event.arrayBuffer;\n      this.inputFilename = event.filename;\n\n      if (inputSegaCdType !== null) {\n        this.inputSegaCd[inputSegaCdType] = event.arrayBuffer;\n      } else {\n        this.inputSegaCd = {};\n      }\n\n      this.updateMisterSaveData(inputSegaCdType);\n    },\n    convertFile() {\n      let finalMisterSaveData = this.misterSaveData;\n\n      let needsResize = false;\n\n      if (this.isSegaCd) {\n        needsResize = this.misterSaveData.getRawArrayBuffer(MisterSegaCdSaveData.RAM_CART).byteLength !== this.outputFilesize;\n      } else {\n        needsResize = this.misterSaveData.getRawArrayBuffer().byteLength !== this.outputFilesize;\n      }\n\n      if (needsResize) {\n        finalMisterSaveData = this.misterPlatformClass.createWithNewSize(this.misterSaveData, this.outputFilesize);\n      }\n\n      let output = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        if (this.isSegaCd) {\n          output = finalMisterSaveData.getRawArrayBuffer(this.segaCdSaveType);\n        } else {\n          output = finalMisterSaveData.getRawArrayBuffer();\n        }\n      } else {\n        output = finalMisterSaveData.getMisterArrayBuffer();\n      }\n\n      const outputBlob = new Blob([output], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename);\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertN64DexDrive.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>DexDrive</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readDexDriveSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.n64)\"\n              acceptExtension=\".n64\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <file-list\n              :display=\"this.dexDriveSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\" :class=\"$mq === 'md' ? 'fix-jumbotron' : ''\">\n                <template v-slot:header>{{ individualSavesOrMemoryCardText }}</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <div v-if=\"this.individualSavesOrMemoryCard === 'individual-saves'\">\n              <div v-if=\"this.userAllowedToChangeFilename\">\n                <output-filename\n                  v-model=\"outputFilename\"\n                />\n              </div>\n              <div v-else>\n                <output-filename\n                  v-model=\"outputFilename\"\n                  :leaveRoomForHelpIcon=\"true\"\n                  :disabled=\"true\"\n                  helpText=\"The filename for an individual save contains important information that the game needs to find this save data. Please do not modify it after downloading the save.\"\n                />\n              </div>\n            </div>\n            <div v-else>\n             <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            </div>\n            <individual-saves-or-memory-card-selector\n              :value=\"this.individualSavesOrMemoryCard\"\n              @change=\"changeIndividualSavesOrMemoryCard($event)\"\n              :individualSavesText=\"this.individualSavesText\"\n              :memoryCardText=\"this.memoryCardText\"\n            />\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose files to add\"\n              :leaveRoomForHelpIcon=\"false\"\n              :allowMultipleFiles=\"true\"\n            />\n            <file-list\n              :display=\"this.dexDriveSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"n64-dexdrive-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=n64\">copy save files to and from an N64 cartridge or Controller Pak</router-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.n64-dexdrive-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport IndividualSavesOrMemoryCardSelector from './IndividualSavesOrMemoryCardSelector.vue';\nimport N64DexDriveSaveData from '../save-formats/N64/DexDrive';\nimport N64GameSerialCodeUtil from '../save-formats/N64/Components/GameSerialCodeUtil';\nimport N64IndividualSaveFilename from '../save-formats/N64/IndividualSaveFilename';\n\nexport default {\n  name: 'ConvertN64DexDrive',\n  data() {\n    return {\n      dexDriveSaveData: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n      individualSavesOrMemoryCard: 'memory-card',\n      individualSavesText: 'Individual saves',\n      memoryCardText: 'Controller Pak',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n    IndividualSavesOrMemoryCardSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      return !this.dexDriveSaveData || this.dexDriveSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n    individualSavesOrMemoryCardText() {\n      return (this.individualSavesOrMemoryCard === 'individual-saves') ? this.individualSavesText : this.memoryCardText;\n    },\n    userAllowedToChangeFilename() {\n      return !this.dexDriveSaveData\n        || ((this.dexDriveSaveData.getSaveFiles().length > 0) && (this.selectedSaveData !== null) && N64GameSerialCodeUtil.isCartSave(this.dexDriveSaveData.getSaveFiles()[this.selectedSaveData]));\n    },\n  },\n  methods: {\n    changeIndividualSavesOrMemoryCard(newValue) {\n      if (this.individualSavesOrMemoryCard !== newValue) {\n        this.individualSavesOrMemoryCard = newValue;\n\n        if (newValue === 'individual-saves') {\n          if (this.selectedSaveData === null) {\n            this.changeSelectedSaveData(0);\n          }\n        } else {\n          if (this.inputFilename !== null) {\n            this.outputFilename = Util.changeFilenameExtension(this.inputFilename, 'mpk');\n          }\n          this.selectedSaveData = null;\n        }\n      }\n    },\n    getFileListNames() {\n      if ((this.dexDriveSaveData !== null) && (this.dexDriveSaveData.getSaveFiles() !== null)) {\n        return this.dexDriveSaveData.getSaveFiles().map(\n          (x) => ({\n            displayText: N64GameSerialCodeUtil.isCartSave(x) ? `Cartridge save: ${N64IndividualSaveFilename.getDisplayName(x)}` : `${N64IndividualSaveFilename.getDisplayName(x)} (${x.regionName})`,\n          }),\n        );\n      }\n\n      return [];\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.dexDriveSaveData = null;\n      this.errorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.selectedSaveData = null;\n      this.individualSavesOrMemoryCard = 'memory-card';\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (newSaveData !== null) {\n        if ((this.dexDriveSaveData !== null) && (this.dexDriveSaveData.getSaveFiles().length > 0)) {\n          this.selectedSaveData = newSaveData;\n          this.outputFilename = N64IndividualSaveFilename.createFilename(this.dexDriveSaveData.getSaveFiles()[this.selectedSaveData]);\n          this.changeIndividualSavesOrMemoryCard('individual-saves');\n        } else {\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n        }\n      }\n    },\n    readDexDriveSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      try {\n        this.dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(event.arrayBuffer);\n\n        const containsCartSave = this.dexDriveSaveData.getSaveFiles().some((x) => N64GameSerialCodeUtil.isCartSave(x));\n\n        this.individualSavesOrMemoryCard = null;\n\n        if (containsCartSave) {\n          this.changeIndividualSavesOrMemoryCard('individual-saves');\n          this.changeSelectedSaveData(0);\n        } else {\n          this.changeIndividualSavesOrMemoryCard('memory-card');\n        }\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.dexDriveSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        let saveFiles = event.map((f) => ({ parsedFilename: N64IndividualSaveFilename.parseFilename(f.filename), rawData: f.arrayBuffer }));\n\n        saveFiles = saveFiles.map((f) => ({\n          noteName: f.parsedFilename.noteName,\n          noteNameExtension: f.parsedFilename.noteNameExtension,\n          gameSerialCode: f.parsedFilename.gameSerialCode,\n          publisherCode: f.parsedFilename.publisherCode,\n          comment: 'Created with savefileconverter.com',\n          rawData: f.rawData,\n        }));\n\n        this.dexDriveSaveData = N64DexDriveSaveData.createFromSaveFiles(saveFiles);\n\n        if (this.dexDriveSaveData.getSaveFiles().length > 0) {\n          this.outputFilename = `${Util.convertDescriptionToFilename(this.dexDriveSaveData.getSaveFiles()[0].noteName)}.n64`;\n        } else {\n          this.outputFilename = 'output.n64';\n        }\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.dexDriveSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        if (this.individualSavesOrMemoryCard === 'individual-saves') {\n          outputArrayBuffer = this.dexDriveSaveData.getSaveFiles()[this.selectedSaveData].rawData;\n        } else {\n          outputArrayBuffer = this.dexDriveSaveData.getMempack().getArrayBuffer();\n        }\n      } else {\n        outputArrayBuffer = this.dexDriveSaveData.getArrayBuffer();\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertN64Mempack.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\" :class=\"$mq === 'md' ? 'fix-jumbotron' : ''\">\n                <template v-slot:header>Controller Pak</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readMempackSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.mpk)\"\n              acceptExtension=\".mpk\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <file-list\n              :display=\"this.mempackSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\" :class=\"$mq === 'md' ? 'fix-jumbotron' : ''\">\n                <template v-slot:header>Individual saves</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <div v-if=\"this.userAllowedToChangeFilename\">\n              <output-filename\n                v-model=\"outputFilename\"\n              />\n            </div>\n            <div v-else>\n              <output-filename\n                v-model=\"outputFilename\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"true\"\n                helpText=\"The filename for an individual save contains important information that the game needs to find this save data. Please do not modify it after downloading the save.\"\n              />\n            </div>\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose files to add\"\n              :leaveRoomForHelpIcon=\"false\"\n              :allowMultipleFiles=\"true\"\n            />\n            <file-list\n              :display=\"this.mempackSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"n64-mempack-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=n64\">copy save files to and from an N64 cartridge or Controller Pak</router-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.n64-mempack-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport N64MempackSaveData from '../save-formats/N64/Mempack';\nimport N64GameSerialCodeUtil from '../save-formats/N64/Components/GameSerialCodeUtil';\nimport N64IndividualSaveFilename from '../save-formats/N64/IndividualSaveFilename';\n\nexport default {\n  name: 'ConvertN64Mempack',\n  data() {\n    return {\n      mempackSaveData: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      return !this.mempackSaveData || this.mempackSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n    userAllowedToChangeFilename() {\n      return !this.mempackSaveData\n        || ((this.mempackSaveData.getSaveFiles().length > 0) && (this.selectedSaveData !== null) && N64GameSerialCodeUtil.isCartSave(this.mempackSaveData.getSaveFiles()[this.selectedSaveData]));\n    },\n  },\n  methods: {\n    getFileListNames() {\n      if ((this.mempackSaveData !== null) && (this.mempackSaveData.getSaveFiles() !== null)) {\n        return this.mempackSaveData.getSaveFiles().map(\n          (x) => ({\n            displayText: N64GameSerialCodeUtil.isCartSave(x) ? `Cartridge save: ${N64IndividualSaveFilename.getDisplayName(x)}` : `${N64IndividualSaveFilename.getDisplayName(x)} (${x.regionName})`,\n          }),\n        );\n      }\n\n      return [];\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.mempackSaveData = null;\n      this.errorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.selectedSaveData = null;\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (this.mempackSaveData.getSaveFiles().length > 0) {\n        this.selectedSaveData = newSaveData;\n        this.outputFilename = N64IndividualSaveFilename.createFilename(this.mempackSaveData.getSaveFiles()[this.selectedSaveData]);\n      } else {\n        this.selectedSaveData = null;\n        this.outputFilename = null;\n      }\n    },\n    readMempackSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      try {\n        this.mempackSaveData = N64MempackSaveData.createFromN64MempackData(event.arrayBuffer);\n        this.changeSelectedSaveData(0);\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.mempackSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        let saveFiles = event.map((f) => ({ parsedFilename: N64IndividualSaveFilename.parseFilename(f.filename), rawData: f.arrayBuffer }));\n\n        saveFiles = saveFiles.map((f) => ({\n          noteName: f.parsedFilename.noteName,\n          noteNameExtension: f.parsedFilename.noteNameExtension,\n          gameSerialCode: f.parsedFilename.gameSerialCode,\n          publisherCode: f.parsedFilename.publisherCode,\n          rawData: f.rawData,\n        }));\n\n        this.mempackSaveData = N64MempackSaveData.createFromSaveFiles(saveFiles);\n\n        if (this.mempackSaveData.getSaveFiles().length > 0) {\n          this.outputFilename = `${Util.convertDescriptionToFilename(this.mempackSaveData.getSaveFiles()[0].noteName)}.mpk`;\n        } else {\n          this.outputFilename = 'output.mpk';\n        }\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.mempackSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        outputArrayBuffer = this.mempackSaveData.getSaveFiles()[this.selectedSaveData].rawData;\n      } else {\n        outputArrayBuffer = this.mempackSaveData.getArrayBuffer();\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertNintendoSwitchOnline.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Switch</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readNsoSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n              acceptExtension=\".sram\"\n            />\n            <nintendo-switch-online-platform\n              v-model=\"nsoPlatform\"\n              id=\"platform\"\n              v-on:input=\"nsoPlatformChanged()\"\n              :disabled=\"false\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <div v-if=\"this.displayOutputFileSize\">\n              <output-filesize v-model=\"outputFilesize\" id=\"output-filesize\" :platform=\"this.nsoPlatformClass.adjustOutputSizesPlatform()\"/>\n            </div>\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n              ref=\"inputFileEmulator\"\n            />\n            <nintendo-switch-online-platform\n              v-model=\"nsoPlatform\"\n              id=\"platform\"\n              v-on:input=\"nsoPlatformChanged()\"\n              :disabled=\"false\"\n            />\n            <div v-if=\"this.requiresExampleSaveData\">\n              <input-file\n                @load=\"readExampleSaveData($event)\"\n                :errorMessage=\"this.exampleFileErrorMessage\"\n                placeholderText=\"Choose an example NSO save file\"\n                acceptExtension=\".sram\"\n                :leaveRoomForHelpIcon=\"true\"\n                helpText=\"These save files require additional information about the game. Please create an example save file for this game on your Switch and supply it here.\"\n                ref=\"inputFileExampleSaveData\"\n              />\n            </div>\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"nintendo-switch-online-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.nsoSaveData || !this.nsoPlatform || !outputFilename || this.missingRequiredExampleData\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Please note that you must have access to homebrew software on your Switch in order to be able to read or write save files\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.nintendo-switch-online-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport NintendoSwitchOnlinePlatform from './NintendoSwitchOnlinePlatform.vue';\n\nimport NsoNesSaveData from '../save-formats/NintendoSwitchOnline/Nes';\nimport NsoSnesSaveData from '../save-formats/NintendoSwitchOnline/Snes';\nimport NsoGameboySaveData from '../save-formats/NintendoSwitchOnline/Gameboy';\nimport NsoGameboyAdvanceSaveData from '../save-formats/NintendoSwitchOnline/GameboyAdvance';\nimport NsoGenesisSaveData from '../save-formats/NintendoSwitchOnline/Genesis';\nimport NsoN64SaveData from '../save-formats/NintendoSwitchOnline/N64';\n\nexport default {\n  name: 'ConvertNintendoSwitchOnline',\n  data() {\n    return {\n      nsoSaveData: null,\n      nsoPlatform: null,\n      nsoPlatformClass: null,\n      errorMessage: null,\n      exampleFileErrorMessage: null,\n      outputFilename: null,\n      outputFilesize: null,\n      conversionDirection: 'convertToRaw',\n      inputArrayBuffer: null,\n      inputFilename: null,\n      inputFileType: null,\n      exampleNsoData: null,\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n    NintendoSwitchOnlinePlatform,\n  },\n  computed: {\n    displayOutputFileSize: {\n      get() {\n        return ((this.nsoPlatformClass !== null) && (this.nsoPlatformClass.adjustOutputSizesPlatform() !== null));\n      },\n    },\n    requiresExampleSaveData: {\n      get() {\n        return ((this.conversionDirection === 'convertToFormat') && (this.nsoPlatformClass !== null) && this.nsoPlatformClass.nsoDataRequiresRomInfo());\n      },\n    },\n    missingRequiredExampleData: {\n      get() {\n        return ((this.conversionDirection === 'convertToFormat') && (this.nsoPlatformClass !== null) && this.nsoPlatformClass.nsoDataRequiresRomInfo() && (this.exampleNsoData === null));\n      },\n    },\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.nsoSaveData = null;\n      this.nsoPlatform = null;\n      this.nsoPlatformClass = null;\n      this.errorMessage = null;\n      this.exampleFileErrorMessage = null;\n      this.outputFilename = null;\n      this.outputFilesize = null;\n      this.inputArrayBuffer = null;\n      this.inputFilename = null;\n      this.inputFileType = null;\n      this.exampleNsoData = null;\n    },\n    nsoPlatformChanged() {\n      if (this.nsoPlatform !== null) {\n        switch (this.nsoPlatform) {\n          case 'NSO-NES': {\n            this.nsoPlatformClass = NsoNesSaveData;\n            break;\n          }\n\n          case 'NSO-SNES': {\n            this.nsoPlatformClass = NsoSnesSaveData;\n            break;\n          }\n\n          case 'NSO-GB': {\n            this.nsoPlatformClass = NsoGameboySaveData;\n            break;\n          }\n\n          case 'NSO-GBA': {\n            this.nsoPlatformClass = NsoGameboyAdvanceSaveData;\n            break;\n          }\n\n          case 'NSO-MD': {\n            this.nsoPlatformClass = NsoGenesisSaveData;\n            break;\n          }\n\n          case 'NSO-N64': {\n            this.nsoPlatformClass = NsoN64SaveData;\n            break;\n          }\n\n          default: {\n            this.nsoPlatformClass = null;\n            break;\n          }\n        }\n      } else {\n        this.nsoPlatformClass = null;\n      }\n\n      if (this.$refs.inputFileExampleSaveData) {\n        this.$refs.inputFileExampleSaveData.reset();\n      }\n\n      this.outputFilename = null;\n      this.outputFilesize = null;\n\n      this.updateNsoSaveData();\n    },\n    updateNsoSaveData() {\n      this.errorMessage = null;\n      this.outputFilesize = null;\n\n      if ((this.nsoPlatformClass !== null) && (this.inputArrayBuffer !== null) && (this.inputFilename !== null) && (this.inputFileType !== null)) {\n        try {\n          if (this.inputFileType === 'nso') {\n            this.nsoSaveData = this.nsoPlatformClass.createFromNsoData(this.inputArrayBuffer);\n            this.outputFilename = Util.changeFilenameExtension(this.inputFilename, this.nsoPlatformClass.getRawFileExtension(this.nsoSaveData.getRawArrayBuffer()));\n            this.outputFilesize = this.nsoSaveData.getRawArrayBuffer().byteLength;\n          } else {\n            if (this.requiresExampleSaveData) {\n              if (this.exampleNsoData !== null) {\n                this.nsoSaveData = this.nsoPlatformClass.createFromRawData(\n                  this.inputArrayBuffer,\n                  this.exampleNsoData.getRomHashArrayBuffer(),\n                  this.exampleNsoData.getGitRevisionNumberArrayBuffer(),\n                  this.exampleNsoData.getRtcDataArrayBuffer(),\n                );\n                this.outputFilesize = this.nsoSaveData.getRawArrayBuffer().byteLength;\n              }\n            } else {\n              this.nsoSaveData = this.nsoPlatformClass.createFromRawData(this.inputArrayBuffer);\n              this.outputFilesize = this.nsoSaveData.getRawArrayBuffer().byteLength;\n            }\n\n            this.outputFilename = Util.changeFilenameExtension(this.inputFilename, this.nsoPlatformClass.getNsoFileExtension());\n          }\n        } catch (e) {\n          this.errorMessage = 'This file does not seem to be in the correct format';\n          this.nsoSaveData = null;\n        }\n      } else {\n        this.nsoSaveData = null;\n        this.outputFilename = null;\n        this.outputFilesize = null;\n      }\n    },\n    readNsoSaveData(event) {\n      this.inputFileType = 'nso';\n      this.inputArrayBuffer = event.arrayBuffer;\n      this.inputFilename = event.filename;\n\n      this.updateNsoSaveData();\n    },\n    readEmulatorSaveData(event) {\n      this.inputFileType = 'raw';\n      this.inputArrayBuffer = event.arrayBuffer;\n      this.inputFilename = event.filename;\n\n      this.updateNsoSaveData();\n    },\n    readExampleSaveData(event) {\n      this.exampleFileErrorMessage = null;\n\n      try {\n        this.exampleNsoData = this.nsoPlatformClass.createFromNsoData(event.arrayBuffer);\n      } catch (e) {\n        this.exampleFileErrorMessage = 'This file does not seem to be in the correct format';\n        this.exampleNsoData = null;\n      }\n\n      this.updateNsoSaveData();\n    },\n    convertFile() {\n      let finalNsoSaveData = this.nsoSaveData;\n\n      if (this.nsoSaveData.getRawArrayBuffer().byteLength !== this.outputFilesize) {\n        finalNsoSaveData = this.nsoPlatformClass.createWithNewSize(this.nsoSaveData, this.outputFilesize);\n      }\n\n      let output = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        output = finalNsoSaveData.getRawArrayBuffer();\n      } else {\n        output = finalNsoSaveData.getNsoArrayBuffer();\n      }\n\n      const outputBlob = new Blob([output], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename);\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertOnlineEmulators.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Save state</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <input-file\n            @load=\"readOnlineEmulatorData($event)\"\n            :errorMessage=\"this.errorMessage\"\n            placeholderText=\"Choose a file to convert\"\n            :leaveRoomForHelpIcon=\"false\"\n          />\n          <online-emulator-platform\n            v-model=\"platformType\"\n            id=\"platform-type\"\n            :disabled=\"false\"\n            v-on:input=\"changePlatformType($event)\"\n          />\n          <file-list\n            :display=\"this.displayFileList\"\n            :files=\"this.getFileListNames()\"\n            v-model=\"selectedSaveData\"\n            @change=\"changeSelectedSaveData($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            conversionDirection=\"convertToRaw\"\n            disableDirection=\"convertToFormat\"\n            id=\"conversion-direction\"\n          />\n          <b-popover target=\"conversion-direction\" triggers=\"focus hover\" placement=\"bottom\">\n            It is only possible to extract an in-game save from the save state files of some online emulators.\n            It isn't possible to create a new save state, nor possible to convert a save state to another emulator.\n          </b-popover>\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          <div v-if=\"this.displayOutputFileSize\">\n            <output-filesize\n              v-model=\"outputFilesize\"\n              id=\"output-filesize\"\n              :platform=\"this.platformType\"\n              @input=\"changeSelectedOutputFileSize($event)\"\n              overrideHelpText=\"To determine the correct file size please create a test save with the emulator, flash cart, core, etc. that you wish to use.\n                For some platforms, incorrect data will be pulled from the save state if the size is not set correctly.\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"online-emulator-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.hasSufficientInfoToConvert || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Please note that you must perform an in-game save in the emulator before creating/downloading a save state. Only the in-game save can be converted.\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.online-emulator-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { BPopover } from 'bootstrap-vue';\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\n\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport OnlineEmulatorPlatform from './OnlineEmulatorPlatform.vue';\nimport FileList from './FileList.vue';\n\nimport OnlineEmulatorWrapper from '../save-formats/OnlineEmulators/OnlineEmulatorWrapper';\n\nexport default {\n  name: 'ConvertOnlineEmulator',\n  data() {\n    return {\n      onlineEmulatorWrapper: null,\n      platformType: null,\n      errorMessage: null,\n      outputFilename: null,\n      outputFilesize: null,\n      inputArrayBuffer: null,\n      inputFilename: null,\n      selectedSaveData: null,\n    };\n  },\n  components: {\n    BPopover,\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n    OnlineEmulatorPlatform,\n    FileList,\n  },\n  asyncComputed: {\n    displayOutputFileSize: {\n      async get() {\n        try {\n          return (\n            ((this.onlineEmulatorWrapper !== null) && (this.onlineEmulatorWrapper.adjustOutputSizesPlatform() !== null))\n            || await this.fileSizeIsRequiredToConvert()\n          );\n        } catch (e) {\n          return false;\n        }\n      },\n      default: false,\n    },\n  },\n  computed: {\n    displayFileList: {\n      get() {\n        return ((this.onlineEmulatorWrapper !== null) && (this.onlineEmulatorWrapper.getFiles().length > 1));\n      },\n    },\n  },\n  methods: {\n    async fileSizeIsRequiredToConvert() {\n      return (this.inputArrayBuffer !== null)\n        && (this.platformType !== null)\n        && OnlineEmulatorWrapper.fileSizeIsRequiredToConvert(this.inputArrayBuffer, this.platformType);\n    },\n    async hasSufficientInfoToConvert() {\n      return this.onlineEmulatorWrapper && this.platformType && (!this.fileSizeIsRequiredToConvert() || (this.outputFilesize !== null));\n    },\n    getFileListNames() {\n      if ((this.onlineEmulatorWrapper !== null) && (this.onlineEmulatorWrapper.getFiles() !== null)) {\n        return this.onlineEmulatorWrapper.getFiles().map(\n          (x) => ({\n            displayText: x.name,\n          }),\n        );\n      }\n\n      return [];\n    },\n    getFileExtensionsString(romFormatClass) {\n      return `(${romFormatClass.getFileExtensions().map((f) => `*${f}`).join(', ')})`;\n    },\n    async hasRequiredInputFileData() {\n      const fileSizeIsRequiredToConvert = await this.fileSizeIsRequiredToConvert();\n\n      return (this.inputArrayBuffer !== null)\n        && (this.inputFilename !== null)\n        && (this.platformType !== null)\n        && (!fileSizeIsRequiredToConvert || (this.outputFilesize !== null));\n    },\n    getOutputFilename(fileExtension) {\n      if ((this.onlineEmulatorWrapper !== null) && (this.onlineEmulatorWrapper.getFiles().length > 0) && (this.selectedSaveData !== null)) {\n        const filename = this.onlineEmulatorWrapper.getFiles()[this.selectedSaveData].name;\n\n        if (fileExtension !== null) {\n          return Util.changeFilenameExtension(filename, fileExtension);\n        }\n\n        return filename;\n      }\n\n      return null;\n    },\n    getSelectedSaveData() {\n      return this.onlineEmulatorWrapper.getFiles()[this.selectedSaveData].emulatorSaveStateData;\n    },\n    changeSelectedSaveData() {\n      this.outputFilename = this.getOutputFilename(OnlineEmulatorWrapper.getRawFileExtension());\n    },\n    async changeSelectedOutputFileSize() {\n      // Here we don't reset this.selectedSaveData to null: if we can we want to retain which\n      // save data the user has selected, since we're only updating the size\n      this.updateOnlineEmulatorWrapper();\n    },\n    async changePlatformType() {\n      this.onlineEmulatorWrapper = null;\n      this.selectedSaveData = null; // We don't want to retain which file the user has selected if we're changing platforms\n      this.updateOnlineEmulatorWrapper();\n    },\n    getDefaultOutputFilesize() {\n      return this.getSelectedSaveData().getRawArrayBuffer().byteLength;\n    },\n    async updateOnlineEmulatorWrapper() {\n      this.errorMessage = null;\n\n      try {\n        const hasRequiredInputFileData = await this.hasRequiredInputFileData();\n\n        if (hasRequiredInputFileData) {\n          // If we already have one, don't remake it. This can happen when loading a snes file, then selecting a different size.\n          // Remaking the OnlineEmulatorWrapper will result in resetting out outputFilesize to be the default\n\n          // Except that we need to continually remake it if the size is necessary, like the gba, because it means getting the data\n          // from a different part of the save state. If the user keeps selecting different file sizes it's almost certainly because\n          // they picked the wrong one initially. We have the ability to resize the save (to pad or truncate it) after the user selects\n          // the correct one, but we'd need to make a different user flow to support that.\n          if ((this.onlineEmulatorWrapper === null) || this.fileSizeIsRequiredToConvert()) {\n            this.onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(this.inputArrayBuffer, this.inputFilename, this.platformType, this.outputFilesize);\n\n            if ((this.selectedSaveData === null) || (this.selectedSaveData < 0) || (this.selectedSaveData > this.onlineEmulatorWrapper.getFiles().length)) {\n              this.selectedSaveData = 0;\n            }\n\n            this.outputFilename = this.getOutputFilename(OnlineEmulatorWrapper.getRawFileExtension());\n            this.outputFilesize = this.getDefaultOutputFilesize();\n          }\n        } else {\n          this.onlineEmulatorWrapper = null;\n          this.outputFilename = null;\n          this.outputFilesize = null;\n          this.selectedSaveData = null;\n        }\n      } catch (e) {\n        this.errorMessage = 'This file does not appear to be a save state that this site is able to currently support. '\n          + 'If this is a save state from an online emulator and you would like to request adding support for it, please visit the Discord / Contact page.';\n        this.onlineEmulatorWrapper = null;\n      }\n    },\n    async readOnlineEmulatorData(event) {\n      this.inputArrayBuffer = event.arrayBuffer;\n      this.inputFilename = event.filename;\n\n      this.onlineEmulatorWrapper = null;\n\n      // We need to force the user to re-select the platform type, and especially the output file size, with every new\n      // file they specify. Otherwise, if we first had a platform type like snes, which automatically fills in the output file size,\n      // then a platform type like gba, which requires it, the user might not realize that they needed to be careful with\n      // what gba file size they specified, since different file sizes come from different parts of the input file. Then the user\n      // will think that the conversion \"didn't work\".\n      this.platformType = null;\n      this.outputFilesize = null;\n\n      this.selectedSaveData = null; // When they select a new file, they should re-select which save data within it\n\n      this.updateOnlineEmulatorWrapper();\n    },\n    convertFile() {\n      let finalOnlineEmulatorWrapper = this.onlineEmulatorWrapper;\n\n      const needsResize = (this.getSelectedSaveData().getRawArrayBuffer().byteLength !== this.outputFilesize);\n\n      if (needsResize) {\n        finalOnlineEmulatorWrapper = OnlineEmulatorWrapper.createWithNewSize(this.onlineEmulatorWrapper, this.outputFilesize);\n      }\n\n      const output = finalOnlineEmulatorWrapper.getFiles()[this.selectedSaveData].emulatorSaveStateData.getRawArrayBuffer();\n\n      const outputBlob = new Blob([output], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename);\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertPs1DexDrive.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>DexDrive</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readDexDriveSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.gme)\"\n              acceptExtension=\".gme\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <file-list\n              :display=\"this.dexDriveSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron\n                fluid\n                :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\"\n                :class=\"($mq === 'md') && (this.individualSavesOrMemoryCard === 'individual-saves') ? 'fix-jumbotron' : ''\"\n              >\n                <template v-slot:header>{{ individualSavesOrMemoryCardText }}</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <div v-if=\"this.individualSavesOrMemoryCard === 'individual-saves'\">\n              <output-filename\n                v-model=\"outputFilename\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"true\"\n                helpText=\"The filename for an individual save contains important information that the game needs to find this save data. Please do not modify it after downloading the save.\"\n              />\n            </div>\n            <div v-else>\n             <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            </div>\n            <individual-saves-or-memory-card-selector\n              :value=\"this.individualSavesOrMemoryCard\"\n              @change=\"changeIndividualSavesOrMemoryCard($event)\"\n              :individualSavesText=\"this.individualSavesText\"\n              :memoryCardText=\"this.memoryCardText\"\n            />\n          </div>\n          <div v-else>\n            <div v-if=\"this.individualSavesOrMemoryCard === 'individual-saves'\">\n              <input-file\n                @load=\"readEmulatorSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose files to add\"\n                :leaveRoomForHelpIcon=\"false\"\n                :allowMultipleFiles=\"true\"\n                ref=\"inputFileEmulator\"\n              />\n            </div>\n            <div v-else>\n              <input-file\n                @load=\"readEmulatorMemcardSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose a file to convert (*.mcr)\"\n                acceptExtension=\".mcr\"\n                :leaveRoomForHelpIcon=\"false\"\n                ref=\"inputFileEmulatorMemcard\"\n              />\n            </div>\n            <individual-saves-or-memory-card-selector\n              :value=\"this.individualSavesOrMemoryCard\"\n              @change=\"changeIndividualSavesOrMemoryCard($event)\"\n              :individualSavesText=\"this.individualSavesText\"\n              :memoryCardText=\"this.memoryCardText\"\n            />\n            <file-list\n              :display=\"this.dexDriveSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"ps1-dexdrive-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=ps1\">copy save files to and from a PS1 memory card</router-link>?\n          </div>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://github.com/ShendoXT/memcardrex/releases\">copy files to and from my DexDrive</b-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.ps1-dexdrive-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport IndividualSavesOrMemoryCardSelector from './IndividualSavesOrMemoryCardSelector.vue';\nimport PS1DexDriveSaveData from '../save-formats/PS1/DexDrive';\n\nexport default {\n  name: 'ConvertPs1DexDrive',\n  data() {\n    return {\n      dexDriveSaveData: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n      individualSavesOrMemoryCard: 'memory-card',\n      individualSavesText: 'Individual saves',\n      memoryCardText: 'Raw/emulator',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n    IndividualSavesOrMemoryCardSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      return !this.dexDriveSaveData || this.dexDriveSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n    individualSavesOrMemoryCardText() {\n      return (this.individualSavesOrMemoryCard === 'individual-saves') ? this.individualSavesText : this.memoryCardText;\n    },\n  },\n  methods: {\n    changeIndividualSavesOrMemoryCard(newValue) {\n      if (this.individualSavesOrMemoryCard !== newValue) {\n        this.individualSavesOrMemoryCard = newValue;\n\n        if (this.conversionDirection === 'convertToFormat') {\n          this.selectedSaveData = null;\n          this.dexDriveSaveData = null;\n          this.outputFilename = null;\n          // The refs become undefined when the components are removed using a v-if\n          if (this.$refs.inputFileEmulator) {\n            this.$refs.inputFileEmulator.reset();\n          }\n          if (this.$refs.inputFileEmulatorMemcard) {\n            this.$refs.inputFileEmulatorMemcard.reset();\n          }\n        } else if (newValue === 'individual-saves') {\n          if (this.selectedSaveData === null) {\n            this.changeSelectedSaveData(0);\n          }\n        } else {\n          if (this.inputFilename !== null) {\n            this.outputFilename = Util.changeFilenameExtension(this.inputFilename, 'mcr');\n          }\n\n          this.selectedSaveData = null;\n        }\n      }\n    },\n    getFileListNames() {\n      if ((this.dexDriveSaveData !== null) && (this.dexDriveSaveData.getSaveFiles() !== null)) {\n        return this.dexDriveSaveData.getSaveFiles().map((x) => ({ displayText: `${x.description} (${x.regionName})` }));\n      }\n\n      return null;\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.dexDriveSaveData = null;\n      this.errorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.selectedSaveData = null;\n      this.individualSavesOrMemoryCard = 'memory-card';\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (newSaveData !== null) {\n        if ((this.dexDriveSaveData !== null) && (this.dexDriveSaveData.getSaveFiles().length > 0)) {\n          this.selectedSaveData = newSaveData;\n          this.outputFilename = this.dexDriveSaveData.getSaveFiles()[this.selectedSaveData].filename;\n          this.changeIndividualSavesOrMemoryCard('individual-saves');\n        } else {\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n        }\n      }\n    },\n    readDexDriveSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      try {\n        this.dexDriveSaveData = PS1DexDriveSaveData.createFromDexDriveData(event.arrayBuffer);\n\n        this.individualSavesOrMemoryCard = null;\n\n        this.changeIndividualSavesOrMemoryCard('memory-card');\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.dexDriveSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        const saveFiles = event.map((f) => ({ filename: f.filename, rawData: f.arrayBuffer, comment: 'Created with savefileconverter.com' }));\n\n        this.dexDriveSaveData = PS1DexDriveSaveData.createFromSaveFiles(saveFiles);\n\n        if (this.dexDriveSaveData.getSaveFiles().length > 0) {\n          this.outputFilename = `${Util.convertDescriptionToFilename(this.dexDriveSaveData.getSaveFiles()[0].description)}.gme`;\n        } else {\n          this.outputFilename = 'output.gme';\n        }\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.dexDriveSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorMemcardSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      this.outputFilename = Util.changeFilenameExtension(event.filename, 'gme');\n      try {\n        this.dexDriveSaveData = PS1DexDriveSaveData.createFromMemoryCardData(event.arrayBuffer, 'Created with savefileconverter.com');\n        this.changeIndividualSavesOrMemoryCard('memory-card');\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.dexDriveSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        if (this.individualSavesOrMemoryCard === 'individual-saves') {\n          outputArrayBuffer = this.dexDriveSaveData.getSaveFiles()[this.selectedSaveData].rawData;\n        } else {\n          outputArrayBuffer = this.dexDriveSaveData.getMemoryCard().getArrayBuffer();\n        }\n      } else {\n        outputArrayBuffer = this.dexDriveSaveData.getArrayBuffer();\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertPs1Emulator.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Raw/emulator</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readMemcardSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.mcr)\"\n              acceptExtension=\".mcr\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <file-list\n              :display=\"this.memcardSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\" :class=\"$mq === 'md' ? 'fix-jumbotron' : ''\">\n                <template v-slot:header>Individual saves</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename\n              v-model=\"outputFilename\"\n              :leaveRoomForHelpIcon=\"true\"\n              :disabled=\"true\"\n              helpText=\"The filename for an individual save contains important information that the game needs to find this save data. Please do not modify it after downloading the save.\"\n            />\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose files to add\"\n              :leaveRoomForHelpIcon=\"false\"\n              :allowMultipleFiles=\"true\"\n            />\n            <file-list\n              :display=\"this.memcardSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"ps1-emulator-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=ps1\">copy save files to and from a PS1 memory card</router-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.ps1-emulator-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport Ps1MemcardSaveData from '../save-formats/PS1/Memcard';\n\nexport default {\n  name: 'ConvertPs1Emulator',\n  data() {\n    return {\n      memcardSaveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      return !this.memcardSaveData || this.memcardSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n  },\n  methods: {\n    getFileListNames() {\n      if ((this.memcardSaveData !== null) && (this.memcardSaveData.getSaveFiles() !== null)) {\n        return this.memcardSaveData.getSaveFiles().map((x) => ({ displayText: `${x.description} (${x.regionName})` }));\n      }\n\n      return [];\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.memcardSaveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.selectedSaveData = null;\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (this.memcardSaveData.getSaveFiles().length > 0) {\n        this.selectedSaveData = newSaveData;\n        this.outputFilename = this.memcardSaveData.getSaveFiles()[this.selectedSaveData].filename;\n      } else {\n        this.selectedSaveData = null;\n        this.outputFilename = null;\n      }\n    },\n    readMemcardSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      try {\n        this.memcardSaveData = Ps1MemcardSaveData.createFromPs1MemcardData(event.arrayBuffer);\n        this.changeSelectedSaveData(0);\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.memcardSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      try {\n        const saveFiles = event.map((f) => ({ filename: f.filename, rawData: f.arrayBuffer }));\n\n        this.memcardSaveData = Ps1MemcardSaveData.createFromSaveFiles(saveFiles);\n\n        if (this.memcardSaveData.getSaveFiles().length > 0) {\n          this.outputFilename = `${Util.convertDescriptionToFilename(this.memcardSaveData.getSaveFiles()[0].description)}.mcr`;\n        } else {\n          this.outputFilename = 'output.mcr';\n        }\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.memcardSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    convertFile() {\n      const outputArrayBuffer = (this.conversionDirection === 'convertToRaw') ? this.memcardSaveData.getSaveFiles()[this.selectedSaveData].rawData : this.memcardSaveData.getArrayBuffer();\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertPs1Ps3.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>PS3</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readPs3SaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose files to add (*.PSV)\"\n              acceptExtension=\".PSV\"\n              :leaveRoomForHelpIcon=\"false\"\n              :allowMultipleFiles=\"true\"\n            />\n            <file-list\n              :display=\"this.ps3SaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron\n                fluid\n                :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\"\n                :class=\"($mq === 'md') && (this.individualSavesOrMemoryCard === 'individual-saves') ? 'fix-jumbotron' : ''\"\n              >\n                <template v-slot:header>{{ individualSavesOrMemoryCardText }}</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <div v-if=\"this.individualSavesOrMemoryCard === 'individual-saves'\">\n              <output-filename\n                v-model=\"outputFilename\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"true\"\n                helpText=\"The filename for an individual save contains important information that the game needs to find this save data. Please do not modify it after downloading the save.\"\n              />\n            </div>\n            <div v-else>\n             <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            </div>\n            <individual-saves-or-memory-card-selector\n              :value=\"this.individualSavesOrMemoryCard\"\n              @change=\"changeIndividualSavesOrMemoryCard($event)\"\n              :individualSavesText=\"this.individualSavesText\"\n              :memoryCardText=\"this.memoryCardText\"\n            />\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <file-list\n              :display=\"this.ps3SaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"ps1-ps3-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=ps1\">copy save files to and from a PS1 memory card</router-link>?\n          </div>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://gbatemp.net/threads/tutorial-transfer-saves-from-ps1-to-ps3.573038/\">copy PS1 save files to and from my PS3</b-link>? (Begin at step 3)\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.ps1-ps3-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport IndividualSavesOrMemoryCardSelector from './IndividualSavesOrMemoryCardSelector.vue';\nimport Ps3SaveData from '../save-formats/PS1/Ps3';\n\nexport default {\n  name: 'ConvertPs1Ps3',\n  data() {\n    return {\n      ps3SaveData: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n      individualSavesOrMemoryCard: 'memory-card',\n      individualSavesText: 'Individual save',\n      memoryCardText: 'Raw/emulator',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n    IndividualSavesOrMemoryCardSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.individualSavesOrMemoryCard === 'individual-saves') ? (this.selectedSaveData !== null) : true;\n\n      return !this.ps3SaveData || this.ps3SaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n    individualSavesOrMemoryCardText() {\n      return (this.individualSavesOrMemoryCard === 'individual-saves') ? this.individualSavesText : this.memoryCardText;\n    },\n  },\n  methods: {\n    changeIndividualSavesOrMemoryCard(newValue) {\n      if (this.individualSavesOrMemoryCard !== newValue) {\n        this.individualSavesOrMemoryCard = newValue;\n\n        if (newValue === 'individual-saves') {\n          if (this.selectedSaveData === null) {\n            this.changeSelectedSaveData(0);\n          }\n        } else {\n          // this.inputFilename is null because we can select multiple .PSV files to combine\n          // Leaving this.outputFilename blank seems a bit crummy because it might not be clear why\n          // the Convert button stays disabled, plus it may also not be clear that the new file\n          // should have a .mcr extension.\n          // So let's just pick the first filename as a placeholder and the user can change it if they wish\n\n          if ((this.ps3SaveData !== null) && (this.ps3SaveData.getSaveFiles().length > 0)) {\n            this.outputFilename = Util.changeFilenameExtension(this.ps3SaveData.getSaveFiles()[0].filename, 'mcr');\n          }\n          this.selectedSaveData = null;\n        }\n      }\n    },\n    getFileListNames() {\n      if ((this.ps3SaveData !== null) && (this.ps3SaveData.getSaveFiles() !== null)) {\n        return this.ps3SaveData.getSaveFiles().map((x) => ({ displayText: `${x.description} (${x.regionName})` }));\n      }\n\n      return [];\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.ps3SaveData = null;\n      this.errorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.selectedSaveData = null;\n      this.individualSavesOrMemoryCard = 'memory-card';\n\n      if (this.conversionDirection === 'convertToFormat') {\n        // Can only convert individual saves to PS3 format. Maybe we should auto detect whether we\n        // were given an individual save or a memory card image and adjust accodingly (and allow the user\n        // to choose an individual save from the memory card image)?\n        this.changeIndividualSavesOrMemoryCard('individual-saves');\n      }\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (newSaveData !== null) {\n        if ((this.ps3SaveData !== null) && (this.ps3SaveData.getSaveFiles().length > 0)) {\n          this.selectedSaveData = newSaveData;\n          if (this.conversionDirection === 'convertToRaw') {\n            this.outputFilename = this.ps3SaveData.getSaveFiles()[this.selectedSaveData].filename;\n          } else {\n            this.outputFilename = this.ps3SaveData.getPs3SaveFiles()[this.selectedSaveData].filename;\n          }\n          this.changeIndividualSavesOrMemoryCard('individual-saves');\n        } else {\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n        }\n      }\n    },\n    readPs3SaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        const saveFiles = event.map((f) => ({ filename: f.filename, rawData: f.arrayBuffer }));\n\n        this.ps3SaveData = Ps3SaveData.createFromPs3SaveFiles(saveFiles);\n\n        this.individualSavesOrMemoryCard = null;\n\n        this.changeIndividualSavesOrMemoryCard('memory-card');\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.ps3SaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        const saveFiles = [{ filename: event.filename, rawData: event.arrayBuffer }];\n\n        this.ps3SaveData = Ps3SaveData.createFromPs1SaveFiles(saveFiles);\n        this.changeSelectedSaveData(0);\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.ps3SaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        if (this.individualSavesOrMemoryCard === 'individual-saves') {\n          outputArrayBuffer = this.ps3SaveData.getSaveFiles()[this.selectedSaveData].rawData;\n        } else {\n          outputArrayBuffer = this.ps3SaveData.getMemoryCard().getArrayBuffer();\n        }\n      } else {\n        outputArrayBuffer = this.ps3SaveData.getPs3SaveFiles()[this.selectedSaveData].rawData;\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertPs1Psp.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>PSP</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readPspSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.vmp)\"\n              acceptExtension=\".vmp\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <file-list\n              :display=\"this.pspSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <memory-card-selector v-model=\"memoryCardIndex\" @change=\"changeMemoryCardIndex()\" />\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron\n                fluid\n                :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\"\n                :class=\"($mq === 'md') && (this.individualSavesOrMemoryCard === 'individual-saves') ? 'fix-jumbotron' : ''\"\n              >\n                <template v-slot:header>{{ individualSavesOrMemoryCardText }}</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <div v-if=\"this.individualSavesOrMemoryCard === 'individual-saves'\">\n              <output-filename\n                v-model=\"outputFilename\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"true\"\n                helpText=\"The filename for an individual save contains important information that the game needs to find this save data. Please do not modify it after downloading the save.\"\n              />\n            </div>\n            <div v-else>\n             <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            </div>\n            <individual-saves-or-memory-card-selector\n              :value=\"this.individualSavesOrMemoryCard\"\n              @change=\"changeIndividualSavesOrMemoryCard($event)\"\n              :individualSavesText=\"this.individualSavesText\"\n              :memoryCardText=\"this.memoryCardText\"\n            />\n          </div>\n          <div v-else>\n            <div v-if=\"this.individualSavesOrMemoryCard === 'individual-saves'\">\n              <input-file\n                @load=\"readEmulatorSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose files to add\"\n                :leaveRoomForHelpIcon=\"false\"\n                :allowMultipleFiles=\"true\"\n                ref=\"inputFileEmulator\"\n              />\n            </div>\n            <div v-else>\n              <input-file\n                @load=\"readEmulatorMemcardSaveData($event)\"\n                :errorMessage=\"this.errorMessage\"\n                placeholderText=\"Choose a file to convert (*.mcr)\"\n                acceptExtension=\".mcr\"\n                :leaveRoomForHelpIcon=\"false\"\n                ref=\"inputFileEmulatorMemcard\"\n              />\n            </div>\n            <individual-saves-or-memory-card-selector\n              :value=\"this.individualSavesOrMemoryCard\"\n              @change=\"changeIndividualSavesOrMemoryCard($event)\"\n              :individualSavesText=\"this.individualSavesText\"\n              :memoryCardText=\"this.memoryCardText\"\n            />\n            <file-list\n              :display=\"this.pspSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"ps1-psp-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://www.wikihow.com/Put-Game-Saves-on-Your-PSP\">copy PS1 saves to and from my PSP</b-link>?\n          </div>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=ps1\">copy save files to and from a PS1 memory card</router-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.ps1-psp-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport IndividualSavesOrMemoryCardSelector from './IndividualSavesOrMemoryCardSelector.vue';\nimport MemoryCardSelector from './MemoryCardSelector.vue';\nimport PspSaveData from '../save-formats/PS1/Psp';\n\nexport default {\n  name: 'ConvertPs1Psp',\n  data() {\n    return {\n      pspSaveData: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n      memoryCardIndex: 0,\n      individualSavesOrMemoryCard: 'memory-card',\n      individualSavesText: 'Individual saves',\n      memoryCardText: 'Raw/emulator',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n    MemoryCardSelector,\n    IndividualSavesOrMemoryCardSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      return !this.pspSaveData || this.pspSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n    individualSavesOrMemoryCardText() {\n      return (this.individualSavesOrMemoryCard === 'individual-saves') ? this.individualSavesText : this.memoryCardText;\n    },\n  },\n  methods: {\n    changeIndividualSavesOrMemoryCard(newValue) {\n      if (this.individualSavesOrMemoryCard !== newValue) {\n        this.individualSavesOrMemoryCard = newValue;\n\n        if (this.conversionDirection === 'convertToFormat') {\n          this.changeMemoryCardIndex();\n          this.selectedSaveData = null;\n          this.pspSaveData = null;\n\n          // The refs become undefined when the components are removed using a v-if\n          if (this.$refs.inputFileEmulator) {\n            this.$refs.inputFileEmulator.reset();\n          }\n          if (this.$refs.inputFileEmulatorMemcard) {\n            this.$refs.inputFileEmulatorMemcard.reset();\n          }\n        } else if (newValue === 'individual-saves') {\n          if (this.selectedSaveData === null) {\n            this.changeSelectedSaveData(0);\n          }\n        } else {\n          if (this.inputFilename !== null) {\n            this.outputFilename = Util.changeFilenameExtension(this.inputFilename, 'mcr');\n          }\n\n          this.selectedSaveData = null;\n        }\n      }\n    },\n    getFileListNames() {\n      if ((this.pspSaveData !== null) && (this.pspSaveData.getSaveFiles() !== null)) {\n        return this.pspSaveData.getSaveFiles().map((x) => ({ displayText: `${x.description} (${x.regionName})` }));\n      }\n\n      return null;\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.pspSaveData = null;\n      this.errorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.selectedSaveData = null;\n      this.memoryCardIndex = 0;\n      this.individualSavesOrMemoryCard = 'memory-card';\n\n      if (newDirection === 'convertToFormat') {\n        this.changeMemoryCardIndex();\n      }\n    },\n    changeMemoryCardIndex() {\n      this.outputFilename = `SCEVMC${this.memoryCardIndex}.VMP`;\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (newSaveData !== null) {\n        if ((this.pspSaveData !== null) && (this.pspSaveData.getSaveFiles().length > 0)) {\n          this.selectedSaveData = newSaveData;\n          this.outputFilename = this.pspSaveData.getSaveFiles()[this.selectedSaveData].filename;\n          this.changeIndividualSavesOrMemoryCard('individual-saves');\n        } else {\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n        }\n      }\n    },\n    readPspSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      try {\n        this.pspSaveData = PspSaveData.createFromPspData(event.arrayBuffer);\n\n        this.individualSavesOrMemoryCard = null;\n\n        this.changeIndividualSavesOrMemoryCard('memory-card');\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.pspSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        const saveFiles = event.map((f) => ({ filename: f.filename, rawData: f.arrayBuffer }));\n\n        this.pspSaveData = PspSaveData.createFromSaveFiles(saveFiles);\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.pspSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorMemcardSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      try {\n        this.pspSaveData = PspSaveData.createFromMemoryCardData(event.arrayBuffer);\n\n        this.changeIndividualSavesOrMemoryCard('memory-card');\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.pspSaveData = null;\n        this.selectedSaveData = null;\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        if (this.individualSavesOrMemoryCard === 'individual-saves') {\n          outputArrayBuffer = this.pspSaveData.getSaveFiles()[this.selectedSaveData].rawData;\n        } else {\n          outputArrayBuffer = this.pspSaveData.getMemoryCard().getArrayBuffer();\n        }\n      } else {\n        outputArrayBuffer = this.pspSaveData.getArrayBuffer();\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertRetron5.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"center\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Retron 5</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readRetron5SaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.sav)\"\n              acceptExtension=\".sav\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"retron5-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.retron5SaveData || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://projectpokemon.org/home/tutorials/save-editing/managing-gb-gbc-saves/using-the-retron-5-r53/\">copy files to and from my Retron 5</b-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.retron5-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport Retron5SaveData from '../save-formats/Retron5/Retron5';\n\nexport default {\n  name: 'ConvertRetron5',\n  data() {\n    return {\n      retron5SaveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.retron5SaveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n    },\n    readRetron5SaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.retron5SaveData = Retron5SaveData.createFromRetron5Data(event.arrayBuffer);\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'srm');\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.retron5SaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.retron5SaveData = Retron5SaveData.createFromEmulatorData(event.arrayBuffer);\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'sav');\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.retron5SaveData = null;\n      }\n    },\n    convertFile() {\n      const outputArrayBuffer = (this.conversionDirection === 'convertToRaw') ? this.retron5SaveData.getRawArrayBuffer() : this.retron5SaveData.getRetron5ArrayBuffer();\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertSegaCd.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Raw/emulator</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readSegaCdSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <file-list\n              :display=\"this.segaCdSaveDataLargest !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <sega-cd-save-type-selector\n              :value=\"this.segaCdSaveType\"\n              @change=\"changeSegaCdSaveType($event)\"\n            />\n            <div v-if=\"this.segaCdSaveType === 'ram-cart'\">\n              <output-filesize\n                class=\"output-filesize\"\n                :value=\"this.outputFilesize\"\n                @input=\"changeOutputFilesize($event)\"\n                platform=\"segacd\"\n                :values-to-remove=\"[this.internalSaveSize]\"\n              />\n            </div>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron\n                fluid\n                :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\"\n                :class=\"($mq === 'md') && (this.individualSavesOrMemoryCard === 'individual-saves') ? 'fix-jumbotron' : ''\"\n              >\n                <template v-slot:header>{{ individualSavesOrMemoryCardText }}</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <div v-if=\"this.individualSavesOrMemoryCard === 'individual-saves'\">\n              <output-filename\n                v-model=\"outputFilename\"\n                :leaveRoomForHelpIcon=\"true\"\n                :disabled=\"true\"\n                helpText=\"The filename for an individual save contains important information that the game needs to find this save data. Please do not modify it after downloading the save.\"\n              />\n            </div>\n            <div v-else>\n             <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            </div>\n            <individual-saves-or-memory-card-selector\n              :value=\"this.individualSavesOrMemoryCard\"\n              @change=\"changeIndividualSavesOrMemoryCard($event)\"\n              :individualSavesText=\"this.individualSavesText\"\n              :memoryCardText=\"this.memoryCardText\"\n            />\n            <div v-if=\"this.individualSavesOrMemoryCard === 'memory-card'\">\n              <sega-cd-save-type-selector\n                :value=\"this.segaCdSaveType\"\n                @change=\"changeSegaCdSaveType($event)\"\n              />\n              <div v-if=\"this.segaCdSaveType === 'ram-cart'\">\n                <output-filesize\n                  class=\"output-filesize\"\n                  :value=\"this.outputFilesize\"\n                  @input=\"changeOutputFilesize($event)\"\n                  platform=\"segacd\"\n                  :values-to-remove=\"[this.internalSaveSize]\"\n                />\n              </div>\n            </div>\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose files to add\"\n              :leaveRoomForHelpIcon=\"false\"\n              :allowMultipleFiles=\"true\"\n            />\n            <file-list\n              :display=\"this.segaCdSaveDataLargest !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"sega-cd-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=segacd\">copy save files to and from a Sega CD console</router-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.sega-cd-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* Mpve this up rather than deleting the margin under the selector above so that if this isn't visible there's still margin under the one above */\n.output-filesize {\n  margin-top: -1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport OutputFilesize from './OutputFilesize.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport IndividualSavesOrMemoryCardSelector from './IndividualSavesOrMemoryCardSelector.vue';\nimport SegaCdSaveTypeSelector from './SegaCdSaveTypeSelector.vue';\nimport SegaCdSaveData from '../save-formats/SegaCd/SegaCd';\nimport SegaCdUtil from '../util/SegaCd';\nimport PlatformSaveSizes from '../save-formats/PlatformSaveSizes';\n\nexport default {\n  name: 'ConvertSegaCd',\n  data() {\n    return {\n      segaCdSaveDataLargest: null,\n      segaCdSaveDataResized: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      outputFilesize: SegaCdUtil.INTERNAL_SAVE_SIZE,\n      conversionDirection: 'convertToRaw',\n      selectedSaveData: null,\n      segaCdSaveType: 'internal-memory',\n      individualSavesOrMemoryCard: 'memory-card',\n      individualSavesText: 'Individual saves',\n      memoryCardText: 'Raw/emulator',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    OutputFilesize,\n    FileList,\n    IndividualSavesOrMemoryCardSelector,\n    SegaCdSaveTypeSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      const segaCdSaveData = (this.individualSavesOrMemoryCard === 'individual-saves') ? this.segaCdSaveDataLargest : this.segaCdSaveDataResized;\n\n      return !segaCdSaveData || segaCdSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n    individualSavesOrMemoryCardText() {\n      return (this.individualSavesOrMemoryCard === 'individual-saves') ? this.individualSavesText : this.memoryCardText;\n    },\n    internalSaveSize() {\n      return SegaCdUtil.INTERNAL_SAVE_SIZE;\n    },\n    largestRamCartSaveSize() {\n      return PlatformSaveSizes.segacd.at(-1); // Last element of array\n    },\n    smallestRamCartSaveSize() {\n      return PlatformSaveSizes.segacd[1]; // First element is the internal memory size\n    },\n  },\n  methods: {\n    getFileNameFromSaveFile(saveFile) {\n      return `${saveFile.filename}-${saveFile.dataIsEncoded ? 'ECC' : 'RAW'}.bin`;\n    },\n    getSaveFileFromFileName(filename) {\n      const rawIndex = filename.indexOf('-RAW');\n      const eccIndex = filename.indexOf('-ECC');\n\n      if ((rawIndex < 0) === (eccIndex < 0)) {\n        throw new Error('This does not appear to be the filename of a Sega CD individual save');\n      }\n\n      return {\n        filename: filename.slice(0, Math.max(rawIndex, eccIndex)),\n        dataIsEncoded: (eccIndex >= 0),\n      };\n    },\n    getFileSizeErrorMessage() {\n      let messagePrefix = null;\n\n      if (this.segaCdSaveType === 'internal-memory') {\n        messagePrefix = 'The Sega CD internal memory';\n      } else {\n        messagePrefix = `A Sega CD RAM cart of size ${this.outputFilesize / 1024}kB`;\n      }\n\n      return `${messagePrefix} is not large enough to contain all of the files specified`;\n    },\n    getSegaCdDataResized() {\n      this.segaCdSaveDataResized = null;\n      if (this.segaCdSaveDataLargest !== null) {\n        try {\n          this.segaCdSaveDataResized = SegaCdSaveData.createWithNewSize(this.segaCdSaveDataLargest, this.outputFilesize);\n        } catch (e) {\n          this.errorMessage = this.getFileSizeErrorMessage();\n          this.segaCdSaveDataResized = null;\n          this.selectedSaveData = null;\n        }\n      }\n    },\n    changeSegaCdSaveType(newValue) {\n      if (this.segaCdSaveType !== newValue) {\n        this.segaCdSaveType = newValue;\n        if (newValue === 'internal-memory') {\n          this.outputFilesize = this.internalSaveSize;\n        } else if (this.segaCdSaveDataLargest !== null) {\n          this.outputFilesize = Util.clampValue(this.segaCdSaveDataLargest.getArrayBuffer().byteLength, this.smallestRamCartSaveSize, this.largestRamCartSaveSize);\n        } else {\n          this.outputFilesize = this.largestRamCartSaveSize;\n        }\n\n        this.changeOutputFilesize(this.outputFilesize);\n      }\n    },\n    changeOutputFilesize(newValue) {\n      this.outputFilesize = newValue;\n      this.errorMessage = null;\n\n      this.segaCdSaveType = (newValue === SegaCdUtil.INTERNAL_SAVE_SIZE) ? 'internal-memory' : 'ram-cart';\n\n      this.getSegaCdDataResized();\n    },\n    changeIndividualSavesOrMemoryCard(newValue) {\n      this.errorMessage = null;\n\n      if (this.individualSavesOrMemoryCard !== newValue) {\n        this.individualSavesOrMemoryCard = newValue;\n\n        if (newValue === 'individual-saves') {\n          if (this.selectedSaveData === null) {\n            this.changeSelectedSaveData(0);\n          }\n        } else {\n          if (this.inputFilename !== null) {\n            this.outputFilename = Util.changeFilenameExtension(this.inputFilename, 'brm');\n          }\n          this.selectedSaveData = null;\n          this.getSegaCdDataResized();\n        }\n      }\n    },\n    getFileListNames() {\n      if ((this.segaCdSaveDataLargest !== null) && (this.segaCdSaveDataLargest.getSaveFiles() !== null)) {\n        return this.segaCdSaveDataLargest.getSaveFiles().map((x) => ({ displayText: `${x.filename}` }));\n      }\n\n      return [];\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.segaCdSaveDataLargest = null;\n      this.segaCdSaveDataResized = null;\n      this.errorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.outputFilesize = SegaCdUtil.INTERNAL_SAVE_SIZE;\n      this.selectedSaveData = null;\n      this.individualSavesOrMemoryCard = 'memory-card';\n      this.segaCdSaveType = 'internal-memory';\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (newSaveData !== null) {\n        if ((this.segaCdSaveDataLargest !== null) && (this.segaCdSaveDataLargest.getSaveFiles().length > 0)) {\n          this.selectedSaveData = newSaveData;\n          this.outputFilename = this.getFileNameFromSaveFile(this.segaCdSaveDataLargest.getSaveFiles()[this.selectedSaveData]);\n          this.changeIndividualSavesOrMemoryCard('individual-saves');\n        } else {\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n        }\n      }\n    },\n    readSegaCdSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      try {\n        this.segaCdSaveDataLargest = SegaCdSaveData.createFromSegaCdData(event.arrayBuffer);\n\n        this.individualSavesOrMemoryCard = null;\n\n        this.changeIndividualSavesOrMemoryCard('memory-card');\n        this.changeOutputFilesize(this.segaCdSaveDataLargest.getArrayBuffer().byteLength);\n\n        this.getSegaCdDataResized();\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.segaCdSaveDataLargest = null;\n        this.segaCdSaveDataResized = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        const saveFiles = event.map((f) => ({\n          ...this.getSaveFileFromFileName(f.filename),\n          fileData: f.arrayBuffer,\n        }));\n\n        this.segaCdSaveDataLargest = SegaCdSaveData.createFromSaveFiles(saveFiles, this.largestRamCartSaveSize);\n\n        if (this.segaCdSaveDataLargest.getSaveFiles().length > 0) {\n          this.outputFilename = `${Util.convertDescriptionToFilename(this.segaCdSaveDataLargest.getSaveFiles()[0].filename)}.brm`;\n        } else {\n          this.outputFilename = 'output.brm';\n        }\n\n        this.getSegaCdDataResized();\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.segaCdSaveDataLargest = null;\n        this.selectedSaveData = null;\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if ((this.conversionDirection === 'convertToRaw') && (this.individualSavesOrMemoryCard === 'individual-saves')) {\n        outputArrayBuffer = this.segaCdSaveDataLargest.getSaveFiles()[this.selectedSaveData].fileData;\n      } else {\n        outputArrayBuffer = this.segaCdSaveDataResized.getArrayBuffer();\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertSegaSaturnEmulator.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\" :class=\"$mq === 'md' ? 'fix-jumbotron' : ''\">\n                <template v-slot:header>Sega Saturn</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readSegaSaturnSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <file-list\n              :display=\"this.segaSaturnSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <sega-cd-save-type-selector\n              :value=\"this.segaCdSaveType\"\n              @change=\"changeSegaCdSaveType($event)\"\n              ramCartText=\"Backup cartridge\"\n            />\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\" :class=\"$mq === 'md' ? 'fix-jumbotron' : ''\">\n                <template v-slot:header>Individual saves</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename\n              v-model=\"outputFilename\"\n            />\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readIndividualFileSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose files to add (*.BUP)\"\n              acceptExtension=\".BUP\"\n              :leaveRoomForHelpIcon=\"false\"\n              :allowMultipleFiles=\"true\"\n            />\n            <file-list\n              :display=\"this.segaSaturnSaveData !== null\"\n              :files=\"this.getFileListNames()\"\n              :enabled=\"false\"\n              :showMessageWhenEmpty=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"sega-saturn-emulator-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I <router-link to=\"/original-hardware?sort=saturn\">copy save files to and from a Sega Saturn console</router-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.sega-saturn-emulator-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport SegaCdSaveTypeSelector from './SegaCdSaveTypeSelector.vue';\nimport SegaSaturnSaveData from '../save-formats/SegaSaturn/SegaSaturn';\nimport SegaSaturnBupSaveData from '../save-formats/SegaSaturn/IndividualSaves/Bup';\nimport EmulatorSegaSaturnSaveData from '../save-formats/SegaSaturn/Emulators/Emulators';\n\nexport default {\n  name: 'ConvertSegaSaturnEmulator',\n  data() {\n    return {\n      segaSaturnSaveData: null,\n      bupsArray: null,\n      saveFiles: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      segaCdSaveType: 'internal-memory',\n      selectedSaveData: null,\n      outputBlockSize: SegaSaturnSaveData.INTERNAL_BLOCK_SIZE,\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n    SegaCdSaveTypeSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      return !this.segaSaturnSaveData || this.segaSaturnSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename;\n    },\n  },\n  methods: {\n    getFileListNames() {\n      if ((this.segaSaturnSaveData !== null) && (this.segaSaturnSaveData.getSaveFiles() !== null)) {\n        return this.segaSaturnSaveData.getSaveFiles().map(\n          (x) => ({\n            displayText: `${x.name} - ${x.comment}`,\n          }),\n        );\n      }\n\n      return [];\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.segaSaturnSaveData = null;\n      this.bupsArray = null;\n      this.saveFiles = null;\n      this.errorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.selectedSaveData = null;\n      this.segaCdSaveType = 'internal-memory';\n      this.outputBlockSize = SegaSaturnSaveData.INTERNAL_BLOCK_SIZE;\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (this.segaSaturnSaveData.getSaveFiles().length > 0) {\n        this.selectedSaveData = newSaveData;\n        this.outputFilename = `${this.segaSaturnSaveData.getSaveFiles()[this.selectedSaveData].name}.BUP`;\n      } else {\n        this.selectedSaveData = null;\n        this.outputFilename = null;\n      }\n    },\n    changeSegaCdSaveType(newValue) {\n      if (this.segaCdSaveType !== newValue) {\n        this.segaCdSaveType = newValue;\n        if (newValue === 'internal-memory') {\n          this.outputBlockSize = SegaSaturnSaveData.INTERNAL_BLOCK_SIZE;\n        } else {\n          this.outputBlockSize = SegaSaturnSaveData.CARTRIDGE_BLOCK_SIZE;\n        }\n\n        this.tryToCreateSegaSaturnSaveDataFromSaveFiles();\n      }\n    },\n    readSegaSaturnSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = event.filename;\n      try {\n        this.segaSaturnSaveData = EmulatorSegaSaturnSaveData.createFromSegaSaturnData(event.arrayBuffer);\n        this.bupsArray = SegaSaturnBupSaveData.convertSaveFilesToBups(this.segaSaturnSaveData.getSaveFiles());\n        this.changeSelectedSaveData(0);\n      } catch (e) {\n        this.errorMessage = 'File appears to not be in the correct format';\n        this.segaSaturnSaveData = null;\n        this.bupsArray = null;\n        this.saveFiles = null;\n        this.selectedSaveData = null;\n      }\n    },\n    readIndividualFileSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        this.bupsArray = event.map((f) => f.arrayBuffer);\n\n        this.saveFiles = SegaSaturnBupSaveData.convertBupsToSaveFiles(this.bupsArray);\n\n        this.tryToCreateSegaSaturnSaveDataFromSaveFiles();\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.segaSaturnSaveData = null;\n        this.bupsArray = null;\n        this.saveFiles = null;\n        this.selectedSaveData = null;\n      }\n    },\n    tryToCreateSegaSaturnSaveDataFromSaveFiles() {\n      if ((this.saveFiles !== null) && (this.outputBlockSize !== null)) {\n        this.errorMessage = null;\n        this.selectedSaveData = null;\n        this.inputFilename = null;\n        try {\n          this.segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(this.saveFiles, this.outputBlockSize);\n\n          const outputFileExtension = (this.segaCdSaveType === 'internal-memory') ? 'bkr' : 'bcr'; // These are mednafen-specific. Not sure what to do here\n\n          if (this.segaSaturnSaveData.getSaveFiles().length > 0) {\n            this.outputFilename = `${Util.convertDescriptionToFilename(this.segaSaturnSaveData.getSaveFiles()[0].name)}.${outputFileExtension}`;\n          } else {\n            this.outputFilename = `output.${outputFileExtension}`;\n          }\n        } catch (e) {\n          this.errorMessage = e.message;\n          this.segaSaturnSaveData = null;\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n          // Leave this.bupsArray and this.saveFiles alone, so we can try a different block size\n        }\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        outputArrayBuffer = this.bupsArray[this.selectedSaveData];\n      } else {\n        outputArrayBuffer = this.segaSaturnSaveData.getArrayBuffer();\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertSegaSaturnSaroo.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\" :class=\"$mq === 'md' ? 'fix-jumbotron' : ''\">\n                <template v-slot:header>Saroo</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readSegaSaturnSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.BIN)\"\n              acceptExtension=\".BIN\"\n              :leaveRoomForHelpIcon=\"true\"\n              helpText=\"Please select SS_SAVE.BIN, SS_MEMS.BIN, or SS_BUP.BIN from your Saroo\"\n            />\n            <file-list\n              :display=\"this.segaSaturnSaveData !== null\"\n              :files=\"this.getSarooSaveDataFileListEntries()\"\n              v-model=\"selectedSaveData\"\n              @change=\"changeSelectedSaveData($event)\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <sega-cd-save-type-selector\n              :value=\"this.segaCdSaveType\"\n              @change=\"changeSegaCdSaveType($event)\"\n              ramCartText=\"Backup cartridge\"\n            />\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\" :class=\"$mq === 'md' ? 'fix-jumbotron' : ''\">\n                <template v-slot:header>Individual saves</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename\n              v-model=\"outputFilename\"\n            />\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readIndividualFileSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose files to add (*.BUP)\"\n              acceptExtension=\".BUP\"\n              :leaveRoomForHelpIcon=\"false\"\n              :allowMultipleFiles=\"true\"\n            />\n            <div v-if=\"this.needsSaturnRomData\">\n              <input-file\n                @load=\"readSaturnRom($event)\"\n                :errorMessage=\"this.saturnRomErrorMessage\"\n                placeholderText=\"Select track 1 from the game's .bin/.cue files\"\n                acceptExtension=\".bin\"\n                :leaveRoomForHelpIcon=\"true\"\n                helpText=\"Saroo internal memory files require additional information about the game. It's generally contained in track 1 of the game's .bin/.cue files.\n                You can only add saves from one game at a time to Saroo internal memory files. All processing is done on your local machine and your ROMs are not sent anywhere.\"\n                id=\"inputFileSaturnRomData\"\n                ref=\"inputFileSaturnRomData\"\n              />\n            </div>\n            <file-list\n              :display=\"this.segaSaturnSaveData !== null\"\n              :files=\"this.getIndividualFileListEntries()\"\n              :enabled=\"false\"\n              :showMessageWhenEmpty=\"false\"\n            />\n            <input-file\n              @load=\"readSaveDataToMergeInfo($event)\"\n              :errorMessage=\"this.saveDataToMergeIntoErrorMessage\"\n              placeholderText=\"Optional: Add to existing Saroo file\"\n              acceptExtension=\".BIN\"\n              :leaveRoomForHelpIcon=\"true\"\n              helpText=\"The Saroo has one single common file for internal memory saves and one for backup cartridge saves. You may wish to add the saves selected above\n              to your existing file to preserve the other saves in it. If any of the saves selected above are already present in the file they will be overwritten.\n              Overwritten files will be highlighted in red, with the replacement files highlighted in green.\"\n              id=\"inputFileToMergeInfo\"\n              ref=\"inputFileToMergeInfo\"\n            />\n            <file-list\n              :display=\"this.segaSaturnSaveDataToMergeInto !== null\"\n              :files=\"this.getSaveDataToMergeInfoFileListEntries()\"\n              :enabled=\"false\"\n              :showMessageWhenEmpty=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"sega-saturn-saroo-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"this.convertButtonDisabled\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.sega-saturn-saroo-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n/* We have so much text in our jumbotron that at the md size it wants to be vertically larger than the other one. So let's constrain it and move the text upwards insie it */\n.fix-jumbotron {\n  max-height: 11.5em;\n}\n\n.fix-jumbotron > div {\n  margin-top: -1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport FileList from './FileList.vue';\nimport SegaCdSaveTypeSelector from './SegaCdSaveTypeSelector.vue';\nimport SegaSaturnBupSaveData from '../save-formats/SegaSaturn/IndividualSaves/Bup';\nimport SarooSegaSaturnInternalSaveData from '../save-formats/SegaSaturn/Saroo/Internal';\nimport SarooSegaSaturnCartSaveData from '../save-formats/SegaSaturn/Saroo/Cart';\nimport SarooSegaSaturnSystemSaveData from '../save-formats/SegaSaturn/Saroo/System';\nimport SegaSaturnCueBin from '../rom-formats/SegaSaturnCueBin';\n\nfunction getFileListEntry(saveFile) {\n  return {\n    displayText: `${saveFile.name} - ${saveFile.comment}`,\n  };\n}\n\nfunction getInternalMemoryFileListEntries(gameSaveFiles, overridingGameSaveFiles, colour) {\n  return gameSaveFiles.reduce((outputFileList, gameToMergeInfo) => {\n    const gameFileListEntries = gameToMergeInfo.saveFiles.map((saveFile) => {\n      const fileListEntry = getFileListEntry(saveFile);\n\n      if (SarooSegaSaturnInternalSaveData.gameSaveFilesContainsFile(overridingGameSaveFiles, gameToMergeInfo.gameId, saveFile)) {\n        fileListEntry.displayColour = colour;\n      }\n\n      return fileListEntry;\n    });\n\n    return [...outputFileList, ...gameFileListEntries];\n  }, []);\n}\n\nfunction getCartMemoryFileListEntries(saveFiles, overridingSaveFiles, colour) {\n  return saveFiles.map((saveFile) => {\n    const fileListEntry = getFileListEntry(saveFile);\n\n    if (SarooSegaSaturnCartSaveData.saveFilesContainsFile(overridingSaveFiles, saveFile)) {\n      fileListEntry.displayColour = colour;\n    }\n\n    return fileListEntry;\n  });\n}\n\nfunction getFileListEntries(saveFiles) {\n  if (saveFiles !== null) {\n    return saveFiles.map((x) => getFileListEntry(x));\n  }\n\n  return [];\n}\n\nfunction getFileListEntriesFromSaveData(saveData) {\n  if (saveData !== null) {\n    return getFileListEntries(saveData.getSaveFiles());\n  }\n\n  return [];\n}\n\nexport default {\n  name: 'ConvertSegaSaturnSaroo',\n  data() {\n    return {\n      segaSaturnSaveData: null,\n      segaSaturnSaveDataToMergeInto: null,\n      bupsArray: null,\n      saveFiles: null,\n      errorMessage: null,\n      inputFilename: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      segaCdSaveType: 'internal-memory',\n      selectedSaveData: null,\n      saturnRomData: null,\n      saturnRomErrorMessage: null,\n      saveDataToMergeIntoErrorMessage: null,\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    FileList,\n    SegaCdSaveTypeSelector,\n  },\n  computed: {\n    convertButtonDisabled() {\n      const haveDataSelected = (this.conversionDirection === 'convertToRaw') ? true : this.selectedSaveData === null;\n\n      return !this.segaSaturnSaveData || this.segaSaturnSaveData.getSaveFiles().length === 0 || !haveDataSelected || !this.outputFilename || !this.hasSaturnRomDataIfNeeded;\n    },\n    needsSaturnRomData() {\n      return (this.conversionDirection === 'convertToFormat') && (this.segaCdSaveType === 'internal-memory');\n    },\n    hasSaturnRomDataIfNeeded() {\n      return !this.needsSaturnRomData || (this.saturnRomData !== null);\n    },\n  },\n  methods: {\n    getGameSaveFiles() {\n      if ((this.saturnRomData === null) || (this.saveFiles === null)) {\n        return [];\n      }\n\n      return [\n        {\n          gameId: this.saturnRomData.getGameId(),\n          saveFiles: this.saveFiles,\n        },\n      ];\n    },\n    hasAllDataToShowOverriddenFiles() {\n      const hasSaveFilesAndSaveDataToMergeInto = (this.saveFiles !== null) && (this.segaSaturnSaveDataToMergeInto !== null);\n\n      if (this.segaCdSaveType === 'internal-memory') {\n        return hasSaveFilesAndSaveDataToMergeInto && (this.saturnRomData !== null);\n      }\n\n      return hasSaveFilesAndSaveDataToMergeInto;\n    },\n    getSarooSaveDataFileListEntries() {\n      // This is for displaying the file list on the left, when converting FROM Saroo data. No need for any colouring\n      return getFileListEntriesFromSaveData(this.segaSaturnSaveData);\n    },\n    getIndividualFileListEntries() {\n      // This is for displaying the top file list on the right (of files we are converting/adding to an existing file), when converting TO Saroo data.\n\n      if (!this.hasAllDataToShowOverriddenFiles()) {\n        // We're doing either internal or cart saves, but don't have enough data to show coloured entries.\n        // So just show regular entries regardless of whether we're doing internal or cart saves\n\n        return getFileListEntries(this.saveFiles);\n      }\n\n      if (this.segaCdSaveType === 'internal-memory') {\n        // We're doing internal saves, and have all of the data necessary to show coloured entries\n\n        return getInternalMemoryFileListEntries(this.getGameSaveFiles(), this.segaSaturnSaveDataToMergeInto.getGameSaveFiles(), 'green');\n      }\n\n      // We're doing cart saves, and have all of the data necessary to show coloured entries\n\n      return getCartMemoryFileListEntries(this.saveFiles, this.segaSaturnSaveDataToMergeInto.getSaveFiles(), 'green');\n    },\n    getSaveDataToMergeInfoFileListEntries() {\n      // This is for displaying the bottom file list on the right (of existing files we are adding to), when converting TO Saroo data.\n\n      if (!this.hasAllDataToShowOverriddenFiles()) {\n        // We're doing either internal or cart saves, but don't have enough data to show coloured entries.\n        // So just show regular entries regardless of whether we're doing internal or cart saves\n\n        return getFileListEntriesFromSaveData(this.segaSaturnSaveDataToMergeInto);\n      }\n\n      if (this.segaCdSaveType === 'internal-memory') {\n        // We're doing internal saves, and have all of the data necessary to show coloured entries\n\n        return getInternalMemoryFileListEntries(this.segaSaturnSaveDataToMergeInto.getGameSaveFiles(), this.getGameSaveFiles(), 'red');\n      }\n\n      // We're doing cart saves, and have all of the data necessary to show coloured entries\n\n      return getCartMemoryFileListEntries(this.segaSaturnSaveDataToMergeInto.getSaveFiles(), this.saveFiles, 'red');\n    },\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.segaSaturnSaveData = null;\n      this.segaSaturnSaveDataToMergeInto = null;\n      this.bupsArray = null;\n      this.saveFiles = null;\n      this.errorMessage = null;\n      this.saveDataToMergeIntoErrorMessage = null;\n      this.inputFilename = null;\n      this.outputFilename = null;\n      this.selectedSaveData = null;\n      this.segaCdSaveType = 'internal-memory';\n      this.saturnRomData = null;\n      this.saturnRomErrorMessage = null;\n\n      this.setOutputFilename();\n    },\n    changeSelectedSaveData(newSaveData) {\n      if (this.segaSaturnSaveData.getSaveFiles().length > 0) {\n        this.selectedSaveData = newSaveData;\n        this.outputFilename = `${this.segaSaturnSaveData.getSaveFiles()[this.selectedSaveData].name}.BUP`;\n      } else {\n        this.selectedSaveData = null;\n        this.outputFilename = null;\n      }\n    },\n    setOutputFilename() {\n      if (this.conversionDirection === 'convertToFormat') {\n        if (this.segaCdSaveType === 'internal-memory') {\n          this.outputFilename = 'SS_SAVE.BIN';\n        } else {\n          this.outputFilename = 'SS_MEMS.BIN';\n        }\n      }\n    },\n    changeSegaCdSaveType(newValue) {\n      if (this.segaCdSaveType !== newValue) {\n        this.segaCdSaveType = newValue;\n        this.saturnRomData = null;\n        this.segaSaturnSaveData = null;\n        this.errorMessage = null;\n        this.segaSaturnSaveDataToMergeInto = null;\n        this.saveDataToMergeIntoErrorMessage = null;\n        if (this.$refs.inputFileSaturnRomData) {\n          this.$refs.inputFileSaturnRomData.reset();\n        }\n        if (this.$refs.inputFileToMergeInfo) {\n          this.$refs.inputFileToMergeInfo.reset();\n        }\n        this.tryToCreateSegaSaturnSaveDataFromSaveFiles();\n        this.setOutputFilename();\n      }\n    },\n    readSaturnRom(event) {\n      this.saturnRomErrorMessage = null;\n      try {\n        this.saturnRomData = new SegaSaturnCueBin(event.arrayBuffer);\n        this.tryToCreateSegaSaturnSaveDataFromSaveFiles();\n      } catch (e) {\n        this.saturnRomErrorMessage = 'This does not appear to be track 1 of a Sega Saturn game in .cue/.bin format';\n        this.saturnRomData = null;\n      }\n    },\n    readSegaSaturnSaveData(event) {\n      if (this.segaCdSaveType !== null) {\n        this.errorMessage = null;\n        this.selectedSaveData = null;\n        this.inputFilename = event.filename;\n        try {\n          if (SarooSegaSaturnInternalSaveData.isInternalSarooData(event.arrayBuffer)) { // SS_SAVE.BIN\n            this.segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSarooData(event.arrayBuffer);\n          } else if (SarooSegaSaturnCartSaveData.isCartSarooData(event.arrayBuffer)) { // SS_MEMS.BIN\n            this.segaSaturnSaveData = SarooSegaSaturnCartSaveData.createFromSarooData(event.arrayBuffer);\n          } else if (SarooSegaSaturnSystemSaveData.isSystemSarooData(event.arrayBuffer)) { // SS_BUP.BIN\n            this.segaSaturnSaveData = SarooSegaSaturnSystemSaveData.createFromSarooData(event.arrayBuffer);\n          } else {\n            throw new Error('Could not find a matching Saroo file type');\n          }\n\n          this.bupsArray = SegaSaturnBupSaveData.convertSaveFilesToBups(this.segaSaturnSaveData.getSaveFiles());\n          this.changeSelectedSaveData(0);\n        } catch (e) {\n          this.errorMessage = 'File appears to not be in the correct format';\n          this.segaSaturnSaveData = null;\n          this.bupsArray = null;\n          this.saveFiles = null;\n          this.selectedSaveData = null;\n        }\n      }\n    },\n    readSaveDataToMergeInfo(event) {\n      if (this.segaCdSaveType !== null) {\n        this.saveDataToMergeIntoErrorMessage = null;\n\n        if (this.segaCdSaveType === 'internal-memory') {\n          try {\n            this.segaSaturnSaveDataToMergeInto = SarooSegaSaturnInternalSaveData.createFromSarooData(event.arrayBuffer);\n            this.tryToCreateSegaSaturnSaveDataFromSaveFiles();\n          } catch (e) {\n            this.saveDataToMergeIntoErrorMessage = 'You can only merge saves from an internal memory save file (SS_SAVE.BIN) when creating a new internal memory file';\n            this.segaSaturnSaveDataToMergeInto = null;\n          }\n        } else {\n          try {\n            this.segaSaturnSaveDataToMergeInto = SarooSegaSaturnCartSaveData.createFromSarooData(event.arrayBuffer);\n            this.tryToCreateSegaSaturnSaveDataFromSaveFiles();\n          } catch (e) {\n            this.saveDataToMergeIntoErrorMessage = 'You can only merge saves from a backup cartridge save file (SS_MEMS.BIN) when creating a new backup cartridge file';\n            this.segaSaturnSaveDataToMergeInto = null;\n          }\n        }\n      }\n    },\n    readIndividualFileSaveData(event) {\n      this.errorMessage = null;\n      this.selectedSaveData = null;\n      this.inputFilename = null;\n      try {\n        this.bupsArray = event.map((f) => f.arrayBuffer);\n\n        this.saveFiles = SegaSaturnBupSaveData.convertBupsToSaveFiles(this.bupsArray);\n\n        this.tryToCreateSegaSaturnSaveDataFromSaveFiles();\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.segaSaturnSaveData = null;\n        this.bupsArray = null;\n        this.saveFiles = null;\n        this.selectedSaveData = null;\n      }\n    },\n    tryToCreateSegaSaturnSaveDataFromSaveFiles() {\n      if ((this.saveFiles !== null) && this.hasSaturnRomDataIfNeeded) {\n        this.errorMessage = null;\n        this.selectedSaveData = null;\n        this.inputFilename = null;\n        try {\n          if (this.segaCdSaveType === 'internal-memory') {\n            const newGameSaveFiles = this.getGameSaveFiles();\n\n            let gameSaveFiles = newGameSaveFiles;\n\n            if (this.segaSaturnSaveDataToMergeInto !== null) {\n              gameSaveFiles = SarooSegaSaturnInternalSaveData.upsertGameSaveFiles(this.segaSaturnSaveDataToMergeInto.getGameSaveFiles(), newGameSaveFiles);\n            }\n\n            this.segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSaveFiles(gameSaveFiles);\n          } else {\n            let saveFiles = this.saveFiles; // eslint-disable-line prefer-destructuring\n\n            if (this.segaSaturnSaveDataToMergeInto !== null) {\n              saveFiles = SarooSegaSaturnCartSaveData.upsertGameSaveFiles(this.segaSaturnSaveDataToMergeInto.getSaveFiles(), this.saveFiles);\n            }\n\n            this.segaSaturnSaveData = SarooSegaSaturnCartSaveData.createFromSaveFiles(saveFiles);\n          }\n        } catch (e) {\n          this.errorMessage = e.message;\n          this.segaSaturnSaveData = null;\n          this.selectedSaveData = null;\n          this.outputFilename = null;\n          // Leave this.bupsArray and this.saveFiles and this.saturnRomData alone, so we can try a different sega cd save type (internal vs cart)\n        }\n      }\n    },\n    convertFile() {\n      let outputArrayBuffer = null;\n\n      if (this.conversionDirection === 'convertToRaw') {\n        outputArrayBuffer = this.bupsArray[this.selectedSaveData];\n      } else {\n        outputArrayBuffer = this.segaSaturnSaveData.getArrayBuffer();\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertSrmSav.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>.srm</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readSrmSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.srm)\"\n              acceptExtension=\".srm\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <!-- Here we omit having a output file size selector because we're going to likely be given all sorts of different files and many may not be in powers-of-2 -->\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>.sav</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n            <!-- Here we omit having a output file size selector because we're going to likely be given all sorts of different files and many may not be in powers-of-2 -->\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readSavSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.sav)\"\n              acceptExtension=\".sav\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"srm-sav-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.saveData || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            This may not result in a usable .sav file from all .srm files, or vice versa.\n          </div>\n          <div class=\"help\">\n            If you have a save file from a specific place like the <router-link to=\"/mister\">MiSTer</router-link>,\n            a <router-link to=\"/flash-carts\">flash cart</router-link>, or the <router-link to=\"/retron-5\">Retron 5</router-link> then please use one of those conversions instead.\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n.srm-sav-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\n\nexport default {\n  name: 'ConvertSrmSav',\n  data() {\n    return {\n      saveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n    };\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.saveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n    },\n    readSrmSaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.saveData = event.arrayBuffer;\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'sav');\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.saveData = null;\n      }\n    },\n    readSavSaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.saveData = event.arrayBuffer;\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'srm');\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.saveData = null;\n      }\n    },\n    convertFile() {\n      // This \"conversion\" does nothing but change the extension of the file. Having a different file extension than expected by their\n      // emulator is a huge stumbling block for many people. We are conditioned by our operating systems to treat file extensions seriously,\n      // and that they represent the format of the data in the file. However, many emulators (and other ways of playing retro games) use\n      // the extensions .srm and .sav interchangably, and they do not represent anything about the data contained in the file.\n      // \"convert srm to sav\" and vice versa continue to be top google searches in the save file converter space, indicating that this is an\n      // ongoing problem for users\n\n      const outputBlob = new Blob([this.saveData], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/ConvertWii.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"center\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Wii VC</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readWiiSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert (*.bin)\"\n              acceptExtension=\".bin\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n            <wii-vc-platform\n              v-model=\"outputPlatform\"\n              id=\"platform\"\n              v-on:input=\"outputPlatformChanged()\"\n              :errorMessage=\"this.platformErrorMessage\"\n              :disabled=\"this.currentlyLoadingPlatform\"\n            />\n            <region-viewer\n              :regionName=\"this.regionName\"\n            />\n          </div>\n          <div v-else>\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            disableDirection=\"convertToFormat\"\n            @change=\"changeConversionDirection($event)\"\n            id=\"conversion-direction\"\n          />\n          <b-popover target=\"conversion-direction\" triggers=\"focus hover\" placement=\"bottom\">\n            We can currently only extract the raw save from Wii Virtual Console files.\n            If you need to convert to a Wii Virtual Console file, please google the tool named FE100.\n          </b-popover>\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readEmulatorSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to convert\"\n              :leaveRoomForHelpIcon=\"false\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"convert-button wii-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.outputSaveData || !this.outputFilename || !this.outputPlatform\"\n            @click=\"convertFile()\"\n          >\n          <div v-if=\"this.currentlyLoadingPlatform\">\n            <b-spinner small />\n          </div>\n          <div v-else class=\"wii-convert-button\">\n            Convert!\n          </div>\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how can I copy save files to and from my\n            <router-link to=\"/original-hardware?sort=nes\">NES</router-link> /\n            <router-link to=\"/original-hardware?sort=snes\">SNES</router-link> /\n            <router-link to=\"/original-hardware?sort=sms\">SMS</router-link> /\n            <router-link to=\"/original-hardware?sort=genesis\">Genesis</router-link> cartridge,\n            <router-link to=\"/original-hardware?sort=n64\">N64</router-link> cartridge or Controller Pak, or\n            <router-link to=\"/original-hardware?sort=tg16\">TG-16</router-link> console?\n          </div>\n          <div class=\"help\">\n            Help: how do I copy files&nbsp;<b-link href=\"https://en-americas-support.nintendo.com/app/answers/detail/a_id/2709/~/how-to-move-data-from-the-wii-to-an-sd-card\">from my Nintendo Wii</b-link>, or&nbsp;<b-link href=\"https://en-americas-support.nintendo.com/app/answers/detail/a_id/2723/~/how-to-copy-save-data-to-the-wii-from-an-sd-card\">to my Nintendo Wii</b-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.convert-button {\n  margin-top: 1em;\n}\n\n/* Needs to be used in 2 places: on the button itself and on the div containing the Convert! text, so that Google Tag Manager can pick it up properly\n   So, it contains nothing and we have a separate class above to do the spacing */\n.wii-convert-button {\n\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { BPopover } from 'bootstrap-vue';\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport WiiVcPlatform from './WiiVcPlatform.vue';\nimport RegionViewer from './RegionViewer.vue';\nimport WiiSaveData from '../save-formats/Wii/Wii';\nimport GetPlatform from '../save-formats/Wii/GetPlatform/GetPlatform';\nimport ConvertFromPlatform from '../save-formats/Wii/ConvertFrom/ConvertFromPlatform';\nimport getHttpClient from '../save-formats/Wii/GetPlatform/HttpClient';\n\nconst getPlatform = new GetPlatform(getHttpClient(GetPlatform.getBaseUrl()));\n\nexport default {\n  name: 'ConvertWii',\n  data() {\n    return {\n      outputSaveData: null,\n      errorMessage: null,\n      platformErrorMessage: null,\n      regionName: null,\n      outputFilename: null,\n      outputPlatform: null,\n      currentlyLoadingPlatform: null,\n      conversionDirection: 'convertToRaw',\n    };\n  },\n  components: {\n    BPopover,\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    RegionViewer,\n    WiiVcPlatform,\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.outputSaveData = null;\n      this.errorMessage = null;\n      this.platformErrorMessage = null;\n      this.regionName = null;\n      this.outputFilename = null;\n      this.outputPlatform = null;\n      this.currentlyLoadingPlatform = false;\n      this.wiiSaveData = null;\n      this.inputFilename = null;\n    },\n    async readWiiSaveData(event) {\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.outputSaveData = null;\n      this.outputPlatform = null;\n      this.regionName = null;\n      this.currentlyLoadingPlatform = false;\n      this.wiiSaveData = null;\n      this.inputFilename = null;\n      try {\n        this.wiiSaveData = WiiSaveData.createFromWiiData(event.arrayBuffer);\n\n        if (this.wiiSaveData.getNumberOfFiles() === 0) {\n          throw new Error('No save data found within file');\n        }\n\n        this.inputFilename = event.filename;\n\n        this.currentlyLoadingPlatform = true;\n        const gameInfo = await getPlatform.get(this.wiiSaveData.getGameId());\n        this.currentlyLoadingPlatform = false;\n\n        this.regionName = gameInfo.region;\n\n        if (gameInfo.platform !== GetPlatform.unknownPlatform()) {\n          this.outputPlatform = gameInfo.platform; // Triggers outputPlatformChanged()\n        } else {\n          this.platformErrorMessage = 'Unable to automatically determine the platform for this save. Please select it manually.';\n        }\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.outputSaveData = null;\n        this.outputFilename = null;\n        this.outputPlatform = null;\n        this.currentlyLoadingPlatform = false;\n        this.wiiSaveData = null;\n        this.inputFilename = null;\n      }\n    },\n    outputPlatformChanged() {\n      this.platformErrorMessage = null;\n      if ((this.wiiSaveData !== null) && (this.outputPlatform !== null)) {\n        const potentialSaveFiles = this.wiiSaveData.getFiles().filter((f) => f.containsSaveData);\n\n        if (potentialSaveFiles.length === 0) {\n          this.platformErrorMessage = 'This file does not appear to contain any save data';\n          this.outputSaveData = null;\n          this.outputFilename = null;\n          return;\n        }\n\n        // I've never seen a Wii VC file that contains more than 1 file that has save data in it, so just return the first one\n\n        try {\n          const convertedSaveData = ConvertFromPlatform(potentialSaveFiles[0].data, potentialSaveFiles[0].name, this.outputPlatform, this.wiiSaveData.getGameId()); // Potentially there are more files within the file the user gave us. But, what do we name them if we're going to upload them? Maybe just punt on this and only upload the first one and see if there's ever an example where this is a problem\n\n          this.outputSaveData = convertedSaveData.saveData;\n          this.outputFilename = Util.changeFilenameExtension(this.inputFilename, convertedSaveData.fileExtension);\n        } catch (e) {\n          this.platformErrorMessage = 'This file does not appear to match the selected platform';\n          this.outputSaveData = null;\n          this.outputFilename = null;\n        }\n      }\n    },\n    readEmulatorSaveData(event) {\n      this.errorMessage = null;\n      try {\n        this.wiiSaveData = WiiSaveData.createFromEmulatorData(event.arrayBuffer);\n        this.outputFilename = Util.changeFilenameExtension(event.filename, 'bin');\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.outputSaveData = null;\n        this.outputPlatform = null;\n      }\n    },\n    convertFile() {\n      if (this.conversionDirection === 'convertToRaw') {\n        const outputBlob = new Blob([this.outputSaveData], { type: 'application/octet-stream' });\n\n        saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n      } else {\n        const outputBlob = new Blob([this.wiiSaveData.getArrayBuffer()], { type: 'application/octet-stream' });\n\n        saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n      }\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/DecryptPsp.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>PSP encrypted</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <input-file\n              @load=\"readEncryptedSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to decrypt\"\n              :leaveRoomForHelpIcon=\"true\"\n            />\n            <input-file\n              @load=\"readGamekeyFile($event)\"\n              placeholderText=\"Choose your game key file\"\n              :leaveRoomForHelpIcon=\"true\"\n              id=\"input-file-game-key\"\n              :helpText=\"this.gamekeyHelpText\"\n            />\n          </div>\n          <div v-else>\n            <output-filename\n              v-model=\"outputFilename\"\n              :leaveRoomForHelpIcon=\"true\"\n              id=\"output-filename-encrypted\"\n              helpText=\"Be sure to set the same filename here as the original encrypted file created by your PSP or emulator.\n              This filename is baked into the PARAM.SFO file that you will download in addition to the encrypted file.\n              Please copy both the new encrypted file and new PARAM.SFO over top of the corresponding files on your PSP or created by your emulator.\"\n            />\n          </div>\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <conversion-direction\n            :horizontalLayout=\"['md', 'lg', 'xl']\"\n            :verticalLayout=\"['xs', 'sm']\"\n            :conversionDirection=\"this.conversionDirection\"\n            @change=\"changeConversionDirection($event)\"\n          />\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>PSP decrypted</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <div v-if=\"this.conversionDirection === 'convertToRaw'\">\n            <output-filename v-model=\"outputFilename\" :leaveRoomForHelpIcon=\"false\"/>\n          </div>\n          <div v-else>\n            <input-file\n              @load=\"readUnencryptedSaveData($event)\"\n              :errorMessage=\"this.errorMessage\"\n              placeholderText=\"Choose a file to encrypt\"\n              :leaveRoomForHelpIcon=\"true\"\n            />\n            <input-file\n              @load=\"readParamSfoFile($event)\"\n              placeholderText=\"Choose the PARAM.SFO file\"\n              acceptExtension=\".SFO\"\n              :leaveRoomForHelpIcon=\"true\"\n              id=\"input-file-param-sfo\"\n              helpText=\"There will be a file named PARAM.SFO beside the original encrypted save file on your PSP, or created by your emulator.\n              This file needs to be updated during the encryption process, and you will receive a new PARAM.SFO file in addition to the new encrypted file.\"\n            />\n            <input-file\n              @load=\"readGamekeyFile($event)\"\n              placeholderText=\"Choose your game key file\"\n              :leaveRoomForHelpIcon=\"true\"\n              id=\"input-file-game-key\"\n              :helpText=\"this.gamekeyHelpText\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"psp-encryption-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.hasEnoughInfoToConvertFile()\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        <div v-if=\"this.conversionDirection !== 'convertToRaw'\">\n          <help-button\n            popover-text=\"You will need to download 2 files: the encrypted save file and an updated PARAM.SFO file.\n            Copy them over the original files on your PSP or created by your emulator.\"\n            id=\"convert-button\"\n            class=\"help-button\"\n          />\n        </div>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://www.wikihow.com/Put-Game-Saves-on-Your-PSP\">copy save files to and from my PSP</b-link>?\n          </div>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://psp.brewology.com/downloads/download.php?id=13861&mcid=1\">get a game key file for a particular game</b-link>?\n          </div>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://forums.afterdawn.com/threads/guide-how-to-install-plugins-on-a-psp-includes-on-how-to-install-two-or-more.657638/\">install a plugin on my PSP</b-link>?\n          </div>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://revive.today/psp/cfw/\">install custom firmware on my PSP</b-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.psp-encryption-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n.help-button {\n  position: absolute;\n  right: -0.2em;\n  top: 1em;\n}\n\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport OutputFilename from './OutputFilename.vue';\nimport ConversionDirection from './ConversionDirection.vue';\nimport PspSaveData from '../save-formats/PSP/Savefile';\nimport PspEncryptionUtil from '../save-formats/PSP/PspEncryptionUtil';\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'DecryptPsp',\n  data() {\n    return {\n      pspDataArrayBuffer: null,\n      paramSfoArrayBuffer: null,\n      gamekeyArrayBuffer: null,\n      errorMessage: null,\n      outputFilename: null,\n      conversionDirection: 'convertToRaw',\n      gamekeyHelpText: 'See the help links below for information on how to install custom firmware on your PSP, and how to install a plugin that will output a game key file for each game.',\n    };\n  },\n  async mounted() {\n    await PspEncryptionUtil.init();\n  },\n  components: {\n    ConversionDirection,\n    InputFile,\n    OutputFilename,\n    HelpButton,\n  },\n  methods: {\n    changeConversionDirection(newDirection) {\n      this.conversionDirection = newDirection;\n      this.pspDataArrayBuffer = null;\n      this.paramSfoArrayBuffer = null;\n      this.gamekeyArrayBuffer = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n    },\n    readGamekeyFile(event) {\n      this.gamekeyArrayBuffer = event.arrayBuffer;\n      this.errorMessage = null;\n    },\n    readParamSfoFile(event) {\n      this.paramSfoArrayBuffer = event.arrayBuffer;\n      this.errorMessage = null;\n    },\n    readEncryptedSaveData(event) {\n      this.pspDataArrayBuffer = event.arrayBuffer;\n      this.outputFilename = Util.appendToFilename(event.filename, '_decrypted');\n      this.errorMessage = null;\n    },\n    readUnencryptedSaveData(event) {\n      this.pspDataArrayBuffer = event.arrayBuffer;\n      this.outputFilename = null;\n      this.errorMessage = null;\n    },\n    hasEnoughInfoToConvertFile() {\n      if (this.conversionDirection === 'convertToRaw') {\n        // Decrypting\n        return this.pspDataArrayBuffer && this.gamekeyArrayBuffer && this.outputFilename;\n      }\n\n      // Encrypting\n      return this.pspDataArrayBuffer && this.gamekeyArrayBuffer && this.outputFilename && this.paramSfoArrayBuffer;\n    },\n    convertFile() {\n      this.errorMessage = null;\n      if (this.conversionDirection === 'convertToRaw') {\n        // Decrypting\n        try {\n          const pspSaveData = PspSaveData.createFromEncryptedData(this.pspDataArrayBuffer, this.gamekeyArrayBuffer);\n\n          const outputBlob = new Blob([pspSaveData.getUnencryptedArrayBuffer()], { type: 'application/octet-stream' });\n\n          saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n        } catch (e) {\n          this.errorMessage = 'Encountered an error trying to decrypt file. Please double-check that you supplied an encrypted PSP save file, and a 16 byte game key file';\n        }\n      } else {\n        // Encrypting\n        try {\n          const pspSaveData = PspSaveData.createFromUnencryptedData(this.pspDataArrayBuffer, Util.getFilename(this.outputFilename), this.paramSfoArrayBuffer, this.gamekeyArrayBuffer);\n\n          const outputBlobEncrypted = new Blob([pspSaveData.getEncryptedArrayBuffer()], { type: 'application/octet-stream' });\n\n          saveAs(outputBlobEncrypted, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n\n          const outputBlobParamSfo = new Blob([pspSaveData.getParamSfoArrayBuffer()], { type: 'application/octet-stream' });\n\n          saveAs(outputBlobParamSfo, 'PARAM.SFO'); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n        } catch (e) {\n          this.errorMessage = 'Encountered an error trying to encrypt file. Please double-check that you entered an output filename that matches the original file '\n          + ' on your PSP, and that you supplied an unencrypted PSP save file, the correct PARAM.SFO file, and a 16 byte game key file';\n        }\n      }\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/DreamcastIndividualSaveTypeSelector.vue",
    "content": "<template>\n  <b-form-group v-slot=\"{ ariaDescribedby }\">\n    <b-form-radio-group\n      v-model=\"valueLocal\"\n      :options=\"options\"\n      :aria-describedby=\"ariaDescribedby\"\n      buttons\n      button-variant=\"outline-info\"\n      class=\"equal-width-radios w-100\"\n    />\n  </b-form-group>\n</template>\n\n<style scoped>\n\n/* Chatgpt generated css to make the buttons equal width */\n.equal-width-radios ::v-deep .btn-group,\n.equal-width-radios ::v-deep .btn-group-toggle {\n  display: flex !important;\n  width: 100%;\n}\n.equal-width-radios ::v-deep .btn {\n  flex: 1 1 0;\n  min-width: 0;\n  display: flex;\n  align-items: center;\n  justify-content: center;\n  text-align: center;\n}\n\n</style>\n\n<script>\n\nexport default {\n  name: 'DreamcastIndividualSaveTypeSelector',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n  },\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  computed: {\n    valueLocal: {\n      get() { return this.value; },\n      set(newValue) { this.$emit('change', newValue); },\n    },\n  },\n  data() {\n    return {\n      options: [\n        { value: 'dci', text: '.dci' },\n        { value: 'vmivms', text: '.vmi/.vms' },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/EndiannessWordSize.vue",
    "content": "<template>\n    <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"The word size is the number of bytes the machine's internal registers can process in a single instruction\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'EndiannessWordSize',\n  props: {\n    value: {\n      type: Number,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: null, text: 'Choose word size', disabled: true },\n        { value: 2, text: '2 bytes (16 bits)' },\n        { value: 4, text: '4 bytes (32 bits) (e.g. Nintendo 64)' },\n        { value: 8, text: '8 bytes (64 bits) (e.g. open_agb_firm)' },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/EraseSave.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"center\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Erase save</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <input-file\n            @load=\"readSaveData($event)\"\n            :errorMessage=\"this.errorMessage\"\n            placeholderText=\"Choose a file to convert\"\n            :leaveRoomForHelpIcon=\"false\"\n          />\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"utilities-erase-save-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.saveData || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <hr/>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Instructions:\n          </div>\n          <b-row class=\"justify-content-md-left, help\" align-h=\"center\">\n            <b-col sm=12 md=6>\n              <div class=\"help, text-left\">\n                <ol>\n                  <li>Use a cartridge reader to copy the save from the cartridge to your computer</li>\n                  <li>Make a backup copy of the save if you wish</li>\n                  <li>Convert the save using this tool</li>\n                  <li>Use the cartridge reader to copy the new save to the cartridge</li>\n                </ol>\n              </div>\n            </b-col>\n          </b-row>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.utilities-erase-save-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport SaveFilesUtil from '../util/SaveFiles';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\n\nexport default {\n  name: 'EraseSave',\n  data() {\n    return {\n      saveData: null,\n      errorMessage: null,\n      outputFilename: null,\n    };\n  },\n  components: {\n    InputFile,\n  },\n  methods: {\n    readSaveData(event) {\n      this.errorMessage = null;\n      this.outputFilename = null;\n      try {\n        this.saveData = event.arrayBuffer;\n        this.outputFilename = Util.getFilename(event.filename);\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.saveData = null;\n      }\n    },\n    convertFile() {\n      const outputArrayBuffer = SaveFilesUtil.getEraseCartridgeSave(this.saveData);\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/FileInfo.vue",
    "content": "<template>\n  <b-collapse appear id=\"id\" :visible=\"display\">\n  <b-list-group>\n    <b-list-group-item :variant=\"fileNameVariant\" class=\"d-flex justify-content-between align-items-center\">\n      <div>File name:</div><div>{{ fileName }}</div>\n    </b-list-group-item>\n    <b-list-group-item :variant=\"fileSizeVariant\" class=\"d-flex justify-content-between align-items-center\">\n      <div>File size:</div><div>{{ fileSize }} bytes</div>\n    </b-list-group-item>\n    <b-list-group-item :variant=\"initialPaddingVariant\" class=\"d-flex justify-content-between align-items-center\">\n      <div>Initial padding:</div><div>{{ initialPadding }} bytes</div>\n    </b-list-group-item>\n    <b-list-group-item :variant=\"remainingSaveSizeVariant\" class=\"d-flex justify-content-between align-items-center\">\n      <div>Remaining save size:</div><div>{{ remainingSaveSize }} bytes</div>\n    </b-list-group-item>\n  </b-list-group>\n  </b-collapse>\n</template>\n\n<style scoped>\n\n</style>\n\n<script>\nimport PaddingUtil from '../util/Padding';\n\nexport default {\n  name: 'FileInfo',\n  props: {\n    fileName: null,\n    fileData: null,\n    otherFileName: null,\n    otherFileData: null,\n    fileAttributeEqualVariant: null,\n    fileAttributeNotEqualVariant: null,\n    id: null,\n    display: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  computed: {\n    fileSize() { return this.getFileSize(this.fileData); },\n    initialPadding() { return this.getInitialPadding(this.fileData); },\n    remainingSaveSize() { return this.getRemainingSaveSize(this.fileData); },\n    fileNameVariant() {\n      if (!this.fileName || !this.otherFileName) {\n        return null;\n      }\n\n      if (this.fileName === this.otherFileName) {\n        return this.fileAttributeEqualVariant;\n      }\n\n      return this.fileAttributeNotEqualVariant;\n    },\n    fileSizeVariant() { return this.getVariantForNumericalValue(this.getFileSize); },\n    initialPaddingVariant() { return this.getVariantForNumericalValue(this.getInitialPadding); },\n    remainingSaveSizeVariant() { return this.getVariantForNumericalValue(this.getRemainingSaveSize); },\n  },\n  methods: {\n    getFileSize(fileData) { return fileData ? fileData.byteLength : 0; },\n    getInitialPadding(fileData) { return fileData ? PaddingUtil.getPadFromStartValueAndCount(fileData).count : 0; },\n    getRemainingSaveSize(fileData) { return this.getFileSize(fileData) - this.getInitialPadding(fileData); },\n    getVariantForNumericalValue(getter) {\n      if (!this.fileData || !this.otherFileData) {\n        return null;\n      }\n\n      if (getter(this.fileData) === getter(this.otherFileData)) {\n        return this.fileAttributeEqualVariant;\n      }\n\n      return this.fileAttributeNotEqualVariant;\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/FileList.vue",
    "content": "<template>\n  <b-collapse appear :visible=\"display\">\n    <b-alert variant=\"info\" :show=\"(this.files !== null) && (this.files.length === 0) && this.showMessageWhenEmpty\">\n      No saves found in file\n    </b-alert>\n    <div v-show=\"(this.files !== null) && (this.files.length > 0)\">\n      <b-form-group v-slot=\"{ ariaDescribedby }\">\n        <b-form-radio-group\n          v-model=\"valueLocal\"\n          :options=\"options\"\n          :aria-describedby=\"ariaDescribedby\"\n          buttons\n          stacked\n          button-variant=\"outline-info\"\n          class=\"radio-buttons\"\n        />\n      </b-form-group>\n    </div>\n  </b-collapse>\n</template>\n\n<style scoped>\n\n.radio-buttons {\n  width: 100%;\n}\n\n</style>\n\n<script>\n\nexport default {\n  name: 'FileList',\n  props: {\n    files: {\n      type: Array,\n      default() {\n        return null;\n      },\n    },\n    display: {\n      type: Boolean,\n      default: false,\n    },\n    showMessageWhenEmpty: {\n      type: Boolean,\n      default: true,\n    },\n    value: {\n      type: Number,\n      default: null,\n    },\n    enabled: {\n      type: Boolean,\n      default: true,\n    },\n  },\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  computed: {\n    options() {\n      if (this.files === null) {\n        return null;\n      }\n\n      const optionsEnabled = this.enabled;\n      return this.files.map((f, i) => {\n        const item = {\n          value: i,\n          disabled: !optionsEnabled,\n        };\n\n        switch (f.displayColour) {\n          case 'red': {\n            item.html = `<div style=\"background-color:darksalmon;color:black\">${f.displayText}</div>`;\n            break;\n          }\n\n          case 'green': {\n            item.html = `<div style=\"background-color:lightgreen;color:black\">${f.displayText}</div>`;\n            break;\n          }\n\n          default: {\n            item.text = f.displayText;\n            break;\n          }\n        }\n\n        return item;\n      });\n    },\n    valueLocal: {\n      get() { return this.value; },\n      set(newValue) { this.$emit('change', newValue); },\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/FileReader.vue",
    "content": "<template>\n  <b-form-file\n    @input=\"loadFile\"\n    v-model=\"file\"\n    class=\"text-left\"\n    :placeholder=\"this.placeholderText\"\n    :accept=\"this.acceptExtension\"\n    :multiple=\"this.allowMultipleFiles\"\n    ref=\"bFormFile\"\n  />\n</template>\n\n<script>\nexport default {\n  props: {\n    placeholderText: {\n      type: String,\n      default: '',\n    },\n    acceptExtension: {\n      type: String,\n      default: '',\n    },\n    allowMultipleFiles: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  data() {\n    return {\n      file: null,\n    };\n  },\n  computed: {\n    userSelectedSomething() {\n      return this.allowMultipleFiles ? this.file.length > 0 : this.file !== null; // model is [] or null if user cancels the dialog box, depending on whether multiple is set\n    },\n  },\n  methods: {\n    reset() {\n      this.$refs.bFormFile.reset();\n    },\n    // FileReader has a bit of a nonstandard interface, so wrap it in a Promise\n    // https://stackoverflow.com/a/46568146\n    makeReadFilePromise(file) {\n      return new Promise((resolve, reject) => {\n        const fr = new FileReader();\n        fr.onload = () => {\n          resolve(fr.result);\n        };\n        fr.onerror = reject;\n        fr.readAsArrayBuffer(file);\n      });\n    },\n    async loadFile() {\n      if (this.userSelectedSomething) {\n        if (this.allowMultipleFiles) {\n          const arrayBuffers = await Promise.all(this.file.map((f) => this.makeReadFilePromise(f)));\n\n          this.$emit('load', this.file.map((f, i) => ({ filename: f.name, arrayBuffer: arrayBuffers[i] })));\n        } else {\n          const reader = new FileReader();\n\n          reader.onload = (e) => this.$emit('load', { filename: this.file.name, arrayBuffer: e.target.result });\n          reader.readAsArrayBuffer(this.file);\n        }\n      }\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/FileSize.vue",
    "content": "<template>\n  <b-collapse appear id=\"id\" :visible=\"display\">\n    <b-list-group>\n      <b-list-group-item :variant=\"this.variant\" class=\"d-flex justify-content-between align-items-center\">\n        <div>File size:</div><div>{{ fileSize }} bytes</div>\n      </b-list-group-item>\n    </b-list-group>\n  </b-collapse>\n</template>\n\n<style scoped>\n\n</style>\n\n<script>\n\nexport default {\n  name: 'FileSize',\n  props: {\n    fileData: null,\n    variant: null,\n    id: null,\n    display: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  computed: {\n    fileSize() { return this.fileData ? this.fileData.byteLength : 0; },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/FlashCartType.vue",
    "content": "<template>\n    <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-model=\"flashCartType\"\n            v-on:input=\"changeFlashCartType()\"\n            :options=\"flashCartTypes\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"Select the type of flash cart that you're using.\"\n            :id=\"`${this.id}-flash-cart-type`\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n    <div v-if=\"(this.flashCartType !== null) && (this.platformTypes[this.flashCartType].length > 1)\">\n      <b-row no-gutters align-h=\"start\" align-v=\"center\">\n        <b-col cols=11 sm=12>\n          <div>\n            <b-form-select\n              v-model=\"platformType\"\n              v-on:input=\"$emit('input', $event)\"\n              :options=\"this.platformTypes[this.flashCartType]\"\n              :disabled=\"disabled\"\n            />\n            <help-button\n              popover-text=\"Select the type of game that the save is for.\"\n              :id=\"`${this.id}-platform-type`\"\n              class=\"help-button\"\n            />\n          </div>\n        </b-col>\n      </b-row>\n    </div>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n\n  .text-label {\n    padding-left: 0.75em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'FlashCartType',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  methods: {\n    changeFlashCartType() {\n      if (this.flashCartType !== null) {\n        if (this.platformTypes[this.flashCartType].length === 1) {\n          this.platformType = this.platformTypes[this.flashCartType][0].value;\n          this.$emit('input', this.platformType); // The second dropdown is invisible, so no events will be emitted from it because nothing will be selected\n        } else {\n          this.platformType = null; // If > 1 item in the list, then display the \"Choose game type\" option\n        }\n      } else {\n        this.platformType = null;\n      }\n    },\n  },\n  data() {\n    return {\n      flashCartType: null,\n      platformType: null,\n      flashCartTypes: [\n        { value: null, text: 'Choose flash cart type', disabled: true },\n        { value: 'NES', text: 'NES cart' },\n        { value: 'SNES', text: 'SNES cart' },\n        { value: 'GB', text: 'Gameboy/Gameboy Color cart' },\n        { value: 'GBA', text: 'Gameboy Advance cart' },\n        { value: 'GenesisEverdrive', text: 'Genesis cart (Everdrive)' },\n        { value: 'GenesisMegaSD', text: 'Genesis cart (Mega SD)' },\n        { value: 'N64', text: 'Nintendo 64 cart' },\n        { value: 'PCE', text: 'TurboGrafx-16/PC Engine cart' },\n        { value: 'GG', text: 'Game Gear cart' },\n        { value: 'SMS', text: 'Master System/Mark III cart' },\n      ],\n\n      platformTypes: {\n        NES: [\n          { value: 'FlashCart-NES', text: 'NES game' },\n        ],\n        SNES: [\n          { value: null, text: 'Choose game type', disabled: true },\n          { value: 'FlashCart-SNES', text: 'SNES game' },\n          { value: 'FlashCart-SuperGameBoy', text: 'Gameboy game' },\n        ],\n        GB: [\n          { value: 'FlashCart-GB', text: 'Gameboy/Gameboy Color game' },\n        ],\n        GBA: [\n          { value: null, text: 'Choose game type', disabled: true },\n          { value: 'FlashCart-GBA', text: 'Gameboy Advance game' },\n          { value: 'FlashCart-GoombaEmulator', text: 'GB/GBC game (Goomba emulator)' },\n          { value: 'FlashCart-PocketNesEmulator', text: 'NES game (PocketNES emulator)' },\n          { value: 'FlashCart-SMSAdvanceEmulator', text: 'SMS game (SMSAdvance emulator)' },\n        ],\n        GenesisEverdrive: [\n          { value: null, text: 'Choose game type', disabled: true },\n          { value: 'FlashCart-GenesisEverdrive', text: 'Genesis game' },\n          { value: 'FlashCart-SegaCDGenesisEverdrive', text: 'Sega CD game' },\n          { value: 'FlashCart-SMSGenesisEverdrive', text: 'SMS game' },\n          { value: 'FlashCart-32XGenesisEverdrive', text: '32X game' },\n          { value: 'FlashCart-NESGenesisEverdrive', text: 'NES game' },\n        ],\n        GenesisMegaSD: [\n          { value: null, text: 'Choose game type', disabled: true },\n          { value: 'FlashCart-GenesisMegaSD', text: 'Genesis game' },\n          { value: 'FlashCart-SegaCDMegaSD', text: 'Sega CD game' },\n          { value: 'FlashCart-SMSGenesisMegaSD', text: 'SMS game' },\n          { value: 'FlashCart-32XGenesisMegaSD', text: '32X game' },\n        ],\n        N64: [\n          { value: null, text: 'Choose game type', disabled: true },\n          { value: 'FlashCart-N64', text: 'Nintendo 64 game' },\n          { value: 'FlashCart-NESN64', text: 'NES game' },\n          { value: 'FlashCart-Neon64Emulator', text: 'NES game (Neon64 emulator)' },\n          { value: 'FlashCart-GB64Emulator', text: 'GB/GBC game (GB64 emulator)' },\n        ],\n        PCE: [\n          { value: 'FlashCart-PCE', text: 'TurboGrafx-16/PC Engine game' },\n        ],\n        GG: [\n          { value: 'FlashCart-GG', text: 'Game Gear game' },\n        ],\n        SMS: [\n          { value: 'FlashCart-SMS', text: 'Master System/Mark III game' },\n        ],\n      },\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/GameCubeEncodingSelector.vue",
    "content": "<template>\n  <b-row no-gutters align-h=\"start\" align-v=\"center\">\n    <b-col cols=11 sm=12>\n      <div>\n        <b-form-select\n          v-bind:value=\"value\"\n          v-on:input=\"$emit('input', $event)\"\n          :options=\"options\"\n        />\n        <help-button\n          popover-text=\"Games from Japan and other Asian countries require a memory card created for Japan. All other games require it created for the Americas/Europe/Australia.\n            It is not possible to add saves for games from both regions to the same memory card.\"\n          :id=\"this.id\"\n          class=\"help-button\"\n        />\n      </div>\n    </b-col>\n  </b-row>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\n\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'GameCubeEncodingSelector',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    asciiText: {\n      type: String,\n      default: 'Americas/Europe/Australia',\n    },\n    shiftJisText: {\n      type: String,\n      default: 'Japan/Korea',\n    },\n    id: {\n      type: String,\n      default: null,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  computed: {\n    valueLocal: {\n      get() { return this.value; },\n      set(newValue) { this.$emit('change', newValue); },\n    },\n  },\n  data() {\n    return {\n      options: [\n        { value: 'US-ASCII', text: this.asciiText },\n        { value: 'shift-jis', text: this.shiftJisText },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/HeaderFooter.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            :popover-text=\"`Choose whether to ${this.firstWord.toLowerCase()} the header or footer`\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'HeaderFooter',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    firstWord: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: 'header', text: `${this.firstWord} header` },\n        { value: 'footer', text: `${this.firstWord} footer` },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/HelpButton.vue",
    "content": "<template>\n  <b-col cols=1>\n    <!-- Note that we choose a button because we need to render out an <a> element in order for the focus trigger to work for mobile:\n    https://bootstrap-vue.org/docs/components/popover#caveats-with-focus-trigger-on-button-elements -->\n    <b-button variant=\"link\" :id=\"`${this.id}-popover-target`\" href=\"#\" tabindex=\"0\">\n      <font-awesome-icon :icon=\"['fas', 'question-circle']\"/>\n    </b-button>\n    <b-popover :target=\"`${this.id}-popover-target`\" triggers=\"focus hover\" placement=\"bottom\">\n      {{this.popoverText}}\n    </b-popover>\n  </b-col>\n</template>\n\n<script>\nimport { BPopover } from 'bootstrap-vue';\n\nexport default {\n  name: 'HelpButton',\n  props: [\n    'popoverText',\n    'id',\n  ],\n  components: {\n    BPopover,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/IndividualSavesOrMemoryCardSelector.vue",
    "content": "<template>\n  <b-form-group v-slot=\"{ ariaDescribedby }\">\n    <b-form-radio-group\n      v-model=\"valueLocal\"\n      :options=\"options\"\n      :aria-describedby=\"ariaDescribedby\"\n      buttons\n        button-variant=\"outline-info\"\n      class=\"radio-buttons\"\n    />\n  </b-form-group>\n</template>\n\n<style scoped>\n\n.radio-buttons {\n  width: 100%;\n}\n\n</style>\n\n<script>\n\nexport default {\n  name: 'IndividualSavesOrMemoryCardSelector',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    individualSavesText: {\n      type: String,\n      default: 'Individual saves',\n    },\n    memoryCardText: {\n      type: String,\n      default: 'Memory card',\n    },\n  },\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  computed: {\n    valueLocal: {\n      get() { return this.value; },\n      set(newValue) { this.$emit('change', newValue); },\n    },\n  },\n  data() {\n    return {\n      options: [\n        { value: 'individual-saves', text: this.individualSavesText },\n        { value: 'memory-card', text: this.memoryCardText },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/InputFile.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters>\n      <b-col :cols=\"this.leaveRoomForHelpIcon ? 11 : 12\" sm=\"12\">\n        <div>\n          <file-reader\n            @load=\"$emit('load', $event)\"\n            :placeholderText=\"this.placeholderText\"\n            :acceptExtension=\"this.acceptExtension\"\n            :allowMultipleFiles=\"this.allowMultipleFiles\"\n            ref=\"fileReader\"\n          />\n          <help-button\n            v-if=\"this.helpText !== null\"\n            :popover-text=\"this.helpText\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"center\">\n      <b-col cols=12>\n        <b-alert variant=\"danger\" :show=\"this.errorMessage !== null\">\n          {{this.errorMessage}}\n        </b-alert>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n\n.help-button {\n  position: absolute;\n  right: -1.2em;\n  top: 0em;\n}\n\n</style>\n\n<script>\nimport FileReader from './FileReader.vue';\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'InputFile',\n  components: {\n    FileReader,\n    HelpButton,\n  },\n  props: {\n    errorMessage: {\n      type: String,\n      default: null,\n    },\n    placeholderText: String,\n    helpText: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    acceptExtension: {\n      type: String,\n      default: null,\n    },\n    leaveRoomForHelpIcon: Boolean,\n    allowMultipleFiles: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  methods: {\n    reset() {\n      this.$refs.fileReader.reset();\n    },\n  },\n  data() {\n    return {\n\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/InputNumber.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters>\n      <b-col v-if=\"this.labelText !== null\" cols=\"5\" sm=\"4\" align-self=\"center\">\n        <!-- Is this a bug? Not sure why this lint rule fires here: the <label> tag has a \"for\" set, and it matches the <b-form-input>'s \"id\" below -->\n        <!-- eslint-disable-next-line vuejs-accessibility/label-has-for -->\n        <label :for=\"this.id\" class=\"label\">{{ labelText }}</label>\n      </b-col>\n      <b-col :cols=\"(this.labelText !== null) ? 6 : 11\" :sm=\"(this.labelText !== null) ? 8 : 12\">\n        <div>\n          <b-form-input\n            v-on:input=\"checkInput($event)\"\n            :placeholder=\"this.placeholderText\"\n            :state=\"this.isValid\"\n            :id=\"this.id\"\n            v-model=\"value\"\n          />\n          <help-button\n            v-if=\"this.helpText !== null\"\n            :popover-text=\"this.helpText\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"center\">\n      <b-col cols=12>\n        <b-alert variant=\"danger\" :show=\"this.errorMessage !== null\">\n          {{this.errorMessage}}\n        </b-alert>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n\n::placeholder {\n  color: #495057; /* bootstrap's $gray-700. Otherwise it doesn't match the placeholder color for b-form-file (and b-form-select) */\n}\n\n.help-button {\n  position: absolute;\n  right: -1.2em;\n  top: 0em;\n}\n\n.label {\n  position: absolute;\n  top: -0.77em;\n  left: 0.8em;\n}\n\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nconst DECIMAL_REGEX = /^[0-9]+$/;\nconst HEXADECIMAL_REGEX = /^[0-9a-f]+$/;\n\nexport default {\n  name: 'InputNumber',\n  components: {\n    HelpButton,\n  },\n  props: {\n    errorMessage: {\n      type: String,\n      default: null,\n    },\n    labelText: {\n      type: String,\n      default: null,\n    },\n    placeholderText: {\n      type: String,\n      default: null,\n    },\n    helpText: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    leaveRoomForHelpIcon: Boolean,\n  },\n  data() {\n    return {\n      isValid: null,\n      value: null,\n    };\n  },\n  methods: {\n    reset() {\n      this.value = null;\n      this.isValid = null;\n    },\n    checkInput(event) {\n      let userInput = event.trim();\n\n      if (userInput.length === 0) {\n        this.isValid = null;\n        this.$emit('input', null);\n      } else if (userInput.startsWith('0x')) {\n        userInput = userInput.substring(2);\n\n        if (userInput.match(HEXADECIMAL_REGEX)) {\n          this.isValid = null;\n          this.$emit('input', parseInt(userInput, 16));\n        } else {\n          this.isValid = false;\n          this.$emit('input', null);\n        }\n      } else if (userInput.match(DECIMAL_REGEX)) {\n        this.isValid = null;\n        this.$emit('input', parseInt(userInput, 10));\n      } else {\n        this.isValid = false;\n        this.$emit('input', null);\n      }\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/MemoryCardSelector.vue",
    "content": "<template>\n  <b-form-group v-slot=\"{ ariaDescribedby }\">\n    <b-form-radio-group\n      v-model=\"valueLocal\"\n      :options=\"options\"\n      :aria-describedby=\"ariaDescribedby\"\n      buttons\n        button-variant=\"outline-info\"\n      class=\"radio-buttons\"\n    />\n  </b-form-group>\n</template>\n\n<style scoped>\n\n.radio-buttons {\n  width: 100%;\n}\n\n</style>\n\n<script>\n\nexport default {\n  name: 'MemoryCardSelector',\n  props: {\n    value: {\n      type: Number,\n      default: null,\n    },\n  },\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  computed: {\n    valueLocal: {\n      get() { return this.value; },\n      set(newValue) { this.$emit('change', newValue); },\n    },\n  },\n  data() {\n    return {\n      options: [\n        { value: 0, text: 'Memory card 1' },\n        { value: 1, text: 'Memory card 2' },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/MisterPlatform.vue",
    "content": "<template>\n    <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"Select the platform (NES, Super NES, Sega Genesis, etc.) that the save is for.\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'MisterPlatform',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      // Commented out ones are platforms we support elsewhere on the site but are currently available on the MiSTer\n\n      options: [\n        { value: null, text: 'Choose platform', disabled: true },\n        { value: 'Mister-NES', text: 'NES' },\n        { value: 'Mister-SNES', text: 'Super NES' },\n        { value: 'Mister-N64-Cart', text: 'Nintendo 64 (cartridge)' },\n        { value: 'Mister-N64-Mempack', text: 'Nintendo 64 (controller pak)' },\n        // { value: 'Mister-GCN', text: 'GameCube', disabled: true }, // MiSTer hardware not powerful enough\n        { value: 'Mister-GB', text: 'Game Boy/Game Boy Color' },\n        { value: 'Mister-GBA', text: 'Game Boy Advance' },\n        { value: 'Mister-GG', text: 'Game Gear' },\n        { value: 'Mister-SMS', text: 'Sega Master System' },\n        { value: 'Mister-MD', text: 'Sega Genesis/Mega Drive' },\n        { value: 'Mister-MCD', text: 'Sega CD/Mega CD' },\n        { value: 'Mister-SAT', text: 'Sega Saturn' },\n        // { value: 'Mister-32X', text: 'Sega 32X', disabled: true }, // Core currently does not support saving: https://github.com/MiSTer-devel/S32X_MiSTer\n        // { value: 'Mister-DC', text: 'Dreamcast', disabled: true }, // MiSTer hardware not powerful enough\n        { value: 'Mister-PCE', text: 'Turbografx-16/PC Engine' },\n        { value: 'Mister-PS1', text: 'PlayStation 1' },\n        // { value: 'Mister-PS2', text: 'PlayStation 2', disabled: true }, // MiSTer hardware not powerful enough\n        { value: 'Mister-WS', text: 'WonderSwan/WonderSwan Color' },\n        // { value: 'Mister-AJ', text: 'Jaguar', disabled: true }, // Core is in early stages, saving may not be supported yet: https://github.com/MiSTer-devel/Jaguar_MiSTer\n        // { value: 'Mister-AL', text: 'Lynx', disabled: true }, // No commercial releases for Lynx with saving. A few homebrews do, but saving not implmented on the MiSTer core: https://github.com/MiSTer-devel/AtariLynx_MiSTer\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/NintendoSwitchOnlinePlatform.vue",
    "content": "<template>\n    <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"Select the platform (NES, Super NES, Sega Genesis, etc.) that the save is for.\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'NintendoSwitchOnlinePlatform',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: null, text: 'Choose platform', disabled: true },\n        { value: 'NSO-NES', text: 'NES' },\n        { value: 'NSO-SNES', text: 'Super NES' },\n        { value: 'NSO-GB', text: 'Game Boy/Game Boy Color' },\n        { value: 'NSO-GBA', text: 'Game Boy Advance' },\n        { value: 'NSO-MD', text: 'Sega Genesis/Mega Drive' },\n        { value: 'NSO-N64', text: 'Nintendo 64' },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/OnlineEmulatorPlatform.vue",
    "content": "<template>\n    <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"Select the platform (GBA, Super NES, etc.) that the save is for.\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'OnlineEmulatorPlatform',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: null, text: 'Choose platform', disabled: true },\n        { value: 'gb', text: 'Game Boy/Game Boy Color' },\n        { value: 'gba', text: 'Game Boy Advance' },\n        { value: 'snes', text: 'Super NES' },\n        { value: null, text: 'Please use the Contact/Discord page to suggest other platforms', disabled: true },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/OutputFilename.vue",
    "content": "<template>\n  <b-row no-gutters align-h=\"start\" align-v=\"center\">\n    <b-col :cols=\"this.leaveRoomForHelpIcon ? 11 : 12\" sm=\"12\">\n      <div>\n        <b-form-input\n          v-bind:value=\"value\"\n          v-on:input=\"$emit('input', $event)\"\n          :placeholder=\"this.placeholder\"\n          :disabled=\"this.disabled\"\n        />\n        <div v-if=\"this.helpText !== null\">\n          <help-button\n            :popover-text=\"this.helpText\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </div>\n    </b-col>\n  </b-row>\n</template>\n\n<style scoped>\n\n::placeholder {\n  color: #495057; /* bootstrap's $gray-700. Otherwise it doesn't match the placeholder color for b-form-file (and b-form-select) */\n}\n\n.help-button {\n  position: absolute;\n  right: -1.2em;\n  top: 0em;\n}\n\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'OutputFilename',\n  components: {\n    HelpButton,\n  },\n  props: {\n    value: {\n      type: String,\n      default: '',\n    },\n    placeholder: {\n      type: String,\n      default: 'Output filename',\n    },\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n    id: {\n      type: String,\n      default: null,\n    },\n    leaveRoomForHelpIcon: {\n      type: Boolean,\n      default: false,\n    },\n    helpText: {\n      type: String,\n      default: null,\n    },\n  },\n  data() {\n    return {\n\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/OutputFilesize.vue",
    "content": "<template>\n  <b-row no-gutters align-h=\"start\" align-v=\"center\">\n    <b-col cols=11 sm=12>\n      <div>\n        <b-form-select\n          v-bind:value=\"value\"\n          v-on:input=\"$emit('input', $event)\"\n          :options=\"options\"\n        />\n        <help-button\n          :popover-text=\"this.overrideHelpText !== null ? this.overrideHelpText :\n            'Some cartridges, flash carts, or emulators may not accept saves of a particular size for a particular game. \\\n            Try creating a test save with your cartridge, flash cart, or emulator to find what size it expects, then adjust the value here if necessary.'\"\n          :id=\"this.id\"\n          class=\"help-button\"\n        />\n      </div>\n    </b-col>\n  </b-row>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\nimport PlatformSaveSizes from '../save-formats/PlatformSaveSizes';\n\nexport default {\n  name: 'OutputFilesize',\n  props: {\n    value: {\n      type: Number,\n      default: null,\n    },\n    id: {\n      type: String,\n      default: null,\n    },\n    platform: {\n      type: String,\n      default: null,\n    },\n    valuesToRemove: {\n      type: Array,\n      default: () => [],\n    },\n    overrideHelpText: {\n      type: String,\n      default: null,\n    },\n    customFormatter: {\n      default: null,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  methods: {\n    getDropdownText(size) {\n      let kilobytesString = null;\n\n      switch (size) {\n        case 64: {\n          kilobytesString = '0.06';\n          break;\n        }\n\n        case 128: {\n          kilobytesString = '0.1';\n          break;\n        }\n\n        case 256: {\n          kilobytesString = '0.25';\n          break;\n        }\n\n        default: {\n          kilobytesString = size < 1024 ? (size / 1024).toFixed(1) : (size / 1024).toFixed(0);\n          break;\n        }\n      }\n\n      return `${kilobytesString}kB (${size} bytes)`;\n    },\n  },\n  computed: {\n    options() {\n      if (this.platform === null) {\n        return [];\n      }\n\n      const formatText = (this.customFormatter !== null) ? this.customFormatter : this.getDropdownText;\n\n      const sizes = PlatformSaveSizes[this.platform].filter((s) => this.valuesToRemove.indexOf(s) < 0);\n      return [{ value: null, text: 'Output file size', disabled: true }].concat(sizes.map((s) => ({ value: s, text: formatText(s) })));\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/PadFillByte.vue",
    "content": "<template>\n    <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"The value to fill into the extra bytes when increasing the size of the file. Not needed if decreasing the size of the file. If unsure choose 0x00\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'PadFillByte',\n  props: {\n    value: {\n      type: Number,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: 0x00, text: 'Fill with 0x00' },\n        { value: 0xFF, text: 'Fill with 0xFF' },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/RegionViewer.vue",
    "content": "<template>\n  <b-collapse appear id=\"id\" :visible=\"this.regionName !== null\">\n  <b-list-group>\n    <b-list-group-item class=\"d-flex justify-content-between align-items-center align-padding\">\n      <div>Region:</div><div>{{ regionName }}</div>\n    </b-list-group-item>\n  </b-list-group>\n  </b-collapse>\n</template>\n\n<style scoped>\n  /* Align the word \"Region\" with the text in the dropdown above */\n  .align-padding {\n    padding-left: 0.7em;\n    padding-right: 0.7em;\n  }\n</style>\n\n<script>\n\nexport default {\n  name: 'RegionViewer',\n  props: {\n    regionName: {\n      type: String,\n      default: null,\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/Retron5EraseSave.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5 align-self=\"center\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Erase save using Retron 5</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <input-file\n            @load=\"readRetron5SaveData($event)\"\n            :errorMessage=\"this.errorMessage\"\n            placeholderText=\"Choose a file to convert (*.sav)\"\n            acceptExtension=\".sav\"\n            :leaveRoomForHelpIcon=\"false\"\n          />\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"retron5-erase-save-convert-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.retron5SaveData || !outputFilename\"\n            @click=\"convertFile()\"\n          >\n          Convert!\n          </b-button>\n        </b-col>\n      </b-row>\n      <hr/>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Instructions:\n          </div>\n          <b-row class=\"justify-content-md-left, help\" align-h=\"center\">\n            <b-col sm=12 md=6>\n              <div class=\"help, text-left\">\n                <ol>\n                  <li>Use the Retron 5 to copy the save from the cartridge to an SD card</li>\n                  <li>Make a backup copy of the save from the SD card if you wish</li>\n                  <li>Convert the save from the SD card using this tool</li>\n                  <li>Overwrite the save on the SD card with the new one you just created</li>\n                  <li>Use the Retron 5 to copy the new save from the SD card to the cartridge</li>\n                </ol>\n              </div>\n            </b-col>\n          </b-row>\n          <div class=\"help\">\n            Help: how do I&nbsp;<b-link href=\"https://projectpokemon.org/home/tutorials/save-editing/managing-gb-gbc-saves/using-the-retron-5-r53/\">copy files to and from my Retron 5</b-link>?\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.retron5-erase-save-convert-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\nimport SaveFilesUtil from '../util/SaveFiles';\nimport Util from '../util/util';\nimport InputFile from './InputFile.vue';\nimport Retron5SaveData from '../save-formats/Retron5/Retron5';\n\nexport default {\n  name: 'Retron5EraseSave',\n  data() {\n    return {\n      retron5SaveData: null,\n      errorMessage: null,\n      outputFilename: null,\n    };\n  },\n  components: {\n    InputFile,\n  },\n  methods: {\n    readRetron5SaveData(event) {\n      this.errorMessage = null;\n      this.outputFilename = null;\n      try {\n        this.retron5SaveData = Retron5SaveData.createFromRetron5Data(event.arrayBuffer);\n        this.outputFilename = Util.getFilename(event.filename);\n      } catch (e) {\n        this.errorMessage = e.message;\n        this.retron5SaveData = null;\n      }\n    },\n    convertFile() {\n      const outputRawSave = SaveFilesUtil.getEraseCartridgeSave(this.retron5SaveData.getRawArrayBuffer());\n\n      const outputArrayBuffer = Retron5SaveData.createFromEmulatorData(outputRawSave).getRetron5ArrayBuffer();\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/SegaCdSaveTypeSelector.vue",
    "content": "<template>\n  <b-form-group v-slot=\"{ ariaDescribedby }\">\n    <b-form-radio-group\n      v-model=\"valueLocal\"\n      :options=\"options\"\n      :aria-describedby=\"ariaDescribedby\"\n      buttons\n        button-variant=\"outline-info\"\n      class=\"radio-buttons\"\n    />\n  </b-form-group>\n</template>\n\n<style scoped>\n\n.radio-buttons {\n  width: 100%;\n}\n\n</style>\n\n<script>\n\nexport default {\n  name: 'SegaCdSaveTypeSelector',\n  props: {\n    value: {\n      type: String,\n      default: null,\n    },\n    internalMemoryText: {\n      type: String,\n      default: 'Internal memory',\n    },\n    ramCartText: {\n      type: String,\n      default: 'RAM cartridge',\n    },\n  },\n  model: {\n    prop: 'value',\n    event: 'change',\n  },\n  computed: {\n    valueLocal: {\n      get() { return this.value; },\n      set(newValue) { this.$emit('change', newValue); },\n    },\n  },\n  watch: {\n    ramCartText: {\n      immediate: true,\n      handler(newValue) {\n        this.options = [\n          { value: 'internal-memory', text: this.internalMemoryText },\n          { value: 'ram-cart', text: newValue },\n        ];\n      },\n    },\n  },\n  data() {\n    return {\n      options: null,\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TabAddHeaderFooter.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readExampleData($event)\"\n          placeholderText=\"Choose an example file\"\n          :leaveRoomForHelpIcon=\"true\"\n          help-text=\"Choose an example file from which to copy a header or footer. A header is extra information at the start of a file, and a footer is extra information at the end\"\n          ref=\"inputFileExample\"\n          id=\"inputFileExample\"\n          class=\"top-row\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <b-collapse appear id=\"id\" :visible=\"this.headerSize !== null\">\n          <b-list-group>\n            <b-list-group-item :variant=\"this.headerSize === 0 ? 'danger' : 'success'\" class=\"d-flex justify-content-between align-items-center\">\n              <div v-if=\"this.headerSize !== 0\">\n                Found a {{ headerSize }} byte potential header or footer\n              </div>\n              <div v-else>\n                No header or footer found\n              </div>\n            </b-list-group-item>\n          </b-list-group>\n        </b-collapse>\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <header-footer\n          v-model=\"headerFooter\"\n          first-word=\"Copy\"\n          id=\"headerFooterAdd\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readDestinationData($event)\"\n          placeholderText=\"Choose a file to convert\"\n          help-text=\"Choose a file to which to add the header or footer from the example file above\"\n          :leaveRoomForHelpIcon=\"true\"\n          ref=\"inputFileDestination\"\n          id=\"inputFileDestination\"\n        />\n      </b-col>\n    </b-row>\n    <b-row class=\"justify-content-md-center\" align-h=\"center\">\n      <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n        <b-button\n          class=\"utilities-advanced-add-header-footer-convert-button\"\n          variant=\"success\"\n          block\n          :disabled=\"(this.headerSize === null) || (this.headerSize === 0) || (this.destinationSaveData === null)\"\n          @click=\"removeHeaderFooter()\"\n        >\n        Convert!\n        </b-button>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.top-row {\n  margin-top: 1em;\n}\n\n.utilities-advanced-add-header-footer-convert-button {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\n\nimport InputFile from './InputFile.vue';\nimport HeaderFooter from './HeaderFooter.vue';\n\nimport Util from '../util/util';\nimport MathUtil from '../util/Math';\n\nexport default {\n  name: 'TabAddHeaderFooter',\n  components: {\n    InputFile,\n    HeaderFooter,\n  },\n  data() {\n    return {\n      exampleSaveData: null,\n      destinationSaveData: null,\n      headerSize: null,\n      headerFooter: 'header',\n      outputFilename: null,\n    };\n  },\n  methods: {\n    reset() {\n      this.exampleSaveData = null;\n      this.destinationSaveData = null;\n      this.headerSize = null;\n      this.headerFooter = 'header';\n      this.outputFilename = null;\n\n      this.$refs.inputFileExample.reset();\n      this.$refs.inputFileDestination.reset();\n    },\n    readExampleData(event) {\n      this.exampleSaveData = event.arrayBuffer;\n      this.headerSize = Math.max(this.exampleSaveData.byteLength - MathUtil.getNextSmallestPowerOf2(this.exampleSaveData.byteLength), 0);\n    },\n    readDestinationData(event) {\n      this.destinationSaveData = event.arrayBuffer;\n      this.outputFilename = `${Util.removeFilenameExtension(event.filename)} (converted)${Util.getExtension(event.filename)}`;\n    },\n    removeHeaderFooter() {\n      const outputArrayBuffer = (this.headerFooter === 'header')\n        ? Util.copyHeaderFromArrayBuffer(this.exampleSaveData, this.headerSize, this.destinationSaveData)\n        : Util.copyFooterFromArrayBuffer(this.exampleSaveData, this.headerSize, this.destinationSaveData);\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TabByteExpansion.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <byte-expand-contract\n          id=\"byte-expand-contract\"\n          class=\"top-row\"\n          v-model=\"byteExpandContractSelection\"\n          @input=\"changeByteExpandContract($event)\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readDataToByteExpandContract($event)\"\n          :errorMessage=\"this.errorMessage\"\n          placeholderText=\"Choose a file to convert\"\n          :leaveRoomForHelpIcon=\"true\"\n          ref=\"inputFile\"\n        />\n      </b-col>\n    </b-row>\n    <b-row class=\"justify-content-md-center\" align-h=\"center\">\n      <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n        <b-button\n          class=\"utilities-advanced-byte-expand-convert-button\"\n          variant=\"success\"\n          block\n          :disabled=\"!this.canByteExpandContract() || !this.outputFilename\"\n          @click=\"byteExpandContract()\"\n        >\n        Convert!\n        </b-button>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.top-row {\n  margin-top: 1em;\n}\n\n.utilities-advanced-byte-expand-convert-button {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\n\nimport ByteExpandContract from './ByteExpandContract.vue';\nimport InputFile from './InputFile.vue';\n\nimport Util from '../util/util';\n\nimport GenesisUtil from '../util/Genesis';\n\nexport default {\n  name: 'TabByteExpansion',\n  components: {\n    ByteExpandContract,\n    InputFile,\n  },\n  data() {\n    return {\n      saveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      byteExpandContractSelection: null,\n    };\n  },\n  methods: {\n    reset() {\n      this.saveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.byteExpandContractSelection = null;\n\n      this.$refs.inputFile.reset();\n    },\n    readDataToByteExpandContract(event) {\n      this.errorMessage = null;\n      this.outputFilename = null;\n      try {\n        this.saveData = event.arrayBuffer;\n        this.outputFilename = `${Util.removeFilenameExtension(event.filename)} (converted)${Util.getExtension(event.filename)}`;\n\n        this.checkByteExpandContract();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    changeByteExpandContract() {\n      this.errorMessage = null;\n      try {\n        this.checkByteExpandContract();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    byteExpandSelected() {\n      return ((this.byteExpandContractSelection !== null) && this.byteExpandContractSelection.startsWith('byte-expand'));\n    },\n    byteContractSelected() {\n      return ((this.byteExpandContractSelection !== null) && this.byteExpandContractSelection.startsWith('byte-contract'));\n    },\n    checkByteExpandContract() {\n      if (this.saveData !== null) {\n        if (this.byteExpandSelected() && GenesisUtil.isByteExpanded(this.saveData) && !GenesisUtil.isEmpty(this.saveData)) {\n          throw new Error('File is already byte expanded');\n        } else if (this.byteContractSelected() && !GenesisUtil.isByteExpanded(this.saveData)) { // If isByteExpanded returned false then we know the file is not empty\n          throw new Error('File is already byte contracted');\n        }\n      }\n    },\n    canByteExpandContract() {\n      if ((this.saveData !== null) && (this.byteExpandContract !== null)) {\n        try {\n          this.checkByteExpandContract();\n          return true;\n        } catch (e) {\n          return false;\n        }\n      }\n\n      return false;\n    },\n    byteExpandContract() {\n      let outputArrayBuffer = null;\n\n      switch (this.byteExpandContractSelection) {\n        case 'byte-expand-00': {\n          outputArrayBuffer = GenesisUtil.byteExpand(this.saveData, 0x00);\n          break;\n        }\n\n        case 'byte-expand-ff': {\n          outputArrayBuffer = GenesisUtil.byteExpand(this.saveData, 0xFF);\n          break;\n        }\n\n        case 'byte-expand-duplicate': {\n          outputArrayBuffer = GenesisUtil.byteExpand(this.saveData, GenesisUtil.FILL_BYTE_REPEAT);\n          break;\n        }\n\n        case 'byte-contract': {\n          outputArrayBuffer = GenesisUtil.byteCollapse(this.saveData);\n          break;\n        }\n\n        default: {\n          this.errorMessage = 'Unknown byte expand/contract option selected';\n          return;\n        }\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TabCompression.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <compression-type\n          id=\"compression-type\"\n          class=\"top-row\"\n          v-model=\"compressionType\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <compression-decompression\n          id=\"compression-decompression\"\n          v-model=\"compressionDecompression\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readDataToCompressDecompress($event)\"\n          :errorMessage=\"this.errorMessage\"\n          placeholderText=\"Choose a file to convert\"\n          :leaveRoomForHelpIcon=\"true\"\n          ref=\"inputFile\"\n        />\n      </b-col>\n    </b-row>\n    <b-row class=\"justify-content-md-center\" align-h=\"center\">\n      <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n        <b-button\n          class=\"utilities-advanced-compression-convert-button\"\n          variant=\"success\"\n          block\n          :disabled=\"!this.canCompressDecompress() || !this.outputFilename\"\n          @click=\"compressDecompressFile()\"\n        >\n        Convert!\n        </b-button>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.top-row {\n  margin-top: 1em;\n}\n.utilities-advanced-compression-convert-button {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\n\nimport CompressionType from './CompressionType.vue';\nimport CompressionDecompression from './CompressionDecompression.vue';\nimport InputFile from './InputFile.vue';\n\nimport Util from '../util/util';\n\nimport CompressionZlib from '../util/CompressionZlib';\nimport CompressionGzip from '../util/CompressionGzip';\nimport CompressionRzip from '../util/CompressionRzip';\nimport CompressionLzo from '../util/CompressionLzo';\n\nconst DEFAULT_COMPRESSION_TYPE = 'zlib'; // I think the most common use here will be decompressing retroarch files, which uses zlib\nconst DEFAULT_COMPRESSION_DECOMPRESSION = 'decompress';\n\nexport default {\n  name: 'TabCompression',\n  components: {\n    CompressionType,\n    CompressionDecompression,\n    InputFile,\n  },\n  data() {\n    return {\n      saveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      compressionType: DEFAULT_COMPRESSION_TYPE,\n      compressionDecompression: DEFAULT_COMPRESSION_DECOMPRESSION,\n    };\n  },\n  watch: {\n    compressionType() {\n      this.errorMessage = null;\n      try {\n        this.checkCompressDecompress();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    compressionDecompression() {\n      this.errorMessage = null;\n      try {\n        this.checkCompressDecompress();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n  },\n  methods: {\n    reset() {\n      this.saveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.compressionType = DEFAULT_COMPRESSION_TYPE;\n      this.compressionDecompression = DEFAULT_COMPRESSION_DECOMPRESSION;\n\n      this.$refs.inputFile.reset();\n    },\n    readDataToCompressDecompress(event) {\n      this.errorMessage = null;\n      this.outputFilename = null;\n      try {\n        this.saveData = event.arrayBuffer;\n        this.outputFilename = `${Util.removeFilenameExtension(event.filename)} (converted)${Util.getExtension(event.filename)}`;\n\n        this.checkCompressDecompress();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    getCompressedDecompressedData() {\n      if (this.saveData !== null) {\n        switch (this.compressionDecompression) {\n          case 'compress': {\n            switch (this.compressionType) {\n              case 'zlib': {\n                try {\n                  return CompressionZlib.compress(this.saveData);\n                } catch (e) {\n                  throw new Error('Unable to compress the specified data using zlib compression');\n                }\n              }\n\n              case 'gzip': {\n                try {\n                  return CompressionGzip.compress(this.saveData);\n                } catch (e) {\n                  throw new Error('Unable to compress the specified data using gzip compression');\n                }\n              }\n\n              case 'rzip': {\n                try {\n                  return CompressionRzip.compress(this.saveData);\n                } catch (e) {\n                  throw new Error('Unable to compress the specified data using rzip compression');\n                }\n              }\n\n              case 'lzo': {\n                try {\n                  return CompressionLzo.compress(this.saveData);\n                } catch (e) {\n                  throw new Error('Unable to compress the specified data using LZO compression');\n                }\n              }\n\n              default: {\n                throw new Error('Unknown compression type');\n              }\n            }\n          }\n\n          case 'decompress': {\n            switch (this.compressionType) {\n              case 'zlib': {\n                try {\n                  return CompressionZlib.decompress(this.saveData);\n                } catch (e) {\n                  throw new Error('Unable to decompress the specified data using zlib compression');\n                }\n              }\n\n              case 'gzip': {\n                try {\n                  return CompressionGzip.decompress(this.saveData);\n                } catch (e) {\n                  throw new Error('Unable to decompress the specified data using gzip compression');\n                }\n              }\n\n              case 'rzip': {\n                try {\n                  return CompressionRzip.decompress(this.saveData);\n                } catch (e) {\n                  throw new Error('Unable to decompress the specified data using rzip compression');\n                }\n              }\n\n              case 'lzo': {\n                try {\n                  return CompressionLzo.decompress(this.saveData);\n                } catch (e) {\n                  throw new Error('Unable to decompress the specified data using LZO compression');\n                }\n              }\n\n              default: {\n                throw new Error('Unknown compression type');\n              }\n            }\n          }\n\n          default: {\n            throw new Error('Unknown compression/decompression selection');\n          }\n        }\n      }\n\n      throw new Error('No save data specified');\n    },\n    checkCompressDecompress() {\n      if (this.saveData !== null) {\n        // If this throws an Error, just let it through to the caller\n        this.getCompressedDecompressedData();\n      }\n    },\n    canCompressDecompress() {\n      try {\n        this.checkCompressDecompress();\n        return true;\n      } catch (e) {\n        return false;\n      }\n    },\n    compressDecompressFile() {\n      const outputArrayBuffer = this.getCompressedDecompressedData();\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TabEndianSwap.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <endianness-word-size\n          id=\"endianness-word-size\"\n          class=\"top-row\"\n          v-model=\"endianWordSize\"\n          @input=\"changeEndianWordSize($event)\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readDataToEndianSwap($event)\"\n          :errorMessage=\"this.errorMessage\"\n          placeholderText=\"Choose a file to convert\"\n          :leaveRoomForHelpIcon=\"true\"\n          ref=\"inputFile\"\n        />\n      </b-col>\n    </b-row>\n    <b-row class=\"justify-content-md-center\" align-h=\"center\">\n      <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n        <b-button\n          class=\"utilities-advanced-endian-swap-convert-button\"\n          variant=\"success\"\n          block\n          :disabled=\"!this.canEndianSwap() || !this.outputFilename\"\n          @click=\"endianSwapData()\"\n        >\n        Convert!\n        </b-button>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.top-row {\n  margin-top: 1em;\n}\n\n.utilities-advanced-endian-swap-convert-button {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\n\nimport EndiannessWordSize from './EndiannessWordSize.vue';\nimport InputFile from './InputFile.vue';\n\nimport Util from '../util/util';\n\nimport EndianUtil from '../util/Endian';\n\nexport default {\n  name: 'TabEndianSwap',\n  components: {\n    EndiannessWordSize,\n    InputFile,\n  },\n  data() {\n    return {\n      saveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      endianWordSize: null,\n    };\n  },\n  methods: {\n    reset() {\n      this.saveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.endianWordSize = null;\n\n      this.$refs.inputFile.reset();\n    },\n    readDataToEndianSwap(event) {\n      this.errorMessage = null;\n      this.outputFilename = null;\n      try {\n        this.saveData = event.arrayBuffer;\n        this.outputFilename = `${Util.removeFilenameExtension(event.filename)} (converted)${Util.getExtension(event.filename)}`;\n\n        this.checkEndianWordSize();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    changeEndianWordSize() {\n      this.errorMessage = null;\n      try {\n        this.checkEndianWordSize();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    checkEndianWordSize() {\n      if ((this.saveData !== null) && (this.endianWordSize !== null) && ((this.saveData.byteLength % this.endianWordSize) !== 0)) {\n        throw new Error(`File size must be a multiple of ${this.endianWordSize}. However, file size is ${this.saveData.byteLength} bytes.`);\n      }\n    },\n    canEndianSwap() {\n      return ((this.saveData !== null) && (this.endianWordSize !== null) && ((this.saveData.byteLength % this.endianWordSize) === 0));\n    },\n    endianSwapData() {\n      const outputArrayBuffer = EndianUtil.swap(this.saveData, this.endianWordSize);\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TabFileCompare.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readData1($event)\"\n          placeholderText=\"Choose first file to compare\"\n          :leaveRoomForHelpIcon=\"true\"\n          ref=\"inputFile1\"\n          class=\"top-row\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readData2($event)\"\n          placeholderText=\"Choose second file to compare\"\n          :leaveRoomForHelpIcon=\"true\"\n          ref=\"inputFile2\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <b-collapse appear id=\"id\" :visible=\"showComparison\">\n          <b-list-group>\n            <b-list-group-item :variant=\"this.variant\" class=\"d-flex justify-content-between align-items-center\">\n              <div v-if=\"this.filesAreSame\">\n                Files contents are identical\n              </div>\n              <div v-else>\n                Files contents are different\n              </div>\n            </b-list-group-item>\n          </b-list-group>\n        </b-collapse>\n      </b-col>\n    </b-row>\n    <b-row class=\"justify-content-md-center\" align-h=\"center\">\n      <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n        <b-button\n          class=\"utilities-advanced-file-compare-convert-button\"\n          variant=\"success\"\n          block\n          :disabled=\"!hasAllSaveData\"\n          @click=\"compareFiles()\"\n        >\n        Compare!\n        </b-button>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.top-row {\n  margin-top: 1em;\n}\n\n.utilities-advanced-file-compare-convert-button {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport InputFile from './InputFile.vue';\n\nimport Util from '../util/util';\n\nexport default {\n  name: 'TabFileCompare',\n  components: {\n    InputFile,\n  },\n  data() {\n    return {\n      saveData1: null,\n      saveData2: null,\n      filesAreSame: false,\n      showComparison: false,\n    };\n  },\n  computed: {\n    hasAllSaveData() { return ((this.saveData1 !== null) && (this.saveData2 !== null)); },\n    variant() { return this.filesAreSame ? 'success' : 'danger'; },\n  },\n  methods: {\n    reset() {\n      this.saveData1 = null;\n      this.saveData2 = null;\n      this.filesAreSame = false;\n      this.showComparison = false;\n\n      this.$refs.inputFile1.reset();\n      this.$refs.inputFile2.reset();\n    },\n    readData1(event) {\n      this.saveData1 = event.arrayBuffer;\n    },\n    readData2(event) {\n      this.saveData2 = event.arrayBuffer;\n    },\n    compareFiles() {\n      if (this.hasAllSaveData) {\n        this.filesAreSame = Util.arrayBuffersEqual(this.saveData1, this.saveData2);\n\n        this.showComparison = true;\n      }\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TabRemoveHeaderFooter.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readData($event)\"\n          placeholderText=\"Choose a file to convert\"\n          :leaveRoomForHelpIcon=\"true\"\n          help-text=\"Choose a file from which to remove a header or footer. A header is extra information at the start of a file, and a footer is extra information at the end\"\n          ref=\"inputFile\"\n          id=\"inputFile\"\n          class=\"top-row\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <b-collapse appear id=\"id\" :visible=\"this.headerSize !== null\">\n          <b-list-group>\n            <b-list-group-item :variant=\"this.headerSize === 0 ? 'danger' : 'success'\" class=\"d-flex justify-content-between align-items-center\">\n              <div v-if=\"this.headerSize !== 0\">\n                Found a {{ headerSize }} byte potential header or footer\n              </div>\n              <div v-else>\n                No header or footer found\n              </div>\n            </b-list-group-item>\n          </b-list-group>\n        </b-collapse>\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <header-footer\n          v-model=\"headerFooter\"\n          first-word=\"Remove\"\n          id=\"headerFooterRemove\"\n        />\n      </b-col>\n    </b-row>\n    <b-row class=\"justify-content-md-center\" align-h=\"center\">\n      <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n        <b-button\n          class=\"utilities-advanced-remove-header-footer-convert-button\"\n          variant=\"success\"\n          block\n          :disabled=\"(this.headerSize === null) || (this.headerSize === 0)\"\n          @click=\"removeHeaderFooter()\"\n        >\n        Convert!\n        </b-button>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.top-row {\n  margin-top: 1em;\n}\n\n.utilities-advanced-remove-header-footer-convert-button {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\n\nimport InputFile from './InputFile.vue';\nimport HeaderFooter from './HeaderFooter.vue';\n\nimport Util from '../util/util';\nimport MathUtil from '../util/Math';\nimport PaddingUtil from '../util/Padding';\n\nexport default {\n  name: 'TabRemoveHeaderFooter',\n  components: {\n    InputFile,\n    HeaderFooter,\n  },\n  data() {\n    return {\n      saveData: null,\n      headerSize: null,\n      headerFooter: 'header',\n      outputFilename: null,\n    };\n  },\n  methods: {\n    reset() {\n      this.saveData = null;\n      this.headerSize = null;\n      this.headerFooter = 'header';\n      this.outputFilename = null;\n\n      this.$refs.inputFile.reset();\n    },\n    readData(event) {\n      this.saveData = event.arrayBuffer;\n      this.outputFilename = `${Util.removeFilenameExtension(event.filename)} (converted)${Util.getExtension(event.filename)}`;\n      this.headerSize = Math.max(this.saveData.byteLength - MathUtil.getNextSmallestPowerOf2(this.saveData.byteLength), 0);\n    },\n    removeHeaderFooter() {\n      const outputArrayBuffer = (this.headerFooter === 'header')\n        ? PaddingUtil.removePaddingFromStart(this.saveData, this.headerSize)\n        : PaddingUtil.removePaddingFromEnd(this.saveData, this.headerSize);\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TabResize.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          class=\"top-row\"\n          @load=\"readDataToResize($event)\"\n          :errorMessage=\"this.errorMessage\"\n          placeholderText=\"Choose a file to convert\"\n          :leaveRoomForHelpIcon=\"true\"\n          ref=\"inputFile\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <file-size\n          :display=\"this.saveData !== null\"\n          :fileData=\"this.saveData\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <output-filesize\n          v-model=\"newSize\"\n          platform=\"all\"\n          ref=\"outputFilesize\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <pad-fill-byte\n          id=\"pad-fill-byte\"\n          v-model=\"padFillByte\"\n          :disabled=\"!this.isIncreasingFileSize()\"\n        />\n      </b-col>\n    </b-row>\n    <b-row class=\"justify-content-md-center\" align-h=\"center\">\n      <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n        <b-button\n          class=\"utilities-advanced-resize-convert-button\"\n          variant=\"success\"\n          block\n          :disabled=\"!this.canResizeFile() || !this.outputFilename\"\n          @click=\"resizeFile()\"\n        >\n        Convert!\n        </b-button>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.top-row {\n  margin-top: 1em;\n}\n\n.utilities-advanced-resize-convert-button {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\n\nimport OutputFilesize from './OutputFilesize.vue';\nimport InputFile from './InputFile.vue';\nimport PadFillByte from './PadFillByte.vue';\nimport FileSize from './FileSize.vue';\n\nimport Util from '../util/util';\nimport SaveFilesUtil from '../util/SaveFiles';\n\nconst DEFAULT_PAD_FILL_BYTE = 0x00; // Most users won't have an opinion here, so set the default to be the simplest one (instead of 0xFF)\n\nexport default {\n  name: 'TabResize',\n  components: {\n    OutputFilesize,\n    InputFile,\n    PadFillByte,\n    FileSize,\n  },\n  data() {\n    return {\n      saveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      newSize: null,\n      padFillByte: DEFAULT_PAD_FILL_BYTE,\n    };\n  },\n  methods: {\n    reset() {\n      this.saveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.newSize = null;\n      this.padFillByte = DEFAULT_PAD_FILL_BYTE;\n\n      this.$refs.inputFile.reset();\n    },\n    readDataToResize(event) {\n      this.errorMessage = null;\n      this.outputFilename = null;\n      try {\n        this.saveData = event.arrayBuffer;\n        this.outputFilename = `${Util.removeFilenameExtension(event.filename)} (converted)${Util.getExtension(event.filename)}`;\n\n        this.checkResizeFile();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    isIncreasingFileSize() {\n      return ((this.saveData !== null) && (this.newSize !== null) && (this.newSize > this.saveData.byteLength));\n    },\n    checkResizeFile() {\n      if (this.saveData !== null) {\n        // As long as this.newSize is not null, then we're good to go here. this.padFillByte will always be a valid value\n        // We could choose to throw an error if this.newSize == null, but that would mean putting an error on the screen as soon\n        // as the user selects a file (if they haven't filled in a size yet), which seems a bit aggressive. Just having the\n        // Convert! button disabled is hopefully sufficient there.\n      }\n    },\n    canResizeFile() {\n      if ((this.saveData !== null) && (this.newSize !== null)) {\n        try {\n          this.checkResizeFile();\n          return true;\n        } catch (e) {\n          return false;\n        }\n      }\n\n      return false;\n    },\n    resizeFile() {\n      const outputArrayBuffer = SaveFilesUtil.resizeRawSave(this.saveData, this.newSize, this.padFillByte);\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TabSlice.vue",
    "content": "<template>\n  <div>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-number\n          id=\"input-slice-start-offset\"\n          class=\"top-row\"\n          labelText=\"Start offset:\"\n          helpText=\"A slice is copying out a portion of a larger file.\n          The start offset is the number of bytes from the beginning of the file to begin the slice. Can be in decimal, or hexadecimal beginning with 0x\"\n          @input=\"changeSliceStartOffset($event)\"\n          ref=\"inputNumberSliceStartOffset\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-number\n          id=\"input-slice-length\"\n          labelText=\"Length:\"\n          helpText=\"The length of data to slice, in bytes. Leave blank to slice to the end of the file. Can be in decimal, or hexadecimal beginning with 0x\"\n          @input=\"changeSliceLength($event)\"\n          ref=\"inputNumberSliceLength\"\n        />\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"start\">\n      <b-col sm=12 md=7 lg=5 xl=4 align-self=\"center\">\n        <input-file\n          @load=\"readDataToSlice($event)\"\n          :errorMessage=\"this.errorMessage\"\n          placeholderText=\"Choose a file to convert\"\n          :leaveRoomForHelpIcon=\"true\"\n          ref=\"inputFile\"\n        />\n      </b-col>\n    </b-row>\n    <b-row class=\"justify-content-md-center\" align-h=\"center\">\n      <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n        <b-button\n          class=\"utilities-advanced-slice-convert-button\"\n          variant=\"success\"\n          block\n          :disabled=\"!this.canSliceFile() || !this.outputFilename\"\n          @click=\"sliceFile()\"\n        >\n        Convert!\n        </b-button>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.top-row {\n  margin-top: 1em;\n}\n\n.utilities-advanced-slice-convert-button {\n  margin-top: 1em;\n}\n</style>\n\n<script>\nimport { saveAs } from 'file-saver';\n\nimport InputNumber from './InputNumber.vue';\nimport InputFile from './InputFile.vue';\n\nimport Util from '../util/util';\n\nexport default {\n  name: 'TabSlice',\n  components: {\n    InputNumber,\n    InputFile,\n  },\n  data() {\n    return {\n      saveData: null,\n      errorMessage: null,\n      outputFilename: null,\n      sliceStartOffset: null,\n      sliceLength: null,\n    };\n  },\n  methods: {\n    reset() {\n      this.saveData = null;\n      this.errorMessage = null;\n      this.outputFilename = null;\n      this.sliceStartOffset = null;\n      this.sliceLength = null;\n\n      this.$refs.inputFile.reset();\n      this.$refs.inputNumberSliceStartOffset.reset();\n      this.$refs.inputNumberSliceLength.reset();\n    },\n    readDataToSlice(event) {\n      this.errorMessage = null;\n      this.outputFilename = null;\n      try {\n        this.saveData = event.arrayBuffer;\n        this.outputFilename = `${Util.removeFilenameExtension(event.filename)} (converted)${Util.getExtension(event.filename)}`;\n\n        this.checkSliceFile();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    changeSliceStartOffset(value) {\n      this.sliceStartOffset = value;\n      this.changeSliceOffsetOrLength();\n    },\n    changeSliceLength(value) {\n      this.sliceLength = value;\n      this.changeSliceOffsetOrLength();\n    },\n    changeSliceOffsetOrLength() {\n      this.errorMessage = null;\n      try {\n        this.checkSliceFile();\n      } catch (e) {\n        this.errorMessage = e.message;\n      }\n    },\n    checkSliceFile() {\n      if (this.saveData !== null) {\n        if ((this.sliceStartOffset !== null) && (this.sliceStartOffset > this.saveData.byteLength)) {\n          throw new Error(`Specified a starting offset of ${this.sliceStartOffset} bytes, but the file is only ${this.saveData.byteLength} bytes long`);\n        }\n\n        if ((this.sliceLength !== null) && (this.sliceLength > this.saveData.byteLength)) {\n          throw new Error(`Specified a length of ${this.sliceLength} bytes, but the file is only ${this.saveData.byteLength} bytes long`);\n        }\n\n        if ((this.sliceStartOffset !== null) && (this.sliceLength !== null) && ((this.sliceStartOffset + this.sliceLength) > this.saveData.byteLength)) {\n          throw new Error(`Specified a starting offset of ${this.sliceStartOffset} and a length of ${this.sliceLength} bytes, `\n            + `which is a total of ${this.sliceStartOffset + this.sliceLength} bytes but the file is only ${this.saveData.byteLength} bytes long`);\n        }\n      }\n    },\n    canSliceFile() {\n      if ((this.saveData !== null) && (this.sliceStartOffset !== null)) {\n        try {\n          this.checkSliceFile();\n          return true;\n        } catch (e) {\n          return false;\n        }\n      }\n\n      return false;\n    },\n    sliceFile() {\n      let outputArrayBuffer = null;\n\n      if (this.sliceLength === null) {\n        outputArrayBuffer = this.saveData.slice(this.sliceStartOffset);\n      } else {\n        outputArrayBuffer = this.saveData.slice(this.sliceStartOffset, this.sliceStartOffset + this.sliceLength);\n      }\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.outputFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/components/TroubleshootingUtils.vue",
    "content": "<template>\n  <div>\n    <b-container>\n      <b-row no-gutters align-h=\"center\" align-v=\"start\">\n        <b-col sm=12 md=5>\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw<br>Test save</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <input-file\n            @load=\"readTestSaveData($event)\"\n            placeholderText=\"Choose a file that you know works (*.srm)\"\n            acceptExtension=\".srm\"\n            :leaveRoomForHelpIcon=\"true\"\n            helpText=\"Make a test save using the emulator or cartridge that you want to use, to compare against the file that's not working.\"\n            id=\"known-working-input-file\"\n            aria-controls=\"collapse-test-save-data\"\n            :aria-expanded=\"hasTestSaveData ? 'true' : 'false'\"\n          />\n          <file-info\n            :fileName=\"this.testSaveDataFilename\"\n            :fileData=\"this.testSaveData\"\n            :otherFileName=\"this.brokenSaveDataFilename\"\n            :otherFileData=\"this.brokenSaveData\"\n            :display=\"this.hasTestSaveData\"\n            id=\"collapse-test-save-data\"\n            fileAttributeEqualVariant=\"success\"\n            fileAttributeNotEqualVariant=\"success\"\n          />\n        </b-col>\n        <b-col sm=12 md=2 lg=2 xl=2 align-self=\"start\">\n          <mq-layout :mq=\"['md', 'lg', 'xl']\">\n            <i class=\"fa fa-arrow-circle-right fa-3x horizontal-arrow\"></i>\n          </mq-layout>\n          <mq-layout :mq=\"['xs', 'sm']\">\n            <i class=\"fa fa-arrow-circle-down fa-3x vertical-arrow\"></i>\n          </mq-layout>\n        </b-col>\n        <b-col sm=12 md=5 align-self=\"start\">\n          <b-row no-gutters align-h=\"center\" align-v=\"start\">\n            <b-col cols=12>\n              <b-jumbotron fluid :header-level=\"$mq | mq({ xs: 5, sm: 5, md: 5, lg: 5, xl: 4 })\">\n                <template v-slot:header>Emulator/Raw Needs fixed</template>\n              </b-jumbotron>\n            </b-col>\n          </b-row>\n          <input-file\n            @load=\"readBrokenSaveData($event)\"\n            placeholderText=\"Choose the file that's not working (*.srm)\"\n            acceptExtension=\".srm\"\n            :leaveRoomForHelpIcon=\"true\"\n            helpText=\"The system will compare the file that's not working against the test save you made to try and figure out how to change it.\"\n            id=\"needs-fixed-input-file\"\n            aria-controls=\"collapse-broken-save-data\"\n            :aria-expanded=\"hasBrokenSaveData ? 'true' : 'false'\"\n          />\n          <file-info\n            :fileName=\"this.brokenSaveDataFilename\"\n            :fileData=\"this.brokenSaveData\"\n            :otherFileName=\"this.testSaveDataFilename\"\n            :otherFileData=\"this.testSaveData\"\n            :display=\"this.hasBrokenSaveData\"\n            id=\"collapse-broken-save-data\"\n            fileAttributeEqualVariant=\"success\"\n            fileAttributeNotEqualVariant=\"danger\"\n          />\n        </b-col>\n      </b-row>\n      <b-row class=\"justify-content-md-center\" align-h=\"center\">\n        <b-col cols=\"auto\" sm=4 md=3 lg=2 align-self=\"center\">\n          <b-button\n            class=\"troubleshooting-button\"\n            variant=\"success\"\n            block\n            :disabled=\"!this.testSaveData || !this.brokenSaveData || this.filesAreSame\"\n            @click=\"fixFile()\"\n          >\n          <div v-if=\"!this.filesAreSame\">\n            Attempt fix!\n          </div>\n          <div v-else>\n            No differences found\n          </div>\n          </b-button>\n        </b-col>\n      </b-row>\n      <b-row>\n        <b-col>\n          <div class=\"help\">\n            Tip: if this tool doesn't work for you, try opening both files in a hex editor and look for similarities or differences that may help you fix the file.\n          </div>\n          <div class=\"help\">\n            Did this page help you? Please tell me if it did or if it didn't: savefileconverter{{'\\xa0'}}(at){{'\\xa0'}}gmail{{'\\xa0'}}(dot){{'\\xa0'}}com\n          </div>\n        </b-col>\n      </b-row>\n    </b-container>\n  </div>\n</template>\n\n<style scoped>\n\n/* Separate class for each different button to enable tracking in google tag manager */\n.troubleshooting-button {\n  margin-top: 1em;\n}\n\n.help {\n  margin-top: 1em;\n}\n\n.horizontal-arrow {\n  margin-top: 2.2em;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n.vertical-arrow {\n  margin-top: 0.5em;\n  margin-bottom: 0.5em;\n}\n\n</style>\n\n<script>\nimport path from 'path';\nimport { saveAs } from 'file-saver';\nimport InputFile from './InputFile.vue';\nimport FileInfo from './FileInfo.vue';\nimport PaddingUtil from '../util/Padding';\n\nexport default {\n  name: 'TroubleshootingUtils',\n  data() {\n    return {\n      testSaveData: null,\n      testSaveDataFilename: null,\n      brokenSaveData: null,\n      brokenSaveDataFilename: null,\n      outputFilename: null,\n    };\n  },\n  computed: {\n    hasTestSaveData: {\n      get() { return this.testSaveData !== null; },\n      set() { }, // Can only be set by updating this.testSaveData, and the b-collapse element isn't allowed to change it\n    },\n    hasBrokenSaveData: {\n      get() { return this.brokenSaveData !== null; },\n      set() { }, // Can only be set by updating this.brokenSaveData, and the b-collapse element isn't allowed to change it\n    },\n    filesAreSame() {\n      return this.testSaveData\n      && this.brokenSaveData\n      && (this.testSaveDataFilename === this.brokenSaveDataFilename)\n      && PaddingUtil.fileSizeAndPaddingFromStartIsSame(this.testSaveData, this.brokenSaveData);\n    },\n  },\n  components: {\n    InputFile,\n    FileInfo,\n  },\n  methods: {\n    readTestSaveData(event) {\n      this.testSaveData = event.arrayBuffer;\n      this.testSaveDataFilename = path.basename(event.filename);\n    },\n    readBrokenSaveData(event) {\n      this.brokenSaveData = event.arrayBuffer;\n      this.brokenSaveDataFilename = path.basename(event.filename);\n    },\n    fixFile() {\n      const outputArrayBuffer = PaddingUtil.attemptFix(this.testSaveData, this.brokenSaveData);\n\n      const outputBlob = new Blob([outputArrayBuffer], { type: 'application/octet-stream' });\n\n      saveAs(outputBlob, this.testSaveDataFilename); // Frustratingly, in Firefox the dialog says \"from: blob:\" and apparently this can't be changed: https://github.com/eligrey/FileSaver.js/issues/101\n    },\n  },\n};\n\n</script>\n"
  },
  {
    "path": "frontend/src/components/WiiVcPlatform.vue",
    "content": "<template>\n    <div>\n    <b-row no-gutters align-h=\"start\" align-v=\"center\">\n      <b-col cols=11 sm=12>\n        <div>\n          <b-form-select\n            v-bind:value=\"value\"\n            v-on:input=\"$emit('input', $event)\"\n            :options=\"options\"\n            :disabled=\"disabled\"\n          />\n          <help-button\n            popover-text=\"Select the platform (NES, Super NES, Sega Genesis, WiiWare, etc.) that the save is for.\n            Will attempt to autodetect based on the save file, but you can choose manually as well.\"\n            :id=\"this.id\"\n            class=\"help-button\"\n          />\n        </div>\n      </b-col>\n    </b-row>\n    <b-row no-gutters align-h=\"center\" align-v=\"center\">\n      <b-col cols=12>\n        <b-alert variant=\"danger\" :show=\"this.errorMessage !== null\">\n          {{this.errorMessage}}\n        </b-alert>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n  .help-button {\n    position: absolute;\n    right: -1.2em;\n    top: 0em;\n  }\n</style>\n\n<script>\nimport HelpButton from './HelpButton.vue';\n\nexport default {\n  name: 'WiiVcPlatform',\n  props: {\n    errorMessage: {\n      type: String,\n      default: null,\n    },\n    value: {\n      type: String,\n      default: null,\n    },\n    id: String,\n    disabled: {\n      type: Boolean,\n      default: false,\n    },\n  },\n  components: {\n    HelpButton,\n  },\n  data() {\n    return {\n      options: [\n        { value: null, text: 'Choose platform', disabled: true },\n        { value: 'VC-NES', text: 'NES' },\n        { value: 'VC-SNES', text: 'Super NES' },\n        { value: 'VC-N64', text: 'Nintendo 64' },\n        { value: 'VC-PCE', text: 'Turbografx-16/PC Engine' },\n        { value: 'VC-SMS', text: 'Sega Master System' },\n        { value: 'VC-MD', text: 'Sega Genesis/Mega Drive' },\n        { value: 'VC-NEOGEO', text: 'Neo Geo' },\n        { value: 'VC-C64', text: 'Commodore 64' },\n        { value: 'VC-Arcade', text: 'Arcade' },\n        { value: 'WiiWare', text: 'WiiWare' },\n        { value: 'Wii', text: 'Wii' },\n        { value: 'Homebrew', text: 'Homebrew' },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/main.js",
    "content": "import Vue from 'vue';\nimport './plugins/bootstrap-vue';\nimport './plugins/fontawesome-vue';\nimport './plugins/mediaquery-vue';\nimport './plugins/google-tag-manager-vue';\nimport './plugins/vue-async-computed';\nimport App from './App.vue';\nimport router from './router';\nimport store from './store';\n\nVue.config.productionTip = false;\n\nnew Vue({\n  router,\n  store,\n  render: (h) => h(App),\n}).$mount('#app');\n"
  },
  {
    "path": "frontend/src/plugins/bootstrap-vue.js",
    "content": "import Vue from 'vue';\n\n// Reduce bundle size by pulling in only what we need from bootstrap.\n// We could further optimize this by pulling in only the actual specific elements and directives\n// that we use, but it would be more work for not a ton more gain.\n// See here for more details: https://bootstrap-vue.js.org/docs/#tree-shaking-with-module-bundlers\n//\n// Note that this makes devving a bit annoying since anytime you want to try out a new\n// type you have to add it here. So consider temporarily just using\n//\n//      import { BootstrapVue } from 'bootstrap-vue';\n//      Vue.use(BootstrapVue);\n//\n// in those situations.\n\n// Place all imports from 'bootstrap-vue' in a single import\n// statement for optimal bundle sizes\nimport {\n  LayoutPlugin,\n  AlertPlugin,\n  FormFilePlugin,\n  JumbotronPlugin,\n  ButtonPlugin,\n  FormRadioPlugin,\n  FormGroupPlugin,\n  FormInputPlugin,\n  LinkPlugin,\n  FormSelectPlugin,\n  ListGroupPlugin,\n  CollapsePlugin,\n  SpinnerPlugin,\n  ImagePlugin,\n  TabsPlugin,\n} from 'bootstrap-vue';\n\nimport 'bootstrap/dist/css/bootstrap.min.css';\nimport 'bootstrap-vue/dist/bootstrap-vue.min.css';\n\nVue.use(LayoutPlugin);\nVue.use(AlertPlugin);\nVue.use(FormFilePlugin);\nVue.use(JumbotronPlugin);\nVue.use(ButtonPlugin);\nVue.use(FormRadioPlugin);\nVue.use(FormGroupPlugin);\nVue.use(FormInputPlugin);\nVue.use(LinkPlugin);\nVue.use(FormSelectPlugin);\nVue.use(ListGroupPlugin);\nVue.use(CollapsePlugin);\nVue.use(SpinnerPlugin);\nVue.use(ImagePlugin);\nVue.use(TabsPlugin);\n"
  },
  {
    "path": "frontend/src/plugins/fontawesome-vue.js",
    "content": "import Vue from 'vue';\n\nimport { library, dom } from '@fortawesome/fontawesome-svg-core';\nimport {\n  faArrowCircleLeft,\n  faArrowCircleRight,\n  faArrowCircleUp,\n  faArrowCircleDown,\n  faArrowRightArrowLeft,\n  faQuestionCircle,\n  faCheck,\n  faTimes,\n  faExclamationTriangle,\n} from '@fortawesome/free-solid-svg-icons';\n\nimport { FontAwesomeIcon } from '@fortawesome/vue-fontawesome';\n\nlibrary.add(faArrowCircleLeft);\nlibrary.add(faArrowCircleRight);\nlibrary.add(faArrowCircleUp);\nlibrary.add(faArrowCircleDown);\nlibrary.add(faArrowRightArrowLeft);\nlibrary.add(faQuestionCircle);\nlibrary.add(faCheck);\nlibrary.add(faTimes);\nlibrary.add(faExclamationTriangle);\n\nVue.component('font-awesome-icon', FontAwesomeIcon);\n\n// This will kick off the initial replacement of i to svg tags and configure a MutationObserver\ndom.watch();\n"
  },
  {
    "path": "frontend/src/plugins/google-tag-manager-vue.js",
    "content": "import Vue from 'vue';\nimport VueGtm from '@gtm-support/vue2-gtm';\nimport router from '../router/index';\n\nVue.use(VueGtm, {\n  id: 'GTM-MFQ82X4',\n  defer: false, // Script can be set to `defer` to speed up page load at the cost of less accurate results (in case visitor leaves before script is loaded, which is unlikely but possible). Defaults to false, so the script is loaded `async` by default\n  compatibility: false, // Will add `async` and `defer` to the script tag to not block requests for old browsers that do not support `async`\n  enabled: process.env.VUE_APP_ENABLE_GOOGLE_TAG_MANAGER === 'true',\n  debug: process.env.VUE_APP_DEBUG_GOOGLE_TAG_MANAGER === 'true', // Whether or not display console logs debugs (optional)\n  loadScript: true,\n  vueRouter: router,\n});\n"
  },
  {
    "path": "frontend/src/plugins/mediaquery-vue.js",
    "content": "import Vue from 'vue';\nimport VueMq from 'vue-mq';\n\nVue.use(VueMq, {\n  breakpoints: { // Values copied from https://bootstrap-vue.js.org/docs/components/layout/ to be consistent with bootstrap's layout plugin\n    xs: 576,\n    sm: 768,\n    md: 992,\n    lg: 1200,\n    xl: Infinity,\n  },\n});\n"
  },
  {
    "path": "frontend/src/plugins/vue-async-computed.js",
    "content": "import Vue from 'vue';\n\nimport AsyncComputed from 'vue-async-computed';\n\nVue.use(AsyncComputed);\n"
  },
  {
    "path": "frontend/src/rom-formats/PspIso.js",
    "content": "// Extracts executables from a PSP .ISO image\n// This is based on https://github.com/hrydgard/ppsspp/blob/master/Core/PSPLoaders.cpp\n\nimport * as BrowserFS from 'browserfs';\n\nimport Util from '../util/util';\nimport PspParmSfo from '../save-formats/PSP/ParamSfo';\n\nconst EXECUTABLE_MAGIC_ENCODING = 'US-ASCII';\nconst EXECUTABLE_MAGIC = ['~PSP', '\\x7FELF'];\nconst EXECUTABLE_MAGIC_OFFSET = 0;\n\nconst MAIN_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.BIN';\nconst UNENCRYPTED_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/BOOT.BIN'; // After firmware 3 was released, games no longer came with unencrypted versions on the UMD. The file is still present, but it's all dummy data for those later games. Apparently the size of the dummy data is the correct size of the decrypted executable though\n\nconst PARAM_SFO_PATH = '/PSP_GAME/PARAM.SFO';\n\n// Taken from https://github.com/hrydgard/ppsspp/blob/e094f5673a4f171927afe6eb41eba0326c4511c7/Core/PSPLoaders.cpp#L221\n//\n// Apparently some translators like to rename the original EBOOT.BIN file to one of the filenames below,\n// and then make a new EBOOT.BIN that first launches a plugin and then the actual game.\n// We want to look in the actual executable to try and find our gamekey\nconst ALTERNATIVE_EXECUTABLE_PATHS = [\n  '/PSP_GAME/SYSDIR/EBOOT.OLD',\n  '/PSP_GAME/SYSDIR/EBOOT.DAT',\n  '/PSP_GAME/SYSDIR/EBOOT.BI',\n  '/PSP_GAME/SYSDIR/EBOOT.LLD',\n  // '/PSP_GAME/SYSDIR/OLD_EBOOT.BIN', //Utawareru Mono Chinese version\n  '/PSP_GAME/SYSDIR/EBOOT.123',\n  // '/PSP_GAME/SYSDIR/EBOOT_LRC_CH.BIN', // Hatsune Miku Project Diva Extend chinese version\n  '/PSP_GAME/SYSDIR/BOOT0.OLD',\n  '/PSP_GAME/SYSDIR/BOOT1.OLD',\n  '/PSP_GAME/SYSDIR/BINOT.BIN',\n  '/PSP_GAME/SYSDIR/EBOOT.FRY',\n  '/PSP_GAME/SYSDIR/EBOOT.Z.Y',\n  '/PSP_GAME/SYSDIR/EBOOT.LEI',\n  '/PSP_GAME/SYSDIR/EBOOT.DNR',\n  '/PSP_GAME/SYSDIR/DBZ2.BIN',\n  // '/PSP_GAME/SYSDIR/ss.RAW',//Code Geass: Lost Colors chinese version\n];\n\n// Taken from https://github.com/hrydgard/ppsspp/blob/e094f5673a4f171927afe6eb41eba0326c4511c7/Core/PSPLoaders.cpp#L264\n//\n// PPSSPP checks for these game IDs by looking at the PARAM.SFO file on the disc. It sounds like other games may have other\n// game data files with these paths, so that's why they check the game ID as well.\n\nconst OTHER_ALTERNATIVE_EXECUTABLE_PATHS = [\n  { gameId: 'NPJH50624', path: '/PSP_GAME/USRDIR/PAKFILE2.BIN' }, // Hunter x Hunter World Adventure (Jpn)\n  { gameId: 'NPJH00100', path: '/PSP_GAME/USRDIR/DATA/GIM/GBL' }, // World Neverland: Kukuria Oukoku Monogatari (Jpn)\n];\n\nasync function getFileSystem(isoArrayBuffer, name) {\n  const browserFsBuffer = BrowserFS.BFSRequire('buffer').Buffer;\n\n  const fsReady = new Promise((resolve, reject) => {\n    BrowserFS.configure({\n      fs: 'IsoFS',\n      options: {\n        data: browserFsBuffer.from(isoArrayBuffer),\n        name,\n      },\n    }, (err) => { if (err) reject(err); resolve(); });\n  });\n\n  await fsReady;\n\n  return BrowserFS.BFSRequire('fs');\n}\n\nasync function fileExists(fs, path) {\n  const statPromise = new Promise((resolve, reject) => {\n    fs.stat(path, (err) => { if (err) reject(err); resolve(); });\n  });\n\n  try {\n    await statPromise;\n  } catch (e) {\n    return false;\n  }\n\n  return true;\n}\n\nasync function readFile(fs, path) {\n  return new Promise((resolve, reject) => {\n    fs.readFile(path, (err, data) => { if (err) reject(err); resolve(Util.bufferToArrayBuffer(data)); }); // This returns a browserfs Buffer. Somewhere buried in browserfs there is a function called buffer2ArrayBuffer() but I can't figure out how to import it and it looks a lot like our own util function here. Apparently browserfs Buffers are uint8arrays\n  });\n}\n\nasync function getGameId(fs) {\n  const paramSfoExists = await fileExists(fs, PARAM_SFO_PATH);\n\n  if (!paramSfoExists) {\n    return null; // PPSSPP doesn't fail loading a game if this file is missing, so we shouldn't either\n  }\n\n  const paramSfoArrayBuffer = await readFile(fs, PARAM_SFO_PATH);\n\n  const paramSfo = new PspParmSfo(paramSfoArrayBuffer);\n\n  return paramSfo.getValue('DISC_ID');\n}\n\nasync function findFirstPathThatExists(fs, pathsArray) {\n  const pathExistsArray = await Promise.all(pathsArray.map((x) => fileExists(fs, x)));\n  const pathExistsIndex = pathExistsArray.findIndex((x) => x);\n\n  if (pathExistsIndex >= 0) {\n    return pathsArray[pathExistsIndex];\n  }\n\n  return null;\n}\n\nasync function getExecutable(fs, gameId) {\n  // This is based on https://github.com/hrydgard/ppsspp/blob/e094f5673a4f171927afe6eb41eba0326c4511c7/Core/PSPLoaders.cpp#L240\n\n  let pathToExecutable = null;\n  let executableArrayBuffer = null;\n  let executableIsEncrypted = true;\n\n  const mainExecutablePathExists = await fileExists(fs, MAIN_EXECUTABLE_PATH);\n  if (mainExecutablePathExists) {\n    pathToExecutable = MAIN_EXECUTABLE_PATH;\n  }\n\n  const alternativePathToExecutable = await findFirstPathThatExists(fs, ALTERNATIVE_EXECUTABLE_PATHS);\n\n  if (alternativePathToExecutable !== null) {\n    pathToExecutable = alternativePathToExecutable;\n  }\n\n  const otherAlternativePaths = OTHER_ALTERNATIVE_EXECUTABLE_PATHS.filter((x) => x.gameId === gameId).map((x) => x.path);\n  const otherAlternativePathToExecutable = await findFirstPathThatExists(fs, otherAlternativePaths);\n\n  if (otherAlternativePathToExecutable !== null) {\n    pathToExecutable = otherAlternativePathToExecutable;\n  }\n\n  // There's a file that exists at either that main executable path or one of the alternative paths.\n  // Check if it's an actual encrypted executable\n\n  if (pathToExecutable !== null) {\n    executableArrayBuffer = await readFile(fs, pathToExecutable);\n\n    let magicMatches = false;\n\n    EXECUTABLE_MAGIC.forEach((potentialMagic) => {\n      try {\n        Util.checkMagic(executableArrayBuffer, EXECUTABLE_MAGIC_OFFSET, potentialMagic, EXECUTABLE_MAGIC_ENCODING);\n        magicMatches = true;\n      } catch (e) {\n        // Try the next potentialMagic\n      }\n    });\n\n    if (!magicMatches) {\n      pathToExecutable = null;\n    }\n  }\n\n  if (pathToExecutable === null) {\n    // Couldn't find an encrypted executable, so let's try the unencrypted one\n\n    const unencryptedExecutablePathExists = await fileExists(fs, UNENCRYPTED_EXECUTABLE_PATH);\n\n    if (unencryptedExecutablePathExists) {\n      pathToExecutable = UNENCRYPTED_EXECUTABLE_PATH;\n      executableIsEncrypted = false;\n      executableArrayBuffer = await readFile(fs, UNENCRYPTED_EXECUTABLE_PATH);\n    }\n  }\n\n  if (pathToExecutable === null) {\n    // We couldn't find any known file, so it's not a valid disc image\n    throw new Error('This does not appear to be a valid PSP UMD image');\n  }\n\n  return {\n    gameId,\n    path: pathToExecutable,\n    encrypted: executableIsEncrypted,\n    arrayBuffer: executableArrayBuffer,\n  };\n}\n\nexport default class PspIso {\n  static async Create(isoArrayBuffer, name) {\n    const fs = await getFileSystem(isoArrayBuffer, name);\n\n    const gameId = await getGameId(fs);\n    const executableInfo = await getExecutable(fs, gameId);\n\n    return new PspIso(executableInfo);\n  }\n\n  constructor(executableInfo) {\n    this.executableInfo = executableInfo;\n  }\n\n  getExecutableInfo() {\n    return this.executableInfo;\n  }\n}\n"
  },
  {
    "path": "frontend/src/rom-formats/SegaSaturnCueBin.js",
    "content": "// Extracts some information from a Sega Saturn .bin file for a game in .cue/.bin format\n// Note that it must be the first track\n\nimport Util from '../util/util';\n\nconst MAGIC = 'SEGA SEGASATURN ';\nconst MAGIC_OFFSET = 0x10;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst GAME_ID_OFFSET = 0x30;\nconst GAME_ID_LENGTH = 0x10;\nconst GAME_ID_ENCODING = 'US-ASCII';\n\nexport default class SegaSaturnCueBin {\n  constructor(binArrayBuffer) {\n    Util.checkMagic(binArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const binUint8Array = new Uint8Array(binArrayBuffer);\n\n    this.gameId = Util.readNullTerminatedString(binUint8Array, GAME_ID_OFFSET, GAME_ID_ENCODING, GAME_ID_LENGTH);\n  }\n\n  getGameId() {\n    return this.gameId;\n  }\n\n  static getFileExtensions() {\n    return [\n      '.bin',\n    ];\n  }\n}\n"
  },
  {
    "path": "frontend/src/rom-formats/gb.js",
    "content": "// Extracts some information from a Game Boy ROM.\n// Information can be found here: https://gbdev.gg8.se/wiki/articles/The_Cartridge_Header#0134-0143_-_Title\n\nimport Util from '../util/util';\n\nconst INTERNAL_NAME_OFFSET = 0x134;\nconst INTERNAL_NAME_LENGTH_GB = 0x10;\nconst INTERNAL_NAME_LENGTH_GBC = 0xB;\nconst INTERNAL_NAME_ENCODING = 'US-ASCII';\n\nconst GBC_FLAG_OFFSET = 0x143;\nconst GBC_FLAG_GB_AND_GBC = 0x80;\nconst GBC_FLAG_GBC_ONLY = 0xC0;\n\nconst CARTRIDGE_TYPE_OFFSET = 0x147;\nconst SRAM_SIZE_OFFSET = 0x149;\n\nconst CARTRIDGE_TYPE_MBC2 = 0x5;\nconst CARTRIDGE_TYPE_MBC2_PLUS_BATTERY = 0x6;\n\nfunction isMbc2(cartridgeType) {\n  return ((cartridgeType === CARTRIDGE_TYPE_MBC2) || (cartridgeType === CARTRIDGE_TYPE_MBC2_PLUS_BATTERY));\n}\n\nfunction getSramSize(sramValue, cartridgeType) {\n  // Memory Bank Controller 2 cartridge types must specify 0 for sramValue, but have SRAM\n  if (isMbc2(cartridgeType)) {\n    return 2048;\n  }\n\n  switch (sramValue) {\n    case 0:\n      return 0;\n\n    case 1:\n      return 2048;\n\n    case 2:\n      return 8192;\n\n    case 3:\n      return 32768;\n\n    case 4:\n      return 131072;\n\n    case 5:\n      return 65536;\n\n    default:\n      throw new Error(`Unknown SRAM size value: ${sramValue}. Valid values are 0 - 5`);\n  }\n}\n\nexport default class GbRom {\n  constructor(romArrayBuffer) {\n    const uint8Array = new Uint8Array(romArrayBuffer);\n\n    this.isGbc = (uint8Array[GBC_FLAG_OFFSET] === GBC_FLAG_GB_AND_GBC) || (uint8Array[GBC_FLAG_OFFSET] === GBC_FLAG_GBC_ONLY);\n\n    const internalNameLength = this.isGbc ? INTERNAL_NAME_LENGTH_GBC : INTERNAL_NAME_LENGTH_GB;\n\n    this.internalName = Util.readNullTerminatedString(uint8Array, INTERNAL_NAME_OFFSET, INTERNAL_NAME_ENCODING, internalNameLength);\n    this.cartridgeType = uint8Array[CARTRIDGE_TYPE_OFFSET];\n    this.sramSize = getSramSize(uint8Array[SRAM_SIZE_OFFSET], this.cartridgeType);\n\n    this.romArrayBuffer = romArrayBuffer;\n  }\n\n  getInternalName() {\n    return this.internalName;\n  }\n\n  getRomArrayBuffer() {\n    return this.romArrayBuffer;\n  }\n\n  getIsGbc() {\n    return this.isGbc;\n  }\n\n  getCartridgeType() {\n    return this.cartridgeType;\n  }\n\n  getSramSize() {\n    return this.sramSize;\n  }\n\n  static getFileExtensions() {\n    return [\n      '.gb',\n      '.gbc',\n    ];\n  }\n}\n"
  },
  {
    "path": "frontend/src/rom-formats/gba.js",
    "content": "// Extracts some information from a Game Boy Advance ROM.\n// Based on https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/src/gba/GBA.cpp#L1168\n\nconst INTERNAL_NAME_OFFSET = 0xA0;\nconst INTERNAL_NAME_LENGTH = 0x10;\nconst CHECKSUM_OFFSET = 0xBE;\nconst COMPLIMENT_CHECK_OFFSET = 0xBD;\nconst MAKER_OFFSET = 0xB0;\nconst LITTLE_ENDIAN = true;\n\nexport default class GbaRom {\n  constructor(romArrayBuffer) {\n    const textDecoder = new TextDecoder('utf-8');\n    const dataView = new DataView(romArrayBuffer);\n\n    const internalNameArrayBuffer = romArrayBuffer.slice(INTERNAL_NAME_OFFSET, INTERNAL_NAME_OFFSET + INTERNAL_NAME_LENGTH);\n    const internalNameUint8Array = new Uint8Array(internalNameArrayBuffer);\n\n    this.internalName = textDecoder.decode(internalNameUint8Array);\n    this.checkSum = dataView.getUint16(CHECKSUM_OFFSET, LITTLE_ENDIAN);\n    this.complimentCheck = dataView.getUint8(COMPLIMENT_CHECK_OFFSET);\n    this.maker = dataView.getUint8(MAKER_OFFSET);\n  }\n\n  getInternalName() {\n    return this.internalName;\n  }\n\n  getChecksum() {\n    return this.checkSum;\n  }\n\n  getComplimentCheck() {\n    return this.complimentCheck;\n  }\n\n  getMaker() {\n    return this.maker;\n  }\n}\n"
  },
  {
    "path": "frontend/src/rom-formats/nes.js",
    "content": "/* eslint-disable no-bitwise */\n\n// Extracts some information from an NES ROM.\n//\n// There are 2 different formats: iNES and NES 2.0:\n// - iNES: https://www.nesdev.org/wiki/INES\n// - NES 2.0: https://www.nesdev.org/wiki/NES_2.0\n\nconst LITTLE_ENDIAN = true;\n\nconst HEADER_LENGTH = 16; // Both formats have a header that's the same length\n\nconst MAGIC_OFFSET = 0;\nconst MAGIC = 0x1A53454E; // 'NES' followed by EOF, backwards\n\nexport default class NesRom {\n  constructor(romArrayBuffer) {\n    const dataView = new DataView(romArrayBuffer);\n\n    const magic = dataView.getUint32(MAGIC_OFFSET, LITTLE_ENDIAN);\n\n    if (magic !== MAGIC) {\n      throw new Error('This does not appear to be an NES ROM');\n    }\n\n    // According to the wiki, everything that gets to here counts as being a valid iNES headered ROM, and there's\n    // an additional check to see if it's an NES 2.0 headered ROM\n\n    this.isNes20Header = ((dataView.getUint8(7) & 0x0C) === 0x80); // https://www.nesdev.org/wiki/NES_2.0#Identification\n\n    this.romArrayBuffer = romArrayBuffer;\n  }\n\n  getIsNes20Header() {\n    return this.isNes20Header;\n  }\n\n  getRomArrayBufferWithHeader() {\n    return this.romArrayBuffer;\n  }\n\n  getRomArrayBufferWithoutHeader() {\n    return this.romArrayBuffer.slice(HEADER_LENGTH);\n  }\n\n  static getFileExtensions() {\n    return [\n      '.nes',\n    ];\n  }\n}\n"
  },
  {
    "path": "frontend/src/rom-formats/sms.js",
    "content": "/* eslint-disable no-bitwise */\n\n// Extracts some information from an SMS ROM.\n//\n// More info at: https://www.smspower.org/Development/ROMHeader\n\nimport Util from '../util/util';\n\nconst LITTLE_ENDIAN = true;\n\nconst MAGIC_OFFSET = 0x7FF0;\nconst MAGIC = 'TMR SEGA';\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst CHECKSUM_OFFSET = 0x7FFA;\n\nexport default class SmsRom {\n  constructor(romArrayBuffer) {\n    Util.checkMagic(romArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const dataView = new DataView(romArrayBuffer);\n\n    this.checksum = dataView.getUint16(CHECKSUM_OFFSET, LITTLE_ENDIAN);\n\n    this.romArrayBuffer = romArrayBuffer;\n  }\n\n  getChecksum() {\n    return this.checksum;\n  }\n\n  static getFileExtensions() {\n    return [\n      '.sms',\n    ];\n  }\n}\n"
  },
  {
    "path": "frontend/src/router/index.js",
    "content": "import Vue from 'vue';\nimport VueRouter from 'vue-router';\n\nVue.use(VueRouter);\n\nconst routes = [\n  {\n    path: '/',\n    redirect: '/mister',\n  },\n  {\n    path: '/retron-5',\n    name: 'Retron5',\n    component: () => import(/* webpackChunkName: \"retron5\" */ '../views/Retron5.vue'),\n  },\n  {\n    path: '/retron-5/erase-save',\n    name: 'Erase save - Retron5',\n    component: () => import(/* webpackChunkName: \"erase-save-retron5\" */ '../views/Retron5EraseSaveView.vue'),\n  },\n  {\n    path: '/wii',\n    name: 'Wii',\n    component: () => import(/* webpackChunkName: \"wii\" */ '../views/Wii.vue'),\n  },\n  {\n    path: '/gba/action-replay',\n    name: 'GBA - ActionReplay',\n    component: () => import(/* webpackChunkName: \"gba-action-replay\" */ '../views/GbaActionReplay.vue'),\n  },\n  {\n    path: '/gba/gameshark',\n    name: 'GBA - GameShark',\n    component: () => import(/* webpackChunkName: \"gba-gameshark\" */ '../views/GbaGameShark.vue'),\n  },\n  {\n    path: '/gba/gameshark-sp',\n    name: 'GBA - GameShark SP',\n    component: () => import(/* webpackChunkName: \"gba-gameshark-sp\" */ '../views/GbaGameSharkSP.vue'),\n  },\n  {\n    path: '/gba',\n    redirect: '/gba/gameshark',\n  },\n  {\n    path: '/ps1/emulator',\n    name: 'PS1 - Emulator',\n    component: () => import(/* webpackChunkName: \"ps1-emulator\" */ '../views/Ps1Emulator.vue'),\n  },\n  {\n    path: '/ps1/dexdrive',\n    name: 'PS1 - DexDrive',\n    component: () => import(/* webpackChunkName: \"ps1-dexdrive\" */ '../views/Ps1DexDrive.vue'),\n  },\n  {\n    path: '/ps1/psp',\n    name: 'PS1 - PSP',\n    component: () => import(/* webpackChunkName: \"ps1-psp\" */ '../views/Ps1Psp.vue'),\n  },\n  {\n    path: '/ps1/ps3',\n    name: 'PS1 - PS3',\n    component: () => import(/* webpackChunkName: \"ps1-ps3\" */ '../views/Ps1Ps3.vue'),\n  },\n  {\n    path: '/ps1',\n    redirect: '/ps1/dexdrive',\n  },\n  {\n    path: '/psp',\n    name: 'PSP decrypt',\n    component: () => import(/* webpackChunkName: \"psp-decrypt\" */ '../views/PspDecrypt.vue'),\n  },\n  {\n    path: '/n64/dexdrive',\n    name: 'N64 - DexDrive',\n    component: () => import(/* webpackChunkName: \"n64-dexdrive\" */ '../views/N64DexDrive.vue'),\n  },\n  {\n    path: '/n64/controller-pak',\n    name: 'N64 - Controller Pak',\n    component: () => import(/* webpackChunkName: \"n64-mempack\" */ '../views/N64Mempack.vue'),\n  },\n  {\n    path: '/n64',\n    redirect: '/n64/dexdrive',\n  },\n  {\n    path: '/mister',\n    name: 'MiSTer',\n    component: () => import(/* webpackChunkName: \"mister\" */ '../views/Mister.vue'),\n  },\n  {\n    path: '/flash-carts',\n    name: 'Flash carts',\n    component: () => import(/* webpackChunkName: \"flash-carts\" */ '../views/FlashCarts.vue'),\n  },\n  {\n    path: '/online-emulators',\n    name: 'Online emulators',\n    component: () => import(/* webpackChunkName: \"online-emulators\" */ '../views/OnlineEmulators.vue'),\n  },\n  {\n    path: '/sega-cd',\n    name: 'Sega CD',\n    component: () => import(/* webpackChunkName: \"sega-cd\" */ '../views/SegaCd.vue'),\n  },\n  {\n    path: '/sega-saturn',\n    redirect: '/sega-saturn/emulator',\n  },\n  {\n    path: '/sega-saturn/emulator',\n    name: 'Sega Saturn - Emulator',\n    component: () => import(/* webpackChunkName: \"sega-saturn-emulator\" */ '../views/SegaSaturnEmulator.vue'),\n  },\n  {\n    path: '/sega-saturn/saroo',\n    name: 'Sega Saturn - Saroo',\n    component: () => import(/* webpackChunkName: \"sega-saturn-saroo\" */ '../views/SegaSaturnSaroo.vue'),\n  },\n  {\n    path: '/dreamcast',\n    name: 'Dreamcast',\n    component: () => import(/* webpackChunkName: \"dreamcast\" */ '../views/Dreamcast.vue'),\n  },\n  {\n    path: '/nintendo-switch-online',\n    name: 'Nintendo Switch Online',\n    component: () => import(/* webpackChunkName: \"nintendo-switch-online\" */ '../views/NintendoSwitchOnline.vue'),\n  },\n  {\n    path: '/gamecube',\n    name: 'GameCube',\n    component: () => import(/* webpackChunkName: \"gamecube\" */ '../views/GameCube.vue'),\n  },\n  {\n    path: '/srm-sav',\n    name: '.srm to/from .sav',\n    component: () => import(/* webpackChunkName: \"srm-sav\" */ '../views/SrmSav.vue'),\n  },\n  {\n    path: '/utilities',\n    redirect: '/utilities/advanced',\n  },\n  {\n    path: '/utilities/troubleshooting',\n    name: 'Troubleshooting',\n    component: () => import(/* webpackChunkName: \"troubleshooting\" */ '../views/Troubleshooting.vue'),\n  },\n  {\n    path: '/utilities/erase-save',\n    name: 'Erase save',\n    component: () => import(/* webpackChunkName: \"erase-save\" */ '../views/EraseSaveView.vue'),\n  },\n  {\n    path: '/utilities/advanced',\n    name: 'Advanced',\n    component: () => import(/* webpackChunkName: \"advanced\" */ '../views/AdvancedView.vue'),\n    props: (route) => ({ initialTab: route.query.tab }),\n  },\n  {\n    path: '/other-converters',\n    name: 'OtherConverters',\n    component: () => import(/* webpackChunkName: \"other-converters\" */ '../views/OtherConverters.vue'),\n  },\n  {\n    path: '/download-saves',\n    name: 'DownloadSaves',\n    component: () => import(/* webpackChunkName: \"download-saves\" */ '../views/DownloadSaves.vue'),\n  },\n  {\n    path: '/original-hardware',\n    name: 'OriginalHardware',\n    component: () => import(/* webpackChunkName: \"original-hardware\" */ '../views/OriginalHardware.vue'),\n    props: (route) => ({ initialSortBy: route.query.sort }),\n  },\n  {\n    path: '/about',\n    name: 'About',\n    // route level code-splitting\n    // this generates a separate chunk (about.[hash].js) for this route\n    // which is lazy-loaded when the route is visited.\n    component: () => import(/* webpackChunkName: \"about\" */ '../views/About.vue'),\n  },\n  // Old paths\n  {\n    path: '/action-replay',\n    redirect: '/gba/action-replay',\n  },\n  {\n    path: '/gameshark',\n    redirect: '/gba/gameshark',\n  },\n  {\n    path: '/gameshark-sp',\n    redirect: '/gba/gameshark-sp',\n  },\n  {\n    path: '/troubleshooting',\n    redirect: '/utilities/troubleshooting',\n  },\n];\n\nconst router = new VueRouter({\n  routes,\n});\n\nexport default router;\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/Components/Basics.js",
    "content": "export default class DreamcastBasics {\n  static LITTLE_ENDIAN = true;\n\n  static WORD_SIZE_IN_BYTES = 4;\n\n  static BLOCK_SIZE = 512;\n\n  static NUM_BLOCKS = 256;\n\n  static TOTAL_SIZE = this.BLOCK_SIZE * this.NUM_BLOCKS;\n\n  static SYSTEM_INFO_BLOCK_NUMBER = 0xFF; // https://github.com/flyinghead/flycast/blob/33833cfd1ed2d94d907223442fdb8cdafd8d5d80/core/hw/maple/maple_devs.cpp#L516\n\n  static SYSTEM_INFO_SIZE_IN_BLOCKS = 1;\n\n  static FILE_ALLOCATION_TABLE_BLOCK_NUMBER = 0xFE; // https://github.com/flyinghead/flycast/blob/33833cfd1ed2d94d907223442fdb8cdafd8d5d80/core/hw/maple/maple_devs.cpp#L518\n\n  static FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS = 1;\n\n  static DIRECTORY_BLOCK_NUMBER = 0xFD; // https://github.com/flyinghead/flycast/blob/33833cfd1ed2d94d907223442fdb8cdafd8d5d80/core/hw/maple/maple_devs.cpp#L522\n\n  static DIRECTORY_SIZE_IN_BLOCKS = 13;\n\n  static DIRECTORY_END_BLOCK_NUMBER = this.DIRECTORY_BLOCK_NUMBER - this.DIRECTORY_SIZE_IN_BLOCKS + 1;\n\n  static EXTRA_AREA_BLOCK_NUMBER = this.DIRECTORY_BLOCK_NUMBER - this.DIRECTORY_SIZE_IN_BLOCKS;\n\n  static EXTRA_AREA_SIZE_IN_BLOCKS = 41;\n\n  static SAVE_AREA_SIZE_IN_BLOCKS = 200;\n\n  static SAVE_AREA_BLOCK_NUMBER = this.SAVE_AREA_SIZE_IN_BLOCKS - 1; // All of the block numbers specify the final block number, so this one needs to too\n\n  static DEFAULT_GAME_BLOCK = 0;\n\n  static DEFAULT_MAX_GAME_SIZE = 128; // The hardware to run a game can't address memory past this boundary so we should never need a value greater than this\n\n  static MAX_NUM_GAMES = 1;\n\n  static FILE_TYPE_DATA = 'Data';\n\n  static FILE_TYPE_GAME = 'Game';\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/Components/Directory.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nFormat taken from https://mc.pp.se/dc/vms/flashmem.html\n\nThe directory is just a sequence of directory entries\n\nA directory entry that's all 0's is empty\n*/\n\nimport Util from '../../../util/util';\nimport ArrayUtil from '../../../util/Array';\n\nimport DreamcastBasics from './Basics';\nimport DreamcastDirectoryEntry from './DirectoryEntry';\n\nconst {\n  BLOCK_SIZE,\n  DIRECTORY_SIZE_IN_BLOCKS,\n  SAVE_AREA_SIZE_IN_BLOCKS,\n} = DreamcastBasics;\n\nconst DIRECTORY_PADDING_VALUE = 0x00;\n\nconst MAX_DIRECTORY_ENTRIES = SAVE_AREA_SIZE_IN_BLOCKS;\nconst DIRECTORY_ENTRY_LENGTH = DreamcastDirectoryEntry.LENGTH;\n\nexport default class DreamcastDirectory {\n  static writeDirectory(saveFilesWithBlockInfo) {\n    const directoryEntries = saveFilesWithBlockInfo.map((saveFile) => DreamcastDirectoryEntry.writeDirectoryEntry(saveFile));\n\n    const directoryEntriesSize = directoryEntries.length * DreamcastDirectoryEntry.LENGTH;\n\n    const padding = Util.getFilledArrayBuffer((BLOCK_SIZE * DIRECTORY_SIZE_IN_BLOCKS) - directoryEntriesSize, DIRECTORY_PADDING_VALUE);\n\n    return Util.concatArrayBuffers([...directoryEntries, padding]);\n  }\n\n  static readDirectory(arrayBuffer) {\n    const directoryEntries = ArrayUtil.createSequentialArray(0, MAX_DIRECTORY_ENTRIES).map((i) => {\n      const directoryEntryArrayBuffer = arrayBuffer.slice(i * DIRECTORY_ENTRY_LENGTH, (i + 1) * DIRECTORY_ENTRY_LENGTH);\n\n      return DreamcastDirectoryEntry.readDirectoryEntry(directoryEntryArrayBuffer);\n    }).filter((directoryEntry) => directoryEntry !== null);\n\n    return directoryEntries;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/Components/DirectoryEntry.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nFormat taken from\n - https://mc.pp.se/dc/vms/flashmem.html\n - https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fs_utils.h#L68\n - https://segaxtreme.net/resources/maple-bus-1-0-function-type-specifications-ft1-storage-function.195/\n\n0x00      : 8 bit int : file type (0x00 = no file, 0x33 = data, 0xcc = game)\n0x01      : 8 bit int : copy protect (0xff = copy protected, anything else = copy okay. Can limit number of times file can be copied by incrementing this value when it's copied)\n0x02-0x03 : 16 bit int (little endian) : location of first block\n0x04-0x0f : shift-jis string : filename (12 characters)\n0x10-0x17 : BCD timestamp (see below) : file update time\n0x18-0x19 : 16 bit int (little endian) : file size (in blocks)\n0x1a-0x1b : 16 bit int (little endian) : file header block number (0 for data, 1 for game): https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fs_utils.h#L76\n0x1c-0x1f : unused (all zero)\n\nThen in the save data there is the file header block. It can be anywhere in the file data and its location is specified in the directory entry.\n\n0x00-0x0F : Storage comment (note that comments are stored with little endian byte ordering)\n0x10-0x3F : File comment\n0x40-0x1FF : Icon data\n*/\n\nimport Util from '../../../util/util';\n\nimport DreamcastBasics from './Basics';\nimport DreamcastUtil from '../Util';\n\nconst {\n  LITTLE_ENDIAN,\n  BLOCK_SIZE,\n  FILE_TYPE_DATA,\n  FILE_TYPE_GAME,\n} = DreamcastBasics;\n\nconst FILE_TYPE_OFFSET = 0x00;\nconst COPY_PROTECT_OFFSET = 0x01;\nconst FIRST_BLOCK_NUMBER_OFFSET = 0x02;\nconst FILENAME_OFFSET = 0x04;\nconst FILENAME_LENGTH = 12;\nconst FILENAME_ENCODING = 'shift-jis'; // https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fs_utils.h#L73\nconst FILE_CREATION_TIME_OFFSET = 0x10;\nconst FILE_SIZE_IN_BLOCKS_OFFSET = 0x18;\nconst FILE_HEADER_BLOCK_NUMBER_OFFSET = 0x1A;\n\nconst FILE_TYPE_LOOKUP = {\n  0x00: 'No file',\n  0x33: FILE_TYPE_DATA,\n  0xCC: FILE_TYPE_GAME,\n};\n\nconst UNKNOWN_FILE_TYPE_STRING = 'Unknown';\nconst UNKNOWN_FILE_TYPE = 0xFF;\n\nconst POSSIBLE_FILE_TYPES = Object.keys(FILE_TYPE_LOOKUP);\n\nconst COPY_PROTECT_COPY_OKAY = 0x00;\nconst COPY_PROTECT_NO_COPY = 0xFF;\n\nconst DIRECTORY_ENTRY_PADDING_VALUE = 0x00;\n\nconst DIRECTORY_ENTRY_LENGTH = 32;\n\nconst FILE_HEADER_COMMENT_ENCODING = 'shift-jis'; // The official docs say that the storage comment is ascii and the file comment is either one- or two-byte encoding. In practice, I've found that both comments can be encoded with shift-jis (which is identical with ascii for most of the first 127 ascii characters).\nconst FILE_HEADER_STORAGE_COMMENT_OFFSET = 0x00;\nconst FILE_HEADER_STORAGE_COMMENT_LENGTH = 0x10;\nconst FILE_HEADER_FILE_COMMENT_OFFSET = 0x10;\nconst FILE_HEADER_FILE_COMMENT_LENGTH = 0x30;\n\nfunction getFileTypeString(fileType) {\n  if (Object.hasOwn(FILE_TYPE_LOOKUP, fileType)) {\n    return FILE_TYPE_LOOKUP[fileType];\n  }\n\n  return UNKNOWN_FILE_TYPE_STRING;\n}\n\nfunction getFileTypeValue(fileTypeString) {\n  const fileType = POSSIBLE_FILE_TYPES.find((key) => FILE_TYPE_LOOKUP[key] === fileTypeString);\n\n  if (fileType === undefined) {\n    return UNKNOWN_FILE_TYPE;\n  }\n\n  return fileType;\n}\n\nexport default class DreamcastDirectoryEntry {\n  static LENGTH = DIRECTORY_ENTRY_LENGTH;\n\n  static writeDirectoryEntry(saveFile) {\n    let arrayBuffer = Util.getFilledArrayBuffer(DIRECTORY_ENTRY_LENGTH, DIRECTORY_ENTRY_PADDING_VALUE);\n\n    arrayBuffer = Util.setString(arrayBuffer, FILENAME_OFFSET, saveFile.filename, FILENAME_ENCODING, FILENAME_LENGTH);\n    arrayBuffer = DreamcastUtil.writeBcdTimestamp(arrayBuffer, FILE_CREATION_TIME_OFFSET, saveFile.fileCreationTime);\n\n    const dataView = new DataView(arrayBuffer);\n\n    dataView.setUint8(FILE_TYPE_OFFSET, getFileTypeValue(saveFile.fileType));\n    dataView.setUint8(COPY_PROTECT_OFFSET, saveFile.copyProtected ? COPY_PROTECT_NO_COPY : COPY_PROTECT_COPY_OKAY);\n    dataView.setUint16(FIRST_BLOCK_NUMBER_OFFSET, saveFile.firstBlockNumber, LITTLE_ENDIAN);\n    dataView.setUint16(FILE_SIZE_IN_BLOCKS_OFFSET, saveFile.fileSizeInBlocks, LITTLE_ENDIAN);\n    dataView.setUint16(FILE_HEADER_BLOCK_NUMBER_OFFSET, saveFile.fileHeaderBlockNumber, LITTLE_ENDIAN);\n\n    return arrayBuffer;\n  }\n\n  static getComments(fileHeaderBlockNumber, rawData) {\n    const fileHeaderBlock = rawData.slice(fileHeaderBlockNumber * BLOCK_SIZE, (fileHeaderBlockNumber + 1) * BLOCK_SIZE);\n    const uint8Array = new Uint8Array(fileHeaderBlock);\n\n    // Some of these strings contain control characters and other garbage at the end. We can try to filter them out\n    let endOfStringIndex = uint8Array.findIndex((val) => val < 0x20); // 0x20 is a space character, and all the ones prior are control codes\n    if (endOfStringIndex < 0) {\n      endOfStringIndex = uint8Array.length;\n    }\n\n    const uint8ArrayTruncated = uint8Array.slice(0, endOfStringIndex);\n\n    return {\n      storageComment: Util.readNullTerminatedString(uint8ArrayTruncated, FILE_HEADER_STORAGE_COMMENT_OFFSET, FILE_HEADER_COMMENT_ENCODING, FILE_HEADER_STORAGE_COMMENT_LENGTH),\n      fileComment: Util.readNullTerminatedString(uint8ArrayTruncated, FILE_HEADER_FILE_COMMENT_OFFSET, FILE_HEADER_COMMENT_ENCODING, FILE_HEADER_FILE_COMMENT_LENGTH),\n    };\n  }\n\n  static readDirectoryEntry(arrayBuffer) {\n    const uint8Array = new Uint8Array(arrayBuffer);\n    const dataView = new DataView(arrayBuffer);\n\n    // An empty entry is one that's all 0x0 (might only be necessary to check the file type?)\n    const isValidEntry = uint8Array.some((i) => i !== DIRECTORY_ENTRY_PADDING_VALUE);\n\n    if (!isValidEntry) {\n      return null;\n    }\n\n    const fileTypeVal = dataView.getUint8(FILE_TYPE_OFFSET);\n    const fileType = getFileTypeString(fileTypeVal);\n    const copyProtected = dataView.getUint8(COPY_PROTECT_OFFSET) === COPY_PROTECT_NO_COPY; // Any value other than 0xFF means that the file can be copied: https://segaxtreme.net/resources/maple-bus-1-0-function-type-specifications-ft1-storage-function.195/\n    const firstBlockNumber = dataView.getUint16(FIRST_BLOCK_NUMBER_OFFSET, LITTLE_ENDIAN);\n    const filename = Util.readNullTerminatedString(uint8Array, FILENAME_OFFSET, FILENAME_ENCODING, FILENAME_LENGTH);\n    const fileCreationTime = DreamcastUtil.readBcdTimestamp(arrayBuffer, FILE_CREATION_TIME_OFFSET);\n    const fileSizeInBlocks = dataView.getUint16(FILE_SIZE_IN_BLOCKS_OFFSET, LITTLE_ENDIAN);\n    const fileHeaderBlockNumber = dataView.getUint16(FILE_HEADER_BLOCK_NUMBER_OFFSET, LITTLE_ENDIAN);\n\n    return {\n      fileType,\n      copyProtected,\n      firstBlockNumber,\n      filename,\n      fileCreationTime,\n      fileSizeInBlocks,\n      fileHeaderBlockNumber,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/Components/FileAllocationTable.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nDreamcast file allocation table block\n\nFormat taken from https://mc.pp.se/dc/vms/flashmem.html and https://segaxtreme.net/resources/maple-bus-1-0-function-type-specifications-ft1-storage-function.195/\n\nEach 16 bit value indicates the block number of the next block in the file.\n\nSpecial values:\n\n- 0xFFFC: Block is unallocated\n- 0xFFFA: This is the last block in a file\n- 0xFFFF: This block is physically damaged\n*/\n\nimport Util from '../../../util/util';\nimport ArrayUtil from '../../../util/Array';\n\nimport DreamcastBasics from './Basics';\n\nconst {\n  LITTLE_ENDIAN,\n  BLOCK_SIZE,\n  DEFAULT_GAME_BLOCK,\n  SAVE_AREA_BLOCK_NUMBER,\n  SYSTEM_INFO_BLOCK_NUMBER,\n  FILE_ALLOCATION_TABLE_BLOCK_NUMBER,\n  DIRECTORY_BLOCK_NUMBER,\n  DIRECTORY_SIZE_IN_BLOCKS,\n} = DreamcastBasics;\n\nconst UNALLOCATED_BLOCK = 0xFFFC;\nconst LAST_BLOCK_IN_FILE = 0xFFFA;\nconst BLOCK_PHYSICALLY_DAMAGED = 0xFFFF;\n\nconst PADDING_VALUE = 0x00;\n\nexport default class DreamcastFileAllocationTable {\n  static UNALLOCATED_BLOCK = UNALLOCATED_BLOCK;\n\n  static LAST_BLOCK_IN_FILE = LAST_BLOCK_IN_FILE;\n\n  static BLOCK_PHYSICALLY_DAMAGED = BLOCK_PHYSICALLY_DAMAGED;\n\n  static writeFileAllocationTable(gameFilesWithBlockInfo, dataFilesWithBlockInfo) {\n    const arrayBuffer = Util.getFilledArrayBuffer(BLOCK_SIZE, PADDING_VALUE); // The portion of the table that corresponds to the padding between the save area and the directory is filled with 0x00 rather than UNALLOCATED_BLOCK\n    const dataView = new DataView(arrayBuffer);\n\n    // Write out entries for the various system blocks\n\n    dataView.setUint16(SYSTEM_INFO_BLOCK_NUMBER * 2, LAST_BLOCK_IN_FILE, LITTLE_ENDIAN);\n    dataView.setUint16(FILE_ALLOCATION_TABLE_BLOCK_NUMBER * 2, LAST_BLOCK_IN_FILE, LITTLE_ENDIAN);\n    dataView.setUint16((DIRECTORY_BLOCK_NUMBER - DIRECTORY_SIZE_IN_BLOCKS + 1) * 2, LAST_BLOCK_IN_FILE, LITTLE_ENDIAN);\n\n    ArrayUtil.createReverseSequentialArray(DIRECTORY_BLOCK_NUMBER, DIRECTORY_SIZE_IN_BLOCKS - 1).forEach((i) => dataView.setUint16(i * 2, i - 1, LITTLE_ENDIAN));\n\n    // Write out entries for games to the beginning of the table\n\n    let lastUnusedGameBlockNumber = DEFAULT_GAME_BLOCK;\n\n    gameFilesWithBlockInfo.forEach((saveFile) => {\n      ArrayUtil.createSequentialArray(saveFile.firstBlockNumber, saveFile.fileSizeInBlocks - 1).forEach((i) => dataView.setUint16(i * 2, i + 1, LITTLE_ENDIAN));\n      dataView.setUint16((saveFile.firstBlockNumber + saveFile.fileSizeInBlocks - 1) * 2, LAST_BLOCK_IN_FILE, LITTLE_ENDIAN);\n\n      lastUnusedGameBlockNumber = saveFile.firstBlockNumber + saveFile.fileSizeInBlocks;\n    });\n\n    // Write out entries for data to the end of the table\n\n    let lastUnusedDataBlockNumber = SAVE_AREA_BLOCK_NUMBER;\n\n    dataFilesWithBlockInfo.forEach((saveFile) => {\n      ArrayUtil.createReverseSequentialArray(saveFile.firstBlockNumber, saveFile.fileSizeInBlocks - 1).forEach((i) => dataView.setUint16(i * 2, i - 1, LITTLE_ENDIAN));\n      dataView.setUint16((saveFile.firstBlockNumber - saveFile.fileSizeInBlocks + 1) * 2, LAST_BLOCK_IN_FILE, LITTLE_ENDIAN);\n\n      lastUnusedDataBlockNumber = saveFile.firstBlockNumber - saveFile.fileSizeInBlocks;\n    });\n\n    const numUnallocatedBlocks = lastUnusedDataBlockNumber - lastUnusedGameBlockNumber + 1;\n    ArrayUtil.createReverseSequentialArray(lastUnusedDataBlockNumber, numUnallocatedBlocks).forEach((i) => dataView.setUint16(i * 2, UNALLOCATED_BLOCK, LITTLE_ENDIAN));\n\n    return arrayBuffer;\n  }\n\n  static readFileAllocationTable(arrayBuffer) {\n    const numEntries = arrayBuffer.byteLength / 2;\n\n    const dataView = new DataView(arrayBuffer);\n\n    const nextBlockInFile = new Array(numEntries);\n\n    for (let i = 0; i < numEntries; i += 1) {\n      const offset = i * 2;\n      nextBlockInFile[i] = dataView.getUint16(offset, LITTLE_ENDIAN);\n\n      if ((nextBlockInFile[i] >= numEntries)\n        && (nextBlockInFile[i] !== UNALLOCATED_BLOCK)\n        && (nextBlockInFile[i] !== LAST_BLOCK_IN_FILE)\n        && (nextBlockInFile[i] !== BLOCK_PHYSICALLY_DAMAGED)) {\n        throw new Error(`Found invalid value 0x${nextBlockInFile[i].toString(16)} in file allocation table at offset ${offset}`);\n      }\n    }\n\n    return nextBlockInFile;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/Components/SystemInfo.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nDreamcast system info block\n\nFormat taken from:\n- https://vmu.falcogirgis.net/filesystem.html\n- https://mc.pp.se/dc/vms/flashmem.html\n- https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fat.h#L120\n- https://segaxtreme.net/resources/maple-bus-1-0-function-type-specifications-ft1-storage-function.195/\n- https://github.com/flyinghead/flycast/blob/33833cfd1ed2d94d907223442fdb8cdafd8d5d80/core/hw/maple/maple_devs.cpp#L510\n\n0x00-0x0f : All these bytes contain 0x55 to indicate a properly formatted card.\n0x10      : custom VMS colour (1 = use custom colours below, 0 = standard colour)\n0x11      : VMS colour blue component\n0x12      : VMS colour green component\n0x13      : VMS colour red component\n0x14      : VMS colour alpha component (use 100 for semi-transparent, 255 for opaque)\n0x15-0x2f : not used (all zeroes)\n0x30-0x37 : BCD timestamp (see Directory below)\n0x38-0x3f : not used (all zeroes)\n0x40-0x41 : largest block number (255): https://github.com/flyinghead/flycast/blob/33833cfd1ed2d94d907223442fdb8cdafd8d5d80/core/hw/maple/maple_devs.cpp#L512\n0x42-0x43 : partitian number (0): the official docs indicate there were plans for this but in practice it seems to always be zero\n0x44-0x45 : location of system area block (255)\n0x46-0x47 : location of FAT block (254)\n0x48-0x49 : size of FAT in blocks (1)\n0x4a-0x4b : location of directory (253)\n0x4c-0x4d : size of directory in blocks (13)\n0x4e      : icon shape for this VMS (0-123)\n0x4f      : unknown (sort flag? https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fat.h#L145 reserved? https://github.com/flyinghead/flycast/blob/33833cfd1ed2d94d907223442fdb8cdafd8d5d80/core/hw/maple/maple_devs.cpp#L525)\n0x50-0x51 : size of the save area (200) (libevum describes it as the location of the extra region, but the other regions are specified by their ending block number not beginning) https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fat.h#L146 (the official docs say that this is the block number of the start of the save area, however that would be 199 and this contains 200)\n0x52-0x53 : size of the extra area (41) https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fat.h#L147 listed in flycast as \"number of save blocks\" and set at 31 which doesn't match the size or location of the save area, nor the number of empty blocks between the save area and the system blocks. https://github.com/flyinghead/flycast/blob/33833cfd1ed2d94d907223442fdb8cdafd8d5d80/core/hw/maple/maple_devs.cpp#L531. It's listed in the official docs along with the previous value as specifying the save area: start block number and then number of blocks. However, that would be the values 199 and 200 respectively\n0x54-0x55 : game block (0) (starting location for game file): https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fat.h#L148\n0x56-0x57 : game size (128) (maximum size for game file): https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fat.h#L149\n\nNotes:\n\n0x10-0x2f : the official docs say that this is the volume label \"The contents of this field can be anything.\".\n            https://vmu.falcogirgis.net/filesystem.html says it's the VMU color then unused bytes as listed above, as does libevmu. The sample file I found in practice conformed to this format.\n*/\n\nimport Util from '../../../util/util';\n\nimport DreamcastBasics from './Basics';\nimport DreamcastUtil from '../Util';\n\nconst {\n  LITTLE_ENDIAN,\n} = DreamcastBasics;\n\nconst MAGIC_OFFSET = 0;\nconst MAGIC_LENGTH = 0x10;\nconst MAGIC_VALUE = 0x55;\nconst MAGIC_BYTES = new Uint8Array(Util.getFilledArrayBuffer(MAGIC_LENGTH, MAGIC_VALUE));\n\nconst USE_CUSTOM_COLOR_OFFSET = 0x10;\nconst CUSTOM_COLOR_BLUE_OFFSET = 0x11;\nconst CUSTOM_COLOR_GREEN_OFFSET = 0x12;\nconst CUSTOM_COLOR_RED_OFFSET = 0x13;\nconst CUSTOM_COLOR_ALPHA_OFFSET = 0x14;\nconst TIMESTAMP_OFFSET = 0x30;\nconst LARGEST_BLOCK_NUMBER_OFFSET = 0x40;\nconst PARTITION_NUMBER_OFFSET = 0x42;\nconst SYSTEM_INFO_BLOCK_NUMBER_OFFSET = 0x44;\nconst FILE_ALLOCATION_TABLE_BLOCK_NUMBER_OFFSET = 0x46;\nconst FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS_OFFSET = 0x48;\nconst DIRECTORY_BLOCK_NUMBER_OFFSET = 0x4A;\nconst DIRECTORY_SIZE_IN_BLOCKS_OFFSET = 0x4C;\nconst ICON_SHAPE_OFFSET = 0x4E;\nconst SAVE_AREA_SIZE_IN_BLOCKS_OFFSET = 0x50;\nconst EXTRA_AREA_SIZE_IN_BLOCKS_OFFSET = 0x52;\nconst GAME_BLOCK_OFFSET = 0x54;\nconst MAX_GAME_SIZE_OFFSET = 0x56;\n\nconst DEFAULT_PARTITION_NUMBER = 0;\n\nconst PADDING_VALUE = 0x00;\n\nexport default class DreamcastSystemInfo {\n  static writeSystemInfo(volumeInfo) {\n    // Many of the fields within the system are set to fixed, hardcoded, values in real VMU data.\n    // So we don't require them to be set in the volumeInfo that we're passed\n\n    let arrayBuffer = Util.getFilledArrayBuffer(DreamcastBasics.BLOCK_SIZE, PADDING_VALUE);\n\n    arrayBuffer = Util.setMagicBytes(arrayBuffer, MAGIC_OFFSET, MAGIC_BYTES);\n    arrayBuffer = DreamcastUtil.writeBcdTimestamp(arrayBuffer, TIMESTAMP_OFFSET, volumeInfo.timestamp);\n\n    const dataView = new DataView(arrayBuffer);\n\n    dataView.setUint8(USE_CUSTOM_COLOR_OFFSET, volumeInfo.useCustomColor ? 1 : 0);\n\n    if (Object.hasOwn(volumeInfo, 'customColor')) {\n      dataView.setUint8(CUSTOM_COLOR_BLUE_OFFSET, volumeInfo.customColor.blue);\n      dataView.setUint8(CUSTOM_COLOR_GREEN_OFFSET, volumeInfo.customColor.green);\n      dataView.setUint8(CUSTOM_COLOR_RED_OFFSET, volumeInfo.customColor.red);\n      dataView.setUint8(CUSTOM_COLOR_ALPHA_OFFSET, volumeInfo.customColor.alpha);\n    } else {\n      dataView.setUint8(CUSTOM_COLOR_BLUE_OFFSET, 0);\n      dataView.setUint8(CUSTOM_COLOR_GREEN_OFFSET, 0);\n      dataView.setUint8(CUSTOM_COLOR_RED_OFFSET, 0);\n      dataView.setUint8(CUSTOM_COLOR_ALPHA_OFFSET, 0);\n    }\n\n    dataView.setUint16(LARGEST_BLOCK_NUMBER_OFFSET, DreamcastBasics.NUM_BLOCKS - 1, LITTLE_ENDIAN);\n    dataView.setUint16(PARTITION_NUMBER_OFFSET, DEFAULT_PARTITION_NUMBER, LITTLE_ENDIAN);\n    dataView.setUint16(SYSTEM_INFO_BLOCK_NUMBER_OFFSET, DreamcastBasics.SYSTEM_INFO_BLOCK_NUMBER, LITTLE_ENDIAN);\n\n    dataView.setUint16(FILE_ALLOCATION_TABLE_BLOCK_NUMBER_OFFSET, DreamcastBasics.FILE_ALLOCATION_TABLE_BLOCK_NUMBER, LITTLE_ENDIAN);\n    dataView.setUint16(FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS_OFFSET, DreamcastBasics.FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS, LITTLE_ENDIAN);\n\n    dataView.setUint16(DIRECTORY_BLOCK_NUMBER_OFFSET, DreamcastBasics.DIRECTORY_BLOCK_NUMBER, LITTLE_ENDIAN);\n    dataView.setUint16(DIRECTORY_SIZE_IN_BLOCKS_OFFSET, DreamcastBasics.DIRECTORY_SIZE_IN_BLOCKS, LITTLE_ENDIAN);\n\n    dataView.setUint8(ICON_SHAPE_OFFSET, volumeInfo.iconShape);\n\n    dataView.setUint16(SAVE_AREA_SIZE_IN_BLOCKS_OFFSET, DreamcastBasics.SAVE_AREA_SIZE_IN_BLOCKS, LITTLE_ENDIAN);\n    dataView.setUint16(EXTRA_AREA_SIZE_IN_BLOCKS_OFFSET, DreamcastBasics.EXTRA_AREA_SIZE_IN_BLOCKS, LITTLE_ENDIAN);\n\n    dataView.setUint16(GAME_BLOCK_OFFSET, DreamcastBasics.DEFAULT_GAME_BLOCK, LITTLE_ENDIAN);\n    dataView.setUint16(MAX_GAME_SIZE_OFFSET, DreamcastBasics.DEFAULT_MAX_GAME_SIZE, LITTLE_ENDIAN);\n\n    return arrayBuffer;\n  }\n\n  static readSystemInfo(arrayBuffer) {\n    Util.checkMagicBytes(arrayBuffer, MAGIC_OFFSET, MAGIC_BYTES);\n\n    const dataView = new DataView(arrayBuffer);\n\n    const useCustomColor = (dataView.getUint8(USE_CUSTOM_COLOR_OFFSET) !== 0);\n    const customColor = {\n      blue: dataView.getUint8(CUSTOM_COLOR_BLUE_OFFSET),\n      green: dataView.getUint8(CUSTOM_COLOR_GREEN_OFFSET),\n      red: dataView.getUint8(CUSTOM_COLOR_RED_OFFSET),\n      alpha: dataView.getUint8(CUSTOM_COLOR_ALPHA_OFFSET),\n    };\n\n    const timestamp = DreamcastUtil.readBcdTimestamp(arrayBuffer, TIMESTAMP_OFFSET);\n\n    const largestBlockNumber = dataView.getUint16(LARGEST_BLOCK_NUMBER_OFFSET, LITTLE_ENDIAN);\n    const partitionNumber = dataView.getUint16(PARTITION_NUMBER_OFFSET, LITTLE_ENDIAN);\n    const systemInfoBlockNumber = dataView.getUint16(SYSTEM_INFO_BLOCK_NUMBER_OFFSET, LITTLE_ENDIAN);\n\n    const fileAllocationTableBlockNumber = dataView.getUint16(FILE_ALLOCATION_TABLE_BLOCK_NUMBER_OFFSET, LITTLE_ENDIAN);\n    const fileAllocationTableSizeInBlocks = dataView.getUint16(FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS_OFFSET, LITTLE_ENDIAN);\n\n    const directoryBlockNumber = dataView.getUint16(DIRECTORY_BLOCK_NUMBER_OFFSET, LITTLE_ENDIAN);\n    const directorySizeInBlocks = dataView.getUint16(DIRECTORY_SIZE_IN_BLOCKS_OFFSET, LITTLE_ENDIAN);\n\n    const iconShape = dataView.getUint8(ICON_SHAPE_OFFSET);\n\n    const saveAreaSizeInBlocks = dataView.getUint16(SAVE_AREA_SIZE_IN_BLOCKS_OFFSET, LITTLE_ENDIAN);\n    const extraAreaSizeInBlocks = dataView.getUint16(EXTRA_AREA_SIZE_IN_BLOCKS_OFFSET, LITTLE_ENDIAN);\n\n    const gameBlock = dataView.getUint16(GAME_BLOCK_OFFSET, LITTLE_ENDIAN);\n    const maxGameSize = dataView.getUint16(MAX_GAME_SIZE_OFFSET, LITTLE_ENDIAN);\n\n    return {\n      useCustomColor,\n      customColor,\n      timestamp,\n      largestBlockNumber,\n      partitionNumber,\n      systemInfo: {\n        blockNumber: systemInfoBlockNumber,\n        sizeInBlocks: DreamcastBasics.SYSTEM_INFO_SIZE_IN_BLOCKS,\n      },\n      fileAllocationTable: {\n        blockNumber: fileAllocationTableBlockNumber,\n        sizeInBlocks: fileAllocationTableSizeInBlocks,\n      },\n      directory: {\n        blockNumber: directoryBlockNumber,\n        sizeInBlocks: directorySizeInBlocks,\n      },\n      iconShape,\n      extraArea: {\n        blockNumber: DreamcastBasics.EXTRA_AREA_BLOCK_NUMBER,\n        sizeInBlocks: extraAreaSizeInBlocks,\n      },\n      saveArea: {\n        blockNumber: DreamcastBasics.SAVE_AREA_BLOCK_NUMBER,\n        sizeInBlocks: saveAreaSizeInBlocks,\n      },\n      gameBlock,\n      maxGameSize,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/Dreamcast.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThe format for a memory card image\n\nTaken from https://mc.pp.se/dc/vms/flashmem.html\n\nOfficial documentation here: https://segaxtreme.net/resources/maple-bus-1-0-function-type-specifications-ft1-storage-function.195/\n\nBlocks 0-199:   User save area\nBlocks 200-240: Not used\nBlocks 241-253: Directory\nBlock  254:     File allocation table\nBlock  255:     System information\n\nNote that the file is written back-to-front: we first write the blocks nearest the end of the file.\nBut within each block we write it from the end of the block closest to the start of the file.\nThis applies to all sections, but most notably to the Directory and User save area sections.\n\nThe exception is writing a game to the user save area: it starts at block 0 and must be written contiguously going forward\n*/\n\nimport Util from '../../util/util';\nimport ArrayUtil from '../../util/Array';\n\nimport DreamcastBasics from './Components/Basics';\nimport DreamcastSystemInfo from './Components/SystemInfo';\nimport DreamcastFileAllocationTable from './Components/FileAllocationTable';\nimport DreamcastDirectory from './Components/Directory';\nimport DreamcastDirectoryEntry from './Components/DirectoryEntry';\n\nconst {\n  BLOCK_SIZE,\n  TOTAL_SIZE,\n  MAX_DIRECTORY_ENTRIES,\n  DIRECTORY_END_BLOCK_NUMBER,\n  SAVE_AREA_BLOCK_NUMBER,\n  SAVE_AREA_SIZE_IN_BLOCKS,\n  SYSTEM_INFO_SIZE_IN_BLOCKS,\n  EXTRA_AREA_SIZE_IN_BLOCKS,\n  FILE_TYPE_GAME,\n  MAX_NUM_GAMES,\n  DEFAULT_GAME_BLOCK,\n} = DreamcastBasics;\n\nconst FILL_VALUE = 0x00;\n\nfunction concatBlocks(blockNumbers, arrayBuffer) {\n  const blocks = blockNumbers.map((i) => arrayBuffer.slice(i * BLOCK_SIZE, (i + 1) * BLOCK_SIZE));\n\n  return Util.concatArrayBuffers(blocks);\n}\n\nfunction getBlocks(blockNumber, sizeInBlocks, arrayBuffer) {\n  // The starting block is the one closest to the end of the file.\n  // However, we fill each block starting at the end of the block closest to the beginning of the file.\n  // So to make a contiguous blob of data here we need to concat our blocks starting from the end of the file\n\n  const blockNumbers = ArrayUtil.createReverseSequentialArray(blockNumber, sizeInBlocks);\n\n  return concatBlocks(blockNumbers, arrayBuffer);\n}\n\nfunction getBlocksForward(blockNumber, sizeInBlocks, arrayBuffer) {\n  // Some files are built incorrectly and arrange their blocks starting at the one closest to the beginning of the file\n\n  return arrayBuffer.slice(blockNumber * BLOCK_SIZE, (blockNumber + sizeInBlocks) * BLOCK_SIZE);\n}\n\nfunction createBlocksForward(arrayBuffer) {\n  // Split our array buffer into blocks\n\n  const numBlocks = Math.ceil(arrayBuffer.byteLength / BLOCK_SIZE);\n  const blocks = ArrayUtil.createSequentialArray(0, numBlocks).map((i) => arrayBuffer.slice(i * BLOCK_SIZE, (i + 1) * BLOCK_SIZE));\n\n  if (blocks[blocks.length - 1].byteLength < BLOCK_SIZE) {\n    const paddingLength = BLOCK_SIZE - blocks[blocks.length - 1].byteLength;\n\n    blocks[blocks.length - 1] = Util.concatArrayBuffers([blocks[blocks.length - 1], Util.getFilledArrayBuffer(paddingLength, FILL_VALUE)]);\n  }\n\n  return blocks;\n}\n\nfunction createBlocks(arrayBuffer) {\n  // Similar to getBlocks() we will split our array buffer into blocks and then reverse them\n\n  return createBlocksForward(arrayBuffer).reverse();\n}\n\nfunction getBlockNumbers(directoryEntry, fileAllocationTable) {\n  const blockNumbers = [];\n  let currentBlockNumber = directoryEntry.firstBlockNumber;\n\n  do {\n    if ((currentBlockNumber < 0) || (currentBlockNumber >= fileAllocationTable.length)) {\n      throw new Error(`Save file ${directoryEntry.filename} appears to be corrupted: it references invalid block ${currentBlockNumber}`);\n    }\n\n    if (fileAllocationTable[currentBlockNumber] === DreamcastFileAllocationTable.UNALLOCATED_BLOCK) {\n      throw new Error(`Save file ${directoryEntry.filename} appears to be corrupted: save file appears to contain a block that is unallocated`);\n    }\n\n    if (fileAllocationTable[currentBlockNumber] === DreamcastFileAllocationTable.BLOCK_PHYSICALLY_DAMAGED) {\n      throw new Error(`Save file ${directoryEntry.filename} appears to be corrupted: save file appears to contain a block that is physically damaged`);\n    }\n\n    blockNumbers.push(currentBlockNumber);\n    currentBlockNumber = fileAllocationTable[currentBlockNumber];\n  } while (currentBlockNumber !== DreamcastFileAllocationTable.LAST_BLOCK_IN_FILE);\n\n  if (blockNumbers.length !== directoryEntry.fileSizeInBlocks) {\n    throw new Error(`Save file ${directoryEntry.filename} appears to be corrupted: expected to find ${directoryEntry.fileSizeInBlocks} blocks `\n      + `but instead found ${blockNumbers.length} blocks when traversing file allocation table`);\n  }\n\n  return blockNumbers;\n}\n\nfunction getSaveFileWithBlockInfo(saveFile, currentBlockNumber) {\n  const fileSizeInBlocks = Math.ceil(saveFile.rawData.byteLength / BLOCK_SIZE);\n\n  return {\n    ...saveFile,\n    firstBlockNumber: currentBlockNumber,\n    fileSizeInBlocks,\n  };\n}\n\nfunction getGameFilesWithBlockInfo(gameFiles) {\n  let currentBlockNumber = DEFAULT_GAME_BLOCK; // Start at the beginning of the save area and work towards the end of the file\n\n  return gameFiles.map((saveFile) => {\n    const saveFileWithBlockInfo = getSaveFileWithBlockInfo(saveFile, currentBlockNumber);\n\n    currentBlockNumber += saveFileWithBlockInfo.fileSizeInBlocks;\n\n    return saveFileWithBlockInfo;\n  });\n}\n\nfunction getDataFilesWithBlockInfo(dataFiles) {\n  let currentBlockNumber = SAVE_AREA_BLOCK_NUMBER; // Start at the end of the save area and work towards the beginning of the file\n\n  return dataFiles.map((saveFile) => {\n    const saveFileWithBlockInfo = getSaveFileWithBlockInfo(saveFile, currentBlockNumber);\n\n    currentBlockNumber -= saveFileWithBlockInfo.fileSizeInBlocks;\n\n    return saveFileWithBlockInfo;\n  });\n}\n\nfunction splitArray(array, predicate) {\n  return array.reduce(\n    (accumulator, currentValue) => {\n      if (predicate(currentValue)) {\n        accumulator[0].push(currentValue); // Add to the first array if predicate is true\n      } else {\n        accumulator[1].push(currentValue); // Add to the second array if predicate is false\n      }\n      return accumulator;\n    },\n    [[], []],\n  );\n}\n\nexport default class DreamcastSaveData {\n  static createFromDreamcastData(arrayBuffer) {\n    if ((arrayBuffer.byteLength < TOTAL_SIZE) || ((arrayBuffer.byteLength % BLOCK_SIZE) !== 0)) {\n      throw new Error('This does not appear to be a Dreamcast VMU image');\n    }\n\n    // In theory a dreamcast image can be any number of blocks, with the final block specifying the system info and thus\n    // how the rest of the file is laid out.\n    // In practice I think all dreamcast images are the same size, but we may as well not assume they are\n\n    const finalBlockNumber = Math.floor(arrayBuffer.byteLength / BLOCK_SIZE) - 1;\n\n    const volumeInfo = DreamcastSystemInfo.readSystemInfo(getBlocks(finalBlockNumber, SYSTEM_INFO_SIZE_IN_BLOCKS, arrayBuffer));\n\n    const fileIsLaidOutForward = (volumeInfo.directory.blockNumber === DIRECTORY_END_BLOCK_NUMBER); // The file allocation table is typically just a single block long so it's not helpful as a hint. Thus we use the directory as a hint: if the last block is how it's specified then we know the file is laid out non-standard aka forwards\n\n    let fileAllocationTableBlocks = getBlocks(volumeInfo.fileAllocationTable.blockNumber, volumeInfo.fileAllocationTable.sizeInBlocks, arrayBuffer);\n    let directoryBlocks = getBlocks(volumeInfo.directory.blockNumber, volumeInfo.directory.sizeInBlocks, arrayBuffer);\n\n    if (fileIsLaidOutForward) {\n      fileAllocationTableBlocks = getBlocksForward(volumeInfo.fileAllocationTable.blockNumber, volumeInfo.fileAllocationTable.sizeInBlocks, arrayBuffer);\n      directoryBlocks = getBlocksForward(volumeInfo.directory.blockNumber, volumeInfo.directory.sizeInBlocks, arrayBuffer);\n    }\n\n    const fileAllocationTable = DreamcastFileAllocationTable.readFileAllocationTable(fileAllocationTableBlocks);\n    const directoryEntries = DreamcastDirectory.readDirectory(directoryBlocks);\n\n    const saveFiles = directoryEntries.map((directoryEntry) => {\n      const blockNumberList = getBlockNumbers(directoryEntry, fileAllocationTable);\n      const rawData = concatBlocks(blockNumberList, arrayBuffer);\n      const comments = DreamcastDirectoryEntry.getComments(directoryEntry.fileHeaderBlockNumber, rawData);\n\n      return {\n        ...directoryEntry,\n        ...comments,\n        blockNumberList,\n        rawData,\n      };\n    });\n\n    return new DreamcastSaveData(arrayBuffer, saveFiles, volumeInfo);\n  }\n\n  static createFromSaveFiles(saveFiles, volumeInfo) {\n    if (saveFiles.length > MAX_DIRECTORY_ENTRIES) {\n      throw new Error(`Unable to fit ${saveFiles.length} saves into a single VMU image. Max is ${MAX_DIRECTORY_ENTRIES}`);\n    }\n\n    const [gameFiles, dataFiles] = splitArray(saveFiles, (saveFile) => saveFile.fileType === FILE_TYPE_GAME);\n\n    if (gameFiles.length > MAX_NUM_GAMES) {\n      throw new Error(`Unable to fit ${gameFiles.length} games into a single VMU image. Max is ${MAX_NUM_GAMES}`);\n    }\n\n    // We may want to check that the size of the game is <= DEFAULT_MAX_GAME_SIZE as well? Or do we want to allow homebrew\n    // games that are larger for devices like the VMU Pro?\n\n    const gameFilesWithBlockInfo = getGameFilesWithBlockInfo(gameFiles);\n    const dataFilesWithBlockInfo = getDataFilesWithBlockInfo(dataFiles);\n\n    const saveFilesWithBlockInfo = [...gameFilesWithBlockInfo, ...dataFilesWithBlockInfo];\n\n    const totalBlocks = saveFilesWithBlockInfo.reduce(((accumulator, x) => accumulator + x.fileSizeInBlocks), 0);\n    if (totalBlocks > SAVE_AREA_SIZE_IN_BLOCKS) {\n      throw new Error(`Save files contain a total of ${totalBlocks} blocks of data but a VMU image can only hold ${SAVE_AREA_SIZE_IN_BLOCKS} blocks`);\n    }\n\n    const systemInfo = DreamcastSystemInfo.writeSystemInfo(volumeInfo);\n    const fileAllocationTable = DreamcastFileAllocationTable.writeFileAllocationTable(gameFilesWithBlockInfo, dataFilesWithBlockInfo);\n    const directory = DreamcastDirectory.writeDirectory(saveFilesWithBlockInfo);\n\n    const systemInfoBlocks = createBlocks(systemInfo);\n    const fileAllocationTableBlocks = createBlocks(fileAllocationTable);\n    const directoryBlocks = createBlocks(directory);\n    const extraAreaArrayBuffer = Util.getFilledArrayBuffer(EXTRA_AREA_SIZE_IN_BLOCKS * BLOCK_SIZE, FILL_VALUE); // Blocks 0 - 199 are for the save area, but the directory begins on block 241 leaving 41 blocks unused in between\n    const gameFileBlocks = gameFiles.map((saveFile) => createBlocksForward(saveFile.rawData)).flat(); // We write our game files from the front of the file to the back\n    const dataFileBlocks = dataFiles.reverse().map((saveFile) => createBlocks(saveFile.rawData)).flat(); // We write our data files from the back of the file to the front\n\n    const blocksUsed = systemInfoBlocks.length + fileAllocationTableBlocks.length + directoryBlocks.length + EXTRA_AREA_SIZE_IN_BLOCKS + dataFileBlocks.length + gameFileBlocks.length;\n    const paddingArrayBuffer = Util.getFilledArrayBuffer(TOTAL_SIZE - (BLOCK_SIZE * blocksUsed), FILL_VALUE);\n\n    const memcardArrayBuffer = Util.concatArrayBuffers([\n      ...gameFileBlocks,\n      paddingArrayBuffer,\n      ...dataFileBlocks,\n      extraAreaArrayBuffer,\n      ...directoryBlocks,\n      ...fileAllocationTableBlocks,\n      ...systemInfoBlocks,\n    ]);\n\n    return new DreamcastSaveData(memcardArrayBuffer, saveFiles, volumeInfo);\n  }\n\n  constructor(arrayBuffer, saveFiles, volumeInfo) {\n    this.arrayBuffer = arrayBuffer;\n    this.saveFiles = saveFiles;\n    this.volumeInfo = volumeInfo;\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getVolumeInfo() {\n    return this.volumeInfo;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/IndividualSaves/Dci.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\n.DCI is a directory entry concatenated with the raw save data\n\nNote that the starting block number in the directory entry is irrelevant here\n\n0x00-0x3F: Directory entry\n0x40-EOF:  Game data (stored endian-sweapped)\n*/\n\nimport Util from '../../../util/util';\nimport EndianUtil from '../../../util/Endian';\n\nimport DreamcastBasics from '../Components/Basics';\nimport DreamcastDirectoryEntry from '../Components/DirectoryEntry';\n\nconst {\n  BLOCK_SIZE,\n  WORD_SIZE_IN_BYTES,\n} = DreamcastBasics;\n\nconst DATA_OFFSET = DreamcastDirectoryEntry.LENGTH;\n\nconst DEFAULT_FIRST_BLOCK_NUMBER = 0; // Doesn't matter: the concept of where the save is located doesn't mean anything in this format\n\nexport default class DreamcastDciSaveData {\n  static convertSaveFileToDci(saveFile) {\n    const saveFileWithBlockInfo = {\n      ...saveFile,\n      firstBlockNumber: DEFAULT_FIRST_BLOCK_NUMBER,\n      fileSizeInBlocks: Math.ceil(saveFile.rawData.byteLength / BLOCK_SIZE),\n    };\n\n    const directoryEntryArrayBuffer = DreamcastDirectoryEntry.writeDirectoryEntry(saveFileWithBlockInfo);\n\n    return Util.concatArrayBuffers([directoryEntryArrayBuffer, EndianUtil.swap(saveFileWithBlockInfo.rawData, WORD_SIZE_IN_BYTES)]);\n  }\n\n  static convertIndividualSaveToSaveFile(arrayBuffer, checkSaveSize = false) {\n    const directoryEntry = DreamcastDirectoryEntry.readDirectoryEntry(arrayBuffer);\n    const rawData = EndianUtil.swap(arrayBuffer.slice(DATA_OFFSET), WORD_SIZE_IN_BYTES);\n\n    if (checkSaveSize && (rawData.byteLength !== (directoryEntry.fileSizeInBlocks * BLOCK_SIZE))) {\n      throw new Error('This file appears to be corrupt');\n    }\n\n    const comments = DreamcastDirectoryEntry.getComments(directoryEntry.fileHeaderBlockNumber, rawData);\n\n    return {\n      ...directoryEntry,\n      ...comments,\n      rawData,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/IndividualSaves/VmiVms.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThe standard format for individual saves on the Dreamcast appears to be the .VMI/.VMS file pair. The .VMI file contains\nthe file metadata while the .VMS file contains the actual file data\n\n.VMI file structure\n0x00-0x03: Checksum\n0x04-0x23: Description (padded with spaces)\n0x24-0x43: Copyright (padded with spaces)\n0x44-0x4B: Timestamp\n0x4C-0x4D: Version\n0x4E-0x4F: File number\n0x50-0x57: Resource name\n0x58-0x63: Filename\n0x64-0x65: File mode\n0x66-0x67: Padding\n0x68-0x6B: File size\n*/\n\nimport DreamcastBasics from '../Components/Basics';\nimport DreamcastDirectoryEntry from '../Components/DirectoryEntry';\nimport DreamcastUtil from '../Util';\nimport Util from '../../../util/util';\n\nconst {\n  LITTLE_ENDIAN,\n  BLOCK_SIZE,\n  FILE_TYPE_DATA,\n  FILE_TYPE_GAME,\n} = DreamcastBasics;\n\nconst ENCODING = 'shift-jis'; // https://github.com/gyrovorbis/libevmu/blob/9d1bf63983d40b81b03ac0bcf887a9a3c114ed86/lib/api/evmu/fs/evmu_vmi.h#L80\n\n// Based on https://mc.pp.se/dc/vms/vmi.html\n// Same struct found here: https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_vmi.h#L86\n// Same struct found here: https://github.com/bucanero/dc-save-converter/blob/master/vmufs.h#L44\n// Same struct found here: https://github.com/DC-SWAT/DreamShell/blob/0eb2ebe888b31438a131f20ec15abdd66964505a/applications/vmu_manager/modules/module.c#L149\n\nconst HEADER_LENGTH = 108;\n\nconst CHECKSUM_OFFSET = 0;\nconst CHECKSUM_LITTLE_ENDIAN = false; // The checksum isn't really a number per se, but instead the combination of 2 strings so it's better read from left to right\nconst CHECKSUM_MASK = 'SEGA';\nconst DESCRIPTION_OFFSET = 0x04;\nconst DESCRIPTION_LENGTH = 32;\nconst COPYRIGHT_OFFSET = 0x24;\nconst COPYRIGHT_LENGTH = 32;\nconst TIMESTAMP_OFFSET = 0x44;\nconst VERSION_OFFSET = 0x4C;\nconst FILE_NUMBER_OFFSET = 0x4E;\nconst RESOURCE_NAME_OFFSET = 0x50;\nconst RESOURCE_NAME_LENGTH = 8;\nconst FILE_NAME_OFFSET = 0x58;\nconst FILE_NAME_LENGTH = 12;\nconst FILE_MODE_OFFSET = 0x64;\nconst FILE_SIZE_OFFSET = 0x68;\n\nconst FILE_MODE_GAME = 0x02;\nconst FILE_MODE_COPY_PROTECTED = 0x01;\nconst FILE_MODE_NONE = 0x00;\n\nconst DEFAULT_HEADER_FILL_VALUE = 0x00;\n\nconst DEFAULT_VERSION = 0; // Not sure what this represents. Most files I've seen have 0 here\nconst DEFAULT_FILE_NUMBER = 1; // Not sure what this represents. Most files I've seen have 1 here\n\nconst DEFAULT_FIRST_BLOCK_NUMBER = 0; // Doesn't matter: the concept of where the save is located doesn't mean anything in this format\n\nconst HEADER_BLOCK_NUMBER_FOR_DATA = 0; // For save data, the header block is the first one\nconst HEADER_BLOCK_NUMBER_FOR_GAME = 1; // But for minigames it's in block 1 because \"block 0 of mini games had to have IRQ code so it can’t have that header\": https://github.com/gyrovorbis/libevmu/blob/libgimbal-refactor/lib/api/evmu/fs/evmu_fs_utils.h#L76\n\n// Based on https://github.com/bucanero/dc-save-converter/blob/a19fc3361805358d474acd772cdb20a328453d5b/dcvmu.cpp#L428\nfunction calculateChecksum(resourceName) {\n  let checksum = 0;\n  let currentChar = 0;\n\n  do {\n    checksum <<= 8;\n    checksum |= (resourceName.charCodeAt(currentChar) & CHECKSUM_MASK.charCodeAt(currentChar));\n    currentChar += 1;\n  } while (currentChar < CHECKSUM_MASK.length);\n\n  return checksum;\n}\n\nexport default class DreamcastVmiVmsSaveData {\n  static FILE_MODE_GAME = FILE_MODE_GAME;\n\n  static FILE_MODE_COPY_PROTECTED = FILE_MODE_COPY_PROTECTED;\n\n  static FILE_MODE_NONE = FILE_MODE_NONE;\n\n  // saveFile needs to set the additional fields:\n  // - description\n  // - copyright\n  // - resourceName\n  static convertSaveFileToVmiVms(saveFile) {\n    let vmiArrayBuffer = Util.getFilledArrayBuffer(HEADER_LENGTH, DEFAULT_HEADER_FILL_VALUE);\n    const vmsArrayBuffer = saveFile.rawData;\n\n    vmiArrayBuffer = Util.setString(vmiArrayBuffer, DESCRIPTION_OFFSET, saveFile.description, ENCODING, DESCRIPTION_LENGTH);\n    vmiArrayBuffer = Util.setString(vmiArrayBuffer, COPYRIGHT_OFFSET, saveFile.copyright, ENCODING, COPYRIGHT_LENGTH);\n    vmiArrayBuffer = Util.setString(vmiArrayBuffer, RESOURCE_NAME_OFFSET, saveFile.resourceName, ENCODING, RESOURCE_NAME_LENGTH);\n    vmiArrayBuffer = Util.setString(vmiArrayBuffer, FILE_NAME_OFFSET, saveFile.filename, ENCODING, FILE_NAME_LENGTH);\n    vmiArrayBuffer = DreamcastUtil.writeTimestamp(vmiArrayBuffer, TIMESTAMP_OFFSET, saveFile.fileCreationTime);\n\n    const vmiDataView = new DataView(vmiArrayBuffer);\n\n    const checksum = calculateChecksum(saveFile.resourceName);\n\n    let fileMode = 0;\n\n    if (saveFile.copyProtected) {\n      fileMode |= FILE_MODE_COPY_PROTECTED;\n    }\n\n    if (saveFile.fileType === FILE_TYPE_GAME) {\n      fileMode |= FILE_MODE_GAME;\n    }\n\n    vmiDataView.setUint32(CHECKSUM_OFFSET, checksum, CHECKSUM_LITTLE_ENDIAN);\n    vmiDataView.setUint16(VERSION_OFFSET, DEFAULT_VERSION, LITTLE_ENDIAN);\n    vmiDataView.setUint16(FILE_NUMBER_OFFSET, DEFAULT_FILE_NUMBER, LITTLE_ENDIAN);\n    vmiDataView.setUint16(FILE_MODE_OFFSET, fileMode, LITTLE_ENDIAN);\n    vmiDataView.setUint32(FILE_SIZE_OFFSET, vmsArrayBuffer.byteLength, LITTLE_ENDIAN);\n\n    return {\n      vmiArrayBuffer,\n      vmsArrayBuffer,\n    };\n  }\n\n  // Based on https://github.com/bucanero/dc-save-converter/blob/a19fc3361805358d474acd772cdb20a328453d5b/dcvmu.cpp#L388\n  static convertIndividualSaveToSaveFile(vmiArrayBuffer, vmsArrayBuffer) {\n    if (vmiArrayBuffer.byteLength !== HEADER_LENGTH) {\n      throw new Error('This does not appear to be a Dreamcast individual save: header is the wrong size');\n    }\n\n    const vmiDataView = new DataView(vmiArrayBuffer);\n    const vmiUint8Array = new Uint8Array(vmiArrayBuffer);\n\n    // Read what's stored in the file\n\n    const checksum = vmiDataView.getUint32(CHECKSUM_OFFSET, CHECKSUM_LITTLE_ENDIAN);\n    const description = Util.readNullTerminatedString(vmiUint8Array, DESCRIPTION_OFFSET, ENCODING, DESCRIPTION_LENGTH);\n    const copyright = Util.readNullTerminatedString(vmiUint8Array, COPYRIGHT_OFFSET, ENCODING, COPYRIGHT_LENGTH);\n    const fileCreationTime = DreamcastUtil.readTimestamp(vmiArrayBuffer, TIMESTAMP_OFFSET);\n    const version = vmiDataView.getUint16(VERSION_OFFSET, LITTLE_ENDIAN);\n    const fileNumber = vmiDataView.getUint16(FILE_NUMBER_OFFSET, LITTLE_ENDIAN);\n    const resourceName = Util.readNullTerminatedString(vmiUint8Array, RESOURCE_NAME_OFFSET, ENCODING, RESOURCE_NAME_LENGTH);\n    const filename = Util.readNullTerminatedString(vmiUint8Array, FILE_NAME_OFFSET, ENCODING, FILE_NAME_LENGTH);\n    const fileMode = vmiDataView.getUint16(FILE_MODE_OFFSET, LITTLE_ENDIAN);\n    const fileSize = vmiDataView.getUint32(FILE_SIZE_OFFSET, LITTLE_ENDIAN);\n\n    if (fileSize !== vmsArrayBuffer.byteLength) {\n      throw new Error(`This does not appear to be a Dreamcast individual save: file size in header ${fileSize} does not match .VMS file size ${vmsArrayBuffer.byteLength}`);\n    }\n\n    // Calculate the parts common to all dreamcast saves\n\n    const isGame = ((fileMode & FILE_MODE_GAME) !== 0);\n\n    const fileSizeInBlocks = Math.ceil(fileSize / BLOCK_SIZE);\n    const firstBlockNumber = DEFAULT_FIRST_BLOCK_NUMBER;\n    const fileType = isGame ? FILE_TYPE_GAME : FILE_TYPE_DATA;\n    const copyProtected = ((fileMode & FILE_MODE_COPY_PROTECTED) !== 0);\n    const fileHeaderBlockNumber = isGame ? HEADER_BLOCK_NUMBER_FOR_GAME : HEADER_BLOCK_NUMBER_FOR_DATA;\n    const comments = DreamcastDirectoryEntry.getComments(fileHeaderBlockNumber, vmsArrayBuffer);\n\n    return {\n      // These parts are specific to the .vmi/.vms format\n      checksum,\n      description,\n      copyright,\n      version,\n      fileNumber,\n      resourceName,\n      fileMode,\n      fileSize,\n\n      // These parts are common to all dreamcast saves\n      filename,\n      fileType,\n      fileCreationTime,\n      copyProtected,\n      fileSizeInBlocks,\n      firstBlockNumber,\n      fileHeaderBlockNumber,\n      ...comments,\n      rawData: vmsArrayBuffer,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Dreamcast/Util.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport DreamcastBasics from './Components/Basics';\n\nimport Util from '../../util/util';\n\nconst { LITTLE_ENDIAN } = DreamcastBasics;\n\nconst TIMESTAMP_YEAR_OFFSET = 0;\nconst TIMESTAMP_MONTH_OFFSET = 2;\nconst TIMESTAMP_DAY_OFFSET = 3;\nconst TIMESTAMP_HOUR_OFFSET = 4;\nconst TIMESTAMP_MINUTE_OFFSET = 5;\nconst TIMESTAMP_SECOND_OFFSET = 6;\nconst TIMESTAMP_DAY_OF_WEEK_OFFSET = 7;\n\nconst BCD_TIMESTAMP_CENTURY_OFFSET = 0;\nconst BCD_TIMESTAMP_YEAR_WITHIN_CENTURY_OFFSET = 1;\n\nconst TIMESTAMP_LENGTH = 8;\n\nfunction readBcdByte(val) {\n  const tens = Math.floor(val / 16);\n  const ones = val % 16;\n\n  return (tens * 10) + ones;\n}\n\nfunction writeBcdByte(val) {\n  const highByte = Math.floor(val / 10);\n  const lowByte = val % 10;\n\n  return (highByte << 4) | lowByte;\n}\n\nfunction formatDateWithoutTimezone(date) {\n  const pad = (n) => String(n).padStart(2, '0');\n\n  const year = date.getFullYear();\n  const month = pad(date.getMonth() + 1); // Months are zero-indexed\n  const day = pad(date.getDate());\n  const hours = pad(date.getHours());\n  const minutes = pad(date.getMinutes());\n  const seconds = pad(date.getSeconds());\n\n  return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;\n}\n\nexport default class DreamcastUtil {\n  static readTimestamp(arrayBuffer, offset) {\n    // Date conversion based on https://mc.pp.se/dc/vms/vmi.html\n\n    const dataView = new DataView(arrayBuffer.slice(offset, offset + TIMESTAMP_LENGTH));\n\n    const year = dataView.getUint16(TIMESTAMP_YEAR_OFFSET, LITTLE_ENDIAN);\n    const month = dataView.getUint8(TIMESTAMP_MONTH_OFFSET) - 1; // Dreamcast months are 1-12, Javascript months are 0-11\n    const day = dataView.getUint8(TIMESTAMP_DAY_OFFSET);\n    const hour = dataView.getUint8(TIMESTAMP_HOUR_OFFSET);\n    const minute = dataView.getUint8(TIMESTAMP_MINUTE_OFFSET);\n    const second = dataView.getUint8(TIMESTAMP_SECOND_OFFSET);\n\n    const date = new Date(year, month, day, hour, minute, second); // No timezone information is given in the Dreamcast format. This Date object is in the local timezone\n\n    return date;\n  }\n\n  static writeTimestamp(arrayBuffer, offset, date) {\n    const timestampArrayBuffer = new ArrayBuffer(TIMESTAMP_LENGTH);\n    const dataView = new DataView(timestampArrayBuffer);\n\n    dataView.setUint16(TIMESTAMP_YEAR_OFFSET, date.getFullYear(), LITTLE_ENDIAN);\n    dataView.setUint8(TIMESTAMP_MONTH_OFFSET, date.getMonth() + 1); // Dreamcast months are 1-12, Javascript months are 0-11\n    dataView.setUint8(TIMESTAMP_DAY_OFFSET, date.getDate());\n    dataView.setUint8(TIMESTAMP_HOUR_OFFSET, date.getHours());\n    dataView.setUint8(TIMESTAMP_MINUTE_OFFSET, date.getMinutes());\n    dataView.setUint8(TIMESTAMP_SECOND_OFFSET, date.getSeconds());\n    dataView.setUint8(TIMESTAMP_DAY_OF_WEEK_OFFSET, date.getDay());\n\n    // For the day of week, different files appear to be inconsistent. In some 0 represents Sunday and in some 0 represents Monday.\n    // The official dreamcast docs say that 0 represents Sunday. In a Javascript Date, 0 represents Sunday\n    // https://mc.pp.se/dc/vms/vmi.html says that Sunday is 0\n\n    return Util.setArrayBufferPortion(arrayBuffer, timestampArrayBuffer, offset, 0, TIMESTAMP_LENGTH);\n  }\n\n  static readBcdTimestamp(arrayBuffer, offset) {\n    // Date conversion based on https://mc.pp.se/dc/vms/flashmem.html\n\n    const dataView = new DataView(arrayBuffer.slice(offset, offset + TIMESTAMP_LENGTH));\n\n    const century = readBcdByte(dataView.getUint8(BCD_TIMESTAMP_CENTURY_OFFSET));\n    const yearWithinCentury = readBcdByte(dataView.getUint8(BCD_TIMESTAMP_YEAR_WITHIN_CENTURY_OFFSET));\n\n    const year = (century * 100) + yearWithinCentury;\n    const month = readBcdByte(dataView.getUint8(TIMESTAMP_MONTH_OFFSET)) - 1; // Dreamcast months are 1-12, Javascript months are 0-11\n    const day = readBcdByte(dataView.getUint8(TIMESTAMP_DAY_OFFSET));\n    const hour = readBcdByte(dataView.getUint8(TIMESTAMP_HOUR_OFFSET));\n    const minute = readBcdByte(dataView.getUint8(TIMESTAMP_MINUTE_OFFSET));\n    const second = readBcdByte(dataView.getUint8(TIMESTAMP_SECOND_OFFSET));\n    // For the day of week, different files appear to be inconsistent. In some 0 represents Sunday and in some 0 represents Monday.\n    // The official dreamcast docs say that 0 represents Sunday. In a Javascript Date, 0 represents Sunday\n    // https://mc.pp.se/dc/vms/flashmem.html says that Monday is 0\n\n    const date = new Date(year, month, day, hour, minute, second); // No timezone information is given in the Dreamcast format. This Date object is in the local timezone\n\n    return date;\n  }\n\n  static writeBcdTimestamp(arrayBuffer, offset, date) {\n    const timestampArrayBuffer = new ArrayBuffer(TIMESTAMP_LENGTH);\n    const dataView = new DataView(timestampArrayBuffer);\n\n    const century = Math.floor(date.getFullYear() / 100);\n    const yearWithinCentury = date.getFullYear() % 100;\n\n    dataView.setUint8(BCD_TIMESTAMP_CENTURY_OFFSET, writeBcdByte(century));\n    dataView.setUint8(BCD_TIMESTAMP_YEAR_WITHIN_CENTURY_OFFSET, writeBcdByte(yearWithinCentury));\n    dataView.setUint8(TIMESTAMP_MONTH_OFFSET, writeBcdByte(date.getMonth() + 1)); // Dreamcast months are 1-12, Javascript months are 0-11\n    dataView.setUint8(TIMESTAMP_DAY_OFFSET, writeBcdByte(date.getDate()));\n    dataView.setUint8(TIMESTAMP_HOUR_OFFSET, writeBcdByte(date.getHours()));\n    dataView.setUint8(TIMESTAMP_MINUTE_OFFSET, writeBcdByte(date.getMinutes()));\n    dataView.setUint8(TIMESTAMP_SECOND_OFFSET, writeBcdByte(date.getSeconds()));\n    dataView.setUint8(TIMESTAMP_DAY_OF_WEEK_OFFSET, writeBcdByte(date.getDay())); // The official docs say that Dreamcast Sunday is 0, and JavaScript Sunday is 0 so we're going with that. https://mc.pp.se/dc/vms/flashmem.html says that Monday is 0\n\n    return Util.setArrayBufferPortion(arrayBuffer, timestampArrayBuffer, offset, 0, TIMESTAMP_LENGTH);\n  }\n\n  // Dreamcast timestamps do not have a timezone, so are all in local time. So we want to print them without timezone information so that the tests work wherever they are executed\n  static formatDateWithoutTimezone(date) {\n    return formatDateWithoutTimezone(date);\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/GB.js",
    "content": "import SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class GbFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new GbFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new GbFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(gbFlashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(gbFlashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return GbFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return null; // GB/C saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static getRawFileExtension() {\n    return null; // GB/C saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gb';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/GBA/EmulatorBase.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nBased on the Goomba Save Manager, specifically:\n- Ignore the first 4 bytes of the file (they specify the type of save): https://github.com/libertyernie/goombasav/blob/master/main.c#L127\n- Format for the header: https://github.com/libertyernie/goombasav/blob/master/goombasav.h#L101\n- Criteria for \"cleaning\" the data first: https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L330\n*/\n\nimport Util from '../../../util/util';\nimport PaddingUtil from '../../../util/Padding';\nimport CompressionLzoUtil from '../../../util/CompressionLzo';\n\nconst LITTLE_ENDIAN = true;\n\nconst MAGIC_OFFSET = 0; // Offset relative to the start of the file\nconst MAGIC_LENGTH = 4;\n\n// These offsets are relative to the start of a \"state header\"\n\nconst SIZE_OFFSET = 0; // Header + data size\n\nconst TYPE_OFFSET = 2;\nconst TYPE_SAVE_STATE = 0;\nconst TYPE_SRAM_SAVE = 1;\nconst TYPE_CONFIG_DATA = 2;\nconst TYPE_PALETTE = 5;\n\nconst UNCOMPRESSED_SIZE_OFFSET = 4;\nconst FRAME_COUNT_OFFSET = 8; // Number of ingame frames that have passed since the game was started. Seems to only be set in SMSAdvance\nconst ROM_CHECKSUM_OFFSET = 12;\n\nconst GAME_TITLE_OFFSET = 16;\nconst GAME_TITLE_LENGTH = 32;\nconst GAME_TITLE_ENCODING = 'US-ASCII';\n\nconst STATE_HEADER_TYPE_NAMES = {\n  0: 'Save state', // TYPE_SAVE_STATE\n  1: 'SRAM save', // TYPE_SRAM_SAVE\n  2: 'Config data', // TYPE_CONFIG_DATA\n  5: 'Palette', // TYPE_PALETTE\n};\n\nconst STATE_HEADER_LENGTH = GAME_TITLE_OFFSET + GAME_TITLE_LENGTH;\n\nconst LARGEST_GBC_SAVE_SIZE = 0x10000; // This is just used as a hint to the decompression algorithm so it can allocate memory. Value copied from https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L349\n\n// Not sure why this is named this, but when a file is \"unclean\" then there's uncompressed data here:\n// Value copied from https://github.com/libertyernie/goombasav/blob/master/goombasav.h#L29\n//\n// Note that different builds of Goomba and PocketNES use different offsets here:\n// https://github.com/masterhou/goombacolor/blob/master/src/sram.c#L22\n// https://github.com/Dwedit/PocketNES/blob/main/src/sram.c#L32\n//\n// SMSAdvance appears to not do this, and only seems to have compressed SRAM in its files (based on source code found here: https://github.com/Dwedit/PocketNES/issues/2)\n//\n// The default is 0xE000: https://github.com/masterhou/goombacolor/blob/82505813da728bfe88902e48096246a61fbccf79/src/config.h#L6\n// This may be related to difficulties re save sizes on an Everdrive? https://www.dwedit.org/dwedit_board/viewtopic.php?pid=3736#p3736\n//\n// Some save files are 32kB long, which is 0x8000 bytes. So, if the filesize is < 0xE000 then we use 0x6000 as the offset.\n//\n// Note that Goomba and PocketNES use a fairly complex algorithm to determine whether to use 0xE000 or 0x6000:\n// https://github.com/Dwedit/goombacolor/blob/master/src/sram.c#L164\n// https://github.com/Dwedit/PocketNES/blob/main/src/sram.c#L193\n\nconst GOOMBA_COLOR_AVAILABLE_SIZE = 0xE000;\nconst GOOMBA_COLOR_SMALLER_AVAILABLE_SIZE = 0x6000;\n\nconst GOOMBA_COLOR_SRAM_SIZE = 0x10000; // Value copied from https://github.com/libertyernie/goombasav/blob/master/goombasav.h#L28\n\nfunction readStateHeader(arrayBuffer) {\n  const dataView = new DataView(arrayBuffer);\n  const uint8Array = new Uint8Array(arrayBuffer);\n\n  return {\n    size: dataView.getUint16(SIZE_OFFSET, LITTLE_ENDIAN),\n    type: dataView.getUint16(TYPE_OFFSET, LITTLE_ENDIAN),\n    uncompressedSize: dataView.getUint32(UNCOMPRESSED_SIZE_OFFSET, LITTLE_ENDIAN),\n    frameCount: dataView.getUint32(FRAME_COUNT_OFFSET, LITTLE_ENDIAN),\n    romChecksum: dataView.getUint32(ROM_CHECKSUM_OFFSET, LITTLE_ENDIAN),\n    gameTitle: Util.readNullTerminatedString(uint8Array, GAME_TITLE_OFFSET, GAME_TITLE_ENCODING, GAME_TITLE_LENGTH),\n  };\n}\n\nfunction createStateHeaderArrayBuffer(stateHeader) {\n  const arrayBuffer = new ArrayBuffer(STATE_HEADER_LENGTH);\n  const dataView = new DataView(arrayBuffer);\n  const uint8Array = new Uint8Array(arrayBuffer);\n\n  const textEncoder = new TextEncoder(GAME_TITLE_ENCODING);\n\n  uint8Array.fill(0);\n\n  dataView.setUint16(SIZE_OFFSET, stateHeader.size, LITTLE_ENDIAN);\n  dataView.setUint16(TYPE_OFFSET, stateHeader.type, LITTLE_ENDIAN);\n  dataView.setUint32(UNCOMPRESSED_SIZE_OFFSET, stateHeader.uncompressedSize, LITTLE_ENDIAN);\n  dataView.setUint32(FRAME_COUNT_OFFSET, stateHeader.frameCount, LITTLE_ENDIAN);\n  dataView.setUint32(ROM_CHECKSUM_OFFSET, stateHeader.romChecksum, LITTLE_ENDIAN);\n\n  const encodedGameTitle = textEncoder.encode(stateHeader.gameTitle).slice(0, GAME_TITLE_LENGTH - 1);\n\n  uint8Array.set(encodedGameTitle, GAME_TITLE_OFFSET);\n\n  return arrayBuffer;\n}\n\n// Taken from https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L155\nfunction stateHeaderIsPlausible(stateHeader) {\n  switch (stateHeader.type) {\n    case TYPE_SAVE_STATE:\n    case TYPE_SRAM_SAVE:\n    case TYPE_CONFIG_DATA:\n    case TYPE_PALETTE:\n      // Type is okay: fall through\n      break;\n\n    default:\n      return false;\n  }\n\n  if (stateHeader.size < STATE_HEADER_LENGTH) {\n    return false;\n  }\n\n  if ((stateHeader.uncompressedSize === 0) && (stateHeader.type !== TYPE_CONFIG_DATA)) {\n    return false;\n  }\n\n  return true;\n}\n\nfunction createMagicArrayBuffer(magic, length) {\n  const arrayBuffer = new ArrayBuffer(length);\n  const dataView = new DataView(arrayBuffer);\n\n  dataView.setUint32(0, magic, LITTLE_ENDIAN);\n\n  return arrayBuffer;\n}\n\nfunction createEmulatorArrayBuffer(rawArrayBuffer, romInternalName, romChecksum, clazz) {\n  const magicArrayBuffer = createMagicArrayBuffer(clazz.getMagic(), MAGIC_LENGTH);\n  const compressedSaveDataArrayBuffer = CompressionLzoUtil.compress(rawArrayBuffer);\n\n  const stateHeader = {\n    size: compressedSaveDataArrayBuffer.byteLength + STATE_HEADER_LENGTH,\n    type: TYPE_SRAM_SAVE,\n    uncompressedSize: rawArrayBuffer.byteLength,\n    frameCount: 0,\n    romChecksum,\n    gameTitle: romInternalName,\n  };\n\n  const stateHeaderArrayBuffer = createStateHeaderArrayBuffer(stateHeader);\n\n  const configDataArrayBuffer = clazz.createEmptyConfigDataArrayBuffer();\n\n  const unpaddedEmulatorArrayBuffer = clazz.concatEmulatorArrayBuffer(magicArrayBuffer, stateHeaderArrayBuffer, compressedSaveDataArrayBuffer, configDataArrayBuffer);\n\n  const padding = {\n    count: Math.max(GOOMBA_COLOR_SRAM_SIZE - unpaddedEmulatorArrayBuffer.byteLength, 0),\n    value: 0,\n  };\n\n  return PaddingUtil.addPaddingToEnd(unpaddedEmulatorArrayBuffer, padding);\n}\n\n// Based on https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L249\nfunction findStateHeaderOfType(arrayBuffer, stateHeaderType) {\n  let currentByte = MAGIC_LENGTH;\n\n  if (arrayBuffer.byteLength < (MAGIC_LENGTH + STATE_HEADER_LENGTH)) {\n    throw new Error('File is too short to contain a state header');\n  }\n\n  let stateHeader = readStateHeader(arrayBuffer.slice(currentByte, currentByte + STATE_HEADER_LENGTH));\n\n  while (stateHeaderIsPlausible(stateHeader)) {\n    if (stateHeader.type === stateHeaderType) {\n      return {\n        stateHeader,\n        offset: currentByte,\n      };\n    }\n\n    currentByte += stateHeader.size;\n\n    if ((currentByte + STATE_HEADER_LENGTH) > arrayBuffer.byteLength) {\n      break;\n    }\n\n    stateHeader = readStateHeader(arrayBuffer.slice(currentByte, currentByte + STATE_HEADER_LENGTH));\n  }\n\n  throw new Error(`No state header of type ${STATE_HEADER_TYPE_NAMES[stateHeaderType]} found in file`);\n}\n\nexport default class EmulatorBaseSaveData {\n  static LITTLE_ENDIAN = LITTLE_ENDIAN;\n\n  static TYPE_CONFIG_DATA = TYPE_CONFIG_DATA;\n\n  // This function split out so that we can call it from tests. We can't include a retail ROM\n  // with our tests (we need the entire ROM to calculate the checksum), so this allows us to fill in those values\n  static createFromRawDataInternal(rawArrayBuffer, romInternalName, romChecksum, clazz) {\n    const emulatorArrayBuffer = createEmulatorArrayBuffer(rawArrayBuffer, romInternalName, romChecksum, clazz);\n\n    return new clazz(emulatorArrayBuffer); // eslint-disable-line new-cap\n  }\n\n  static getFlashCartFileExtension() {\n    return 'esv';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null;\n  }\n\n  constructor(emulatorArrayBuffer) {\n    const emulatorDataView = new DataView(emulatorArrayBuffer);\n\n    const magic = emulatorDataView.getUint32(MAGIC_OFFSET, LITTLE_ENDIAN);\n    const expectedMagic = this.constructor.getMagic();\n\n    if (magic !== expectedMagic) {\n      throw new Error(`File appears to be corrupted: expected 0x${expectedMagic.toString(16)} but found 0x${magic.toString(16)}`);\n    }\n\n    const { stateHeader, offset } = findStateHeaderOfType(emulatorArrayBuffer, TYPE_SRAM_SAVE);\n\n    // The save editor makes the case that compressed size is the size stored in the file minus the header:\n    // https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L348\n    // https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L405\n    //\n    // And that uncompressed size is incorrectly stored in goomba (but not goomba color) files:\n    // https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L405\n\n    const sramRomChecksum = this.getSramRomChecksumFromConfigData(emulatorArrayBuffer);\n\n    let needsCleaning = false;\n\n    if (sramRomChecksum === 0) {\n      // File is clean\n    } else if (sramRomChecksum === stateHeader.romChecksum) {\n      // File is unclean, and needs to be cleaned\n      // https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L342\n      needsCleaning = true;\n    } else {\n      // File is unclean, but it shouldn't affect the data we're interested in\n      // https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L345\n    }\n\n    this.compressedSize = stateHeader.size - STATE_HEADER_LENGTH;\n    this.uncompressedSize = stateHeader.uncompressedSize;\n    this.frameCount = stateHeader.frameCount;\n    this.romChecksum = stateHeader.romChecksum;\n    this.gameTitle = stateHeader.gameTitle;\n\n    // It seems that the compressed and/or uncompressed size might be incorrect for goomba (rather than goomba color) files. The save editor just goes until the end of the file: https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L350\n    const compressedDataOffset = offset + STATE_HEADER_LENGTH;\n\n    if (needsCleaning) {\n      const uncompressedDataOffset = (emulatorArrayBuffer.byteLength < GOOMBA_COLOR_AVAILABLE_SIZE) ? GOOMBA_COLOR_SMALLER_AVAILABLE_SIZE : GOOMBA_COLOR_AVAILABLE_SIZE;\n      this.rawArrayBuffer = emulatorArrayBuffer.slice(uncompressedDataOffset, GOOMBA_COLOR_SRAM_SIZE); // Based on https://github.com/libertyernie/goombasav/blob/master/goombasav.c#L308\n    } else {\n      this.rawArrayBuffer = CompressionLzoUtil.decompress(\n        emulatorArrayBuffer.slice(\n          compressedDataOffset,\n          // compressedDataOffset + this.compressedSize,\n        ),\n        LARGEST_GBC_SAVE_SIZE, // this.uncompressedSize,\n      );\n    }\n\n    this.flashCartArrayBuffer = emulatorArrayBuffer;\n  }\n\n  // This is described as \"checksum of rom using SRAM e000-ffff\"\n  // here https://github.com/libertyernie/goombasav/blob/master/goombasav.h#L80\n  //\n  // So it's a checksum of the ROM, but from a portion of the SRAM towards the end?\n  getSramRomChecksumFromConfigData(arrayBuffer) {\n    const { stateHeader, offset } = findStateHeaderOfType(arrayBuffer, TYPE_CONFIG_DATA);\n\n    if (stateHeader.size !== this.constructor.getConfigDataLength()) {\n      throw new Error(`Unrecognized config data type: size of ${stateHeader.size} is unknown`);\n    }\n\n    return this.constructor.getPlatformSramRomChecksumFromConfigData(arrayBuffer, offset);\n  }\n\n  // Taken from https://github.com/masterhou/goombacolor/blob/master/src/sram.c#L258\n  //\n  // Note that this only looks (sporadically) at the first 16kB of the file\n  static calculateRomChecksum(romArrayBuffer) {\n    let sum = 0;\n    let currentByte = 0;\n    const totalBytes = romArrayBuffer.byteLength;\n\n    const romUint8Array = new Uint8Array(romArrayBuffer);\n    const lastByte = romUint8Array[totalBytes - 1];\n\n    for (let i = 0; i < 128; i += 1) {\n      if (currentByte < totalBytes) {\n        sum += (romUint8Array[currentByte] | (romUint8Array[currentByte + 1] << 8) | (romUint8Array[currentByte + 2] << 16) | (romUint8Array[currentByte + 3] << 24));\n      } else {\n        sum += (lastByte | (lastByte << 8) | (lastByte << 16) | (lastByte << 24));\n      }\n\n      sum >>>= 0; // Convert to unsigned: https://stackoverflow.com/a/1822769\n\n      currentByte += 128;\n    }\n\n    return sum;\n  }\n\n  static saveDataIsCompressed() {\n    return true;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n\n  getCompressedSize() {\n    return this.compressedSize;\n  }\n\n  getUncompressedSize() {\n    return this.uncompressedSize;\n  }\n\n  getGameTitle() {\n    return this.gameTitle;\n  }\n\n  getRomChecksum() {\n    return this.romChecksum;\n  }\n\n  getFrameCount() {\n    return this.frameCount;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/GBA/GBA.js",
    "content": "import SaveFilesUtil from '../../../util/SaveFiles';\n\nexport default class GbaFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new GbaFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new GbaFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(gbaFlashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(gbaFlashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return GbaFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return null; // GBA saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static getRawFileExtension() {\n    return null; // GBA saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gba';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/GBA/GoombaEmulator.js",
    "content": "// Find it at https://github.com/Dwedit/goombacolor/releases\n\nimport EmulatorBase from './EmulatorBase';\nimport Util from '../../../util/util';\nimport GbRom from '../../../rom-formats/gb';\n\nconst GOOMBA_MAGIC = 0x57A731D8; // Goomba (GB/GBC) save\n\nconst GOOMBA_CONFIG_DATA_SIZE_OFFSET = 0;\nconst GOOMBA_CONFIG_DATA_TYPE_OFFSET = 2;\nconst GOOMBA_CONFIG_DATA_BORDER_COLOR_OFFSET = 4;\nconst GOOMBA_CONFIG_DATA_PALETTE_BANK_OFFSET = 5;\nconst GOOMBA_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET = 8;\nconst GOOMBA_CONFIG_DATA_RESERVED_OFFSET = 16;\nconst GOOMBA_CONFIG_DATA_RESERVED_LENGTH = 32;\nconst GOOMBA_CONFIG_DATA_RESERVED_DATA = 'CFG';\nconst GOOMBA_CONFIG_DATA_RESERVED_ENCODING = 'US-ASCII';\nconst GOOMBA_CONFIG_DATA_LENGTH = GOOMBA_CONFIG_DATA_RESERVED_OFFSET + GOOMBA_CONFIG_DATA_RESERVED_LENGTH;\n\nconst GOOMBA_CONFIG_DATA_DEFAULT_BORDER_COLOR = 0;\nconst GOOMBA_CONFIG_DATA_DEFAULT_PALETTE_BANK = 0;\n\nexport default class GoombaEmulatorSaveData extends EmulatorBase {\n  static getMagic() {\n    return GOOMBA_MAGIC;\n  }\n\n  static getConfigDataLength() {\n    return GOOMBA_CONFIG_DATA_LENGTH;\n  }\n\n  static createFromRawData(rawArrayBuffer, romArrayBuffer) {\n    const gbRom = new GbRom(romArrayBuffer);\n\n    const romInternalName = gbRom.getInternalName();\n    const romChecksum = super.calculateRomChecksum(gbRom.getRomArrayBuffer());\n\n    return super.createFromRawDataInternal(rawArrayBuffer, romInternalName, romChecksum, GoombaEmulatorSaveData);\n  }\n\n  static createFromRawDataInternal(rawArrayBuffer, romInternalName, romChecksum) {\n    return super.createFromRawDataInternal(rawArrayBuffer, romInternalName, romChecksum, GoombaEmulatorSaveData);\n  }\n\n  static createFromFlashCartData(goombaArrayBuffer) {\n    return new GoombaEmulatorSaveData(goombaArrayBuffer);\n  }\n\n  static requiresRom() {\n    return {\n      clazz: GbRom,\n      requiredToConvert: ['convertToFormat'],\n    };\n  }\n\n  // Based on https://github.com/libertyernie/goombasav/blob/master/goombasav.h#L61\n  static createEmptyConfigDataArrayBuffer() {\n    const arrayBuffer = new ArrayBuffer(GOOMBA_CONFIG_DATA_LENGTH);\n    const dataView = new DataView(arrayBuffer);\n    const uint8Array = new Uint8Array(arrayBuffer);\n\n    const textEncoder = new TextEncoder(GOOMBA_CONFIG_DATA_RESERVED_ENCODING);\n\n    uint8Array.fill(0);\n\n    dataView.setUint16(GOOMBA_CONFIG_DATA_SIZE_OFFSET, GOOMBA_CONFIG_DATA_LENGTH, super.LITTLE_ENDIAN);\n    dataView.setUint16(GOOMBA_CONFIG_DATA_TYPE_OFFSET, super.TYPE_CONFIG_DATA, super.LITTLE_ENDIAN);\n    dataView.setUint8(GOOMBA_CONFIG_DATA_BORDER_COLOR_OFFSET, GOOMBA_CONFIG_DATA_DEFAULT_BORDER_COLOR);\n    dataView.setUint8(GOOMBA_CONFIG_DATA_PALETTE_BANK_OFFSET, GOOMBA_CONFIG_DATA_DEFAULT_PALETTE_BANK);\n    dataView.setUint32(GOOMBA_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET, 0, super.LITTLE_ENDIAN); // Checksum here gets set to 0 so that the file is \"clean\"\n\n    const encodedReservedData = textEncoder.encode(GOOMBA_CONFIG_DATA_RESERVED_DATA).slice(0, GOOMBA_CONFIG_DATA_RESERVED_LENGTH - 1);\n\n    uint8Array.set(encodedReservedData, GOOMBA_CONFIG_DATA_RESERVED_LENGTH);\n\n    return arrayBuffer;\n  }\n\n  static getPlatformSramRomChecksumFromConfigData(arrayBuffer, currentByte) {\n    const dataView = new DataView(arrayBuffer);\n\n    return dataView.getUint32(currentByte + GOOMBA_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET, super.LITTLE_ENDIAN);\n  }\n\n  static concatEmulatorArrayBuffer(magicArrayBuffer, stateHeaderArrayBuffer, compressedSaveDataArrayBuffer, configDataArrayBuffer) {\n    return Util.concatArrayBuffers([magicArrayBuffer, stateHeaderArrayBuffer, compressedSaveDataArrayBuffer, configDataArrayBuffer]);\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/GBA/PocketNesEmulator.js",
    "content": "/* eslint-disable no-bitwise */\n\n// Find it at https://github.com/Dwedit/PocketNES/releases\n\nimport EmulatorBase from './EmulatorBase';\nimport NesRom from '../../../rom-formats/nes';\nimport Util from '../../../util/util';\n\nconst POCKETNES_MAGIC = 0x57A731D7; // Pocket NES save\n\nconst POCKETNES_CONFIG_DATA_SIZE_OFFSET = 0;\nconst POCKETNES_CONFIG_DATA_TYPE_OFFSET = 2;\nconst POCKETNES_CONFIG_DATA_DISPLAY_TYPE_OFFSET = 4;\nconst POCKETNES_CONFIG_DATA_MISC_OFFSET = 5;\nconst POCKETNES_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET = 8;\nconst POCKETNES_CONFIG_DATA_RESERVED_OFFSET = 16;\nconst POCKETNES_CONFIG_DATA_RESERVED_LENGTH = 32;\nconst POCKETNES_CONFIG_DATA_RESERVED_DATA = 'CFG';\nconst POCKETNES_CONFIG_DATA_RESERVED_ENCODING = 'US-ASCII';\nconst POCKETNES_CONFIG_DATA_LENGTH = POCKETNES_CONFIG_DATA_RESERVED_OFFSET + POCKETNES_CONFIG_DATA_RESERVED_LENGTH;\n\n// DisplayType explanation:\n//\n// The lower bits are the scaling type and the upper bits are the gamma: https://github.com/Dwedit/PocketNES/blob/master/src/sram.c#L1119\n//\n// The default scaling value is 3 (everything scaled): https://github.com/Dwedit/PocketNES/blob/master/src/main.c#L83\n// The various values are described here: https://github.com/Dwedit/PocketNES/blob/master/src/ui.c#L194\n// The default gamma is 0\n//\n// The default value of flicker is 1, and it is stored in the misc field: https://github.com/Dwedit/PocketNES/blob/master/src/sram.c#L1044\n//\n// The default follow by value is 0, and the default follow sprite is 0. I don't see an obvious place where they're stored\n\nconst DEFAULT_SCALING = 3;\nconst DEFAULT_GAMMA = 0;\n\nconst DEFAULT_AUTOSLEEP_TIME = 0;\nconst DEFAULT_AUTOSTATE = 0;\nconst DEFAULT_FLICKER = 1;\n\nconst POCKETNES_CONFIG_DATA_DEFAULT_DISPLAY_TYPE = ((DEFAULT_GAMMA & 0x7) << 5) | (DEFAULT_SCALING & 0xF); // https://github.com/Dwedit/PocketNES/blob/master/src/sram.c#L1037\nconst POCKETNES_CONFIG_DATA_DEFAULT_MISC = (((DEFAULT_FLICKER & 0x1) ^ 1) << 4) | ((DEFAULT_AUTOSTATE & 0x3) << 5) | (DEFAULT_AUTOSLEEP_TIME & 0x3); // https://github.com/Dwedit/PocketNES/blob/master/src/sram.c#L1045\n\nconst GAME_TITLE = 'SAVE'; // No game title is listed in an NES ROM, so everything is just called this\n\nexport default class PocketNesEmulatorSaveData extends EmulatorBase {\n  static GAME_TITLE = GAME_TITLE;\n\n  static getMagic() {\n    return POCKETNES_MAGIC;\n  }\n\n  static getConfigDataLength() {\n    return POCKETNES_CONFIG_DATA_LENGTH;\n  }\n\n  static createFromRawData(rawArrayBuffer, romArrayBuffer) {\n    const romChecksum = PocketNesEmulatorSaveData.calculateRomChecksum(romArrayBuffer);\n\n    return super.createFromRawDataInternal(rawArrayBuffer, GAME_TITLE, romChecksum, PocketNesEmulatorSaveData);\n  }\n\n  static createFromRawDataInternal(rawArrayBuffer, romChecksum) { // es-lint-disable  no-dupe-class-members (bug in eslint?)\n    return super.createFromRawDataInternal(rawArrayBuffer, GAME_TITLE, romChecksum, PocketNesEmulatorSaveData);\n  }\n\n  static createFromFlashCartData(pocketNesArrayBuffer) {\n    return new PocketNesEmulatorSaveData(pocketNesArrayBuffer);\n  }\n\n  static requiresRom() {\n    return {\n      clazz: NesRom,\n      requiredToConvert: ['convertToFormat'],\n    };\n  }\n\n  // Based on https://github.com/libertyernie/POCKETNESsav/blob/master/POCKETNESsav.h#L73\n  static createEmptyConfigDataArrayBuffer() {\n    const arrayBuffer = new ArrayBuffer(POCKETNES_CONFIG_DATA_LENGTH);\n    const dataView = new DataView(arrayBuffer);\n    const uint8Array = new Uint8Array(arrayBuffer);\n\n    const textEncoder = new TextEncoder(POCKETNES_CONFIG_DATA_RESERVED_ENCODING);\n\n    uint8Array.fill(0);\n\n    dataView.setUint16(POCKETNES_CONFIG_DATA_SIZE_OFFSET, POCKETNES_CONFIG_DATA_LENGTH, super.LITTLE_ENDIAN);\n    dataView.setUint16(POCKETNES_CONFIG_DATA_TYPE_OFFSET, super.TYPE_CONFIG_DATA, super.LITTLE_ENDIAN);\n    dataView.setUint8(POCKETNES_CONFIG_DATA_DISPLAY_TYPE_OFFSET, POCKETNES_CONFIG_DATA_DEFAULT_DISPLAY_TYPE);\n    dataView.setUint8(POCKETNES_CONFIG_DATA_MISC_OFFSET, POCKETNES_CONFIG_DATA_DEFAULT_MISC);\n    dataView.setUint32(POCKETNES_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET, 0, super.LITTLE_ENDIAN); // Checksum here gets set to 0 so that the file is \"clean\"\n\n    const encodedReservedData = textEncoder.encode(POCKETNES_CONFIG_DATA_RESERVED_DATA).slice(0, POCKETNES_CONFIG_DATA_RESERVED_LENGTH - 1);\n\n    uint8Array.set(encodedReservedData, POCKETNES_CONFIG_DATA_RESERVED_LENGTH);\n\n    return arrayBuffer;\n  }\n\n  static getPlatformSramRomChecksumFromConfigData(arrayBuffer, currentByte) {\n    const dataView = new DataView(arrayBuffer);\n\n    return dataView.getUint32(currentByte + POCKETNES_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET, super.LITTLE_ENDIAN);\n  }\n\n  static calculateRomChecksum(romArrayBuffer) {\n    // It's tricky to determine where the ROM \"starts\":\n    //\n    // When the emulator returns a pointer to the ROM, it includes the romheader struct: https://github.com/Dwedit/PocketNES/blob/master/src/rommenu.c#L281\n    // When the emulator calculates the checksum of the ROM, it moves past the romheader struct, plus 16 bytes (which is the length of the header in the ROM file): https://github.com/Dwedit/PocketNES/blob/master/src/sram.c#L495\n    //\n    // So here we will calculate the checksum of the file after the header\n\n    const nesRom = new NesRom(romArrayBuffer);\n\n    return super.calculateRomChecksum(nesRom.getRomArrayBufferWithoutHeader());\n  }\n\n  static concatEmulatorArrayBuffer(magicArrayBuffer, stateHeaderArrayBuffer, compressedSaveDataArrayBuffer, configDataArrayBuffer) {\n    // From the test files I've made, PocketNES appears to put the portions of the file in a different order than Goomba(Color),\n    // despite this not being reflected in GoombaSaveManager.\n    return Util.concatArrayBuffers([magicArrayBuffer, configDataArrayBuffer, stateHeaderArrayBuffer, compressedSaveDataArrayBuffer]);\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/GBA/SmsAdvanceEmulator.js",
    "content": "/* eslint-disable no-bitwise */\n\n// Find it at https://archive.org/details/smsadvance-25-bin\n\nimport EmulatorBase from './EmulatorBase';\nimport SmsRom from '../../../rom-formats/sms';\nimport Util from '../../../util/util';\n\nconst SMSADVANCE_MAGIC = 0x57A731DC; // SMS Advance save\n\nconst SMSADVANCE_CONFIG_DATA_SIZE_OFFSET = 0;\nconst SMSADVANCE_CONFIG_DATA_TYPE_OFFSET = 2;\nconst SMSADVANCE_CONFIG_DATA_DISPLAY_TYPE_OFFSET = 4;\nconst SMSADVANCE_CONFIG_DATA_GAMMA_VALUE_OFFSET = 5;\nconst SMSADVANCE_CONFIG_DATA_REGION_OFFSET = 6;\nconst SMSADVANCE_CONFIG_DATA_SLEEP_FLICK_OFFSET = 7;\nconst SMSADVANCE_CONFIG_DATA_CONFIG_OFFSET = 8;\nconst SMSADVANCE_CONFIG_DATA_BORDER_COLOR_OFFSET = 9;\nconst SMSADVANCE_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET = 12;\nconst SMSADVANCE_CONFIG_DATA_RESERVED_OFFSET = 20;\nconst SMSADVANCE_CONFIG_DATA_RESERVED_LENGTH = 32;\nconst SMSADVANCE_CONFIG_DATA_RESERVED_DATA = 'CFG';\nconst SMSADVANCE_CONFIG_DATA_RESERVED_ENCODING = 'US-ASCII';\nconst SMSADVANCE_CONFIG_DATA_LENGTH = SMSADVANCE_CONFIG_DATA_RESERVED_OFFSET + SMSADVANCE_CONFIG_DATA_RESERVED_LENGTH;\n\n// These all read from sample save files\nconst SMSADVANCE_CONFIG_DATA_DEFAULT_DISPLAY_TYPE = 3;\nconst SMSADVANCE_CONFIG_DATA_DEFAULT_GAMMA_VALUE = 2;\nconst SMSADVANCE_CONFIG_DATA_DEFAULT_REGION = 0;\nconst SMSADVANCE_CONFIG_DATA_DEFAULT_SLEEP_FLICK = 0;\nconst SMSADVANCE_CONFIG_DATA_DEFAULT_CONFIG = 0x40;\nconst SMSADVANCE_CONFIG_DATA_DEFAULT_BORDER_COLOR = 0;\n\nconst GAME_TITLE = 'Made with savefileconverter.com'; // No game title is listed in an SMS ROM. The emulator appears to insert a filename of the ROM here, either when running in standalone mode or when integrated into the GBA OS\n\nexport default class SmsAdvanceEmulatorSaveData extends EmulatorBase {\n  static GAME_TITLE = GAME_TITLE;\n\n  static getMagic() {\n    return SMSADVANCE_MAGIC;\n  }\n\n  static getConfigDataLength() {\n    return SMSADVANCE_CONFIG_DATA_LENGTH;\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static createFromRawData(rawArrayBuffer, romArrayBuffer) {\n    const romChecksum = super.calculateRomChecksum(romArrayBuffer);\n\n    return super.createFromRawDataInternal(rawArrayBuffer, GAME_TITLE, romChecksum, SmsAdvanceEmulatorSaveData);\n  }\n\n  static createFromRawDataInternal(rawArrayBuffer, romChecksum) { // es-lint-disable  no-dupe-class-members (bug in eslint?)\n    return super.createFromRawDataInternal(rawArrayBuffer, GAME_TITLE, romChecksum, SmsAdvanceEmulatorSaveData);\n  }\n\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new SmsAdvanceEmulatorSaveData(flashCartArrayBuffer);\n  }\n\n  static requiresRom() {\n    return {\n      clazz: SmsRom,\n      requiredToConvert: ['convertToFormat'],\n    };\n  }\n\n  // Based on https://github.com/libertyernie/goombasav/blob/master/goombasav.h#L85\n  static createEmptyConfigDataArrayBuffer() {\n    const arrayBuffer = new ArrayBuffer(SMSADVANCE_CONFIG_DATA_LENGTH);\n    const dataView = new DataView(arrayBuffer);\n    const uint8Array = new Uint8Array(arrayBuffer);\n\n    const textEncoder = new TextEncoder(SMSADVANCE_CONFIG_DATA_RESERVED_ENCODING);\n\n    uint8Array.fill(0);\n\n    dataView.setUint16(SMSADVANCE_CONFIG_DATA_SIZE_OFFSET, SMSADVANCE_CONFIG_DATA_LENGTH, super.LITTLE_ENDIAN);\n    dataView.setUint16(SMSADVANCE_CONFIG_DATA_TYPE_OFFSET, super.TYPE_CONFIG_DATA, super.LITTLE_ENDIAN);\n\n    dataView.setUint8(SMSADVANCE_CONFIG_DATA_DISPLAY_TYPE_OFFSET, SMSADVANCE_CONFIG_DATA_DEFAULT_DISPLAY_TYPE);\n    dataView.setUint8(SMSADVANCE_CONFIG_DATA_GAMMA_VALUE_OFFSET, SMSADVANCE_CONFIG_DATA_DEFAULT_GAMMA_VALUE);\n    dataView.setUint8(SMSADVANCE_CONFIG_DATA_REGION_OFFSET, SMSADVANCE_CONFIG_DATA_DEFAULT_REGION);\n    dataView.setUint8(SMSADVANCE_CONFIG_DATA_SLEEP_FLICK_OFFSET, SMSADVANCE_CONFIG_DATA_DEFAULT_SLEEP_FLICK);\n    dataView.setUint8(SMSADVANCE_CONFIG_DATA_CONFIG_OFFSET, SMSADVANCE_CONFIG_DATA_DEFAULT_CONFIG);\n    dataView.setUint8(SMSADVANCE_CONFIG_DATA_BORDER_COLOR_OFFSET, SMSADVANCE_CONFIG_DATA_DEFAULT_BORDER_COLOR);\n\n    dataView.setUint32(SMSADVANCE_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET, 0, super.LITTLE_ENDIAN); // Checksum here gets set to 0 so that the file is \"clean\"\n\n    const encodedReservedData = textEncoder.encode(SMSADVANCE_CONFIG_DATA_RESERVED_DATA).slice(0, SMSADVANCE_CONFIG_DATA_RESERVED_LENGTH - 1);\n\n    uint8Array.set(encodedReservedData, SMSADVANCE_CONFIG_DATA_RESERVED_LENGTH);\n\n    return arrayBuffer;\n  }\n\n  static getPlatformSramRomChecksumFromConfigData(arrayBuffer, currentByte) {\n    const dataView = new DataView(arrayBuffer);\n\n    return dataView.getUint32(currentByte + SMSADVANCE_CONFIG_DATA_SRAM_ROM_CHECKSUM_OFFSET, super.LITTLE_ENDIAN);\n  }\n\n  static concatEmulatorArrayBuffer(magicArrayBuffer, stateHeaderArrayBuffer, compressedSaveDataArrayBuffer, configDataArrayBuffer) {\n    // From the test files I've made, when in standalone mode running ROMs directly from the GBA OS, the sections are arranged like this:\n    // When running in bundled mode,where you create a .gba file on your PC that has all the ROMs bundled into it, it has the confi data after the magic\n    return Util.concatArrayBuffers([magicArrayBuffer, stateHeaderArrayBuffer, compressedSaveDataArrayBuffer, configDataArrayBuffer]);\n  }\n\n  getUncompressedSize() {\n    return this.rawArrayBuffer.byteLength; // Unlike PocketNES and Goomba, SMSAdvance stores the compressed size in the state header rather than the uncompressed size. So override this to return the correct number\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/GameGear.js",
    "content": "import SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class GameGearFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new GameGearFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new GameGearFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(flashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return GameGearFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // GG saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gamegear';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaEverdrivePro/32X.js",
    "content": "import GenesisMegaEverdriveProGenesisFlashCartSaveData from './Genesis';\n\nexport default class GenesisMegaEverdrivePro32xFlashCartSaveData extends GenesisMegaEverdriveProGenesisFlashCartSaveData {\n\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaEverdrivePro/Genesis.js",
    "content": "import SaveFilesUtil from '../../../../util/SaveFiles';\nimport GenesisUtil from '../../../../util/Genesis';\n\nconst FILL_BYTE = 0x00; // Mega Everdrive Pro files are byte expanded with a fill byte of 0, just like emulators\n\nexport default class GenesisMegaEverdriveProGenesisFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    // Here we know that the input data comes from an everdrive, and so it's byte expanded with 0's\n\n    return new GenesisMegaEverdriveProGenesisFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    // Collapse then re-expand the data to account for cases where we're passed a Retrode-style file (with repeated bytes),\n    // or a Mega SD-style file (filled with 0xFF instead), and then re-fill it with 0x00 as the Mega Everdrive Pro expects\n\n    const flashCartArrayBuffer = GenesisUtil.changeFillByte(rawArrayBuffer, FILL_BYTE);\n\n    return new GenesisMegaEverdriveProGenesisFlashCartSaveData(flashCartArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(flashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return GenesisMegaEverdriveProGenesisFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // Genesis saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'genesis';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaEverdrivePro/NES.js",
    "content": "import SaveFilesUtil from '../../../../util/SaveFiles';\n\nexport default class GenesisMegaEverdriveProNesFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new GenesisMegaEverdriveProNesFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new GenesisMegaEverdriveProNesFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(flashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return GenesisMegaEverdriveProNesFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // NES saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'nes';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaEverdrivePro/SMS.js",
    "content": "import SaveFilesUtil from '../../../../util/SaveFiles';\nimport GenesisUtil from '../../../../util/Genesis';\n\n// Some knockoff everdrives produce byte-expanded files for SMS games even though the regular everdrives don't.\n// So let's just silently unexpand them when converting to raw\n//\n// This doesn't seem to be a major issue (only 1 report in a year) so let's not clutter the interface by offering the option\n// to expand the files when converting to flash cart format. It seems much more likely that someone would be converting their\n// saves *from* a knockoff cart than *to* a knockoff cart\n//\n// If someone does need to convert their saves to a cart that expects them byte-expanded, they can use https://savefileconverter.com/#/utilities/advanced?tab=byte-expansion\n\nexport default class GenesisMegaEverdriveProSmsFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    let rawArrayBuffer = flashCartArrayBuffer;\n\n    if (GenesisUtil.isByteExpanded(flashCartArrayBuffer) && !GenesisUtil.isEmpty(flashCartArrayBuffer)) {\n      rawArrayBuffer = GenesisUtil.byteCollapse(flashCartArrayBuffer);\n    }\n\n    return new GenesisMegaEverdriveProSmsFlashCartSaveData(flashCartArrayBuffer, rawArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new GenesisMegaEverdriveProSmsFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(flashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return GenesisMegaEverdriveProSmsFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // SMS saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'sms';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaEverdrivePro/SegaCd.js",
    "content": "import SegaCdUtil from '../../../../util/SegaCd';\n\nexport default class GenesisMegaEverdriveProSegaCdFlashCartSaveData {\n  static INTERNAL_MEMORY = 'internal-memory';\n\n  static RAM_CART = 'ram-cart';\n\n  static FLASH_CART_RAM_CART_SIZE = 131072; // The Mega Everdrive Pro produces RAM cart files of this size as of firmware v24.1129\n\n  static EMULATOR_RAM_CART_SIZE = 524288; // The emulators I've seen produce a RAM cart file of this size (note that the output size is changeable by the user)\n\n  static createFromFlashCartData({ flashCartInternalSaveArrayBuffer = null, flashCartRamCartSaveArrayBuffer = null }) {\n    let truncatedFlashCartInternalSaveBuffer = SegaCdUtil.makeEmptySave(SegaCdUtil.INTERNAL_SAVE_SIZE);\n    let truncatedFlashCartRamCartSaveArrayBuffer = SegaCdUtil.makeEmptySave(GenesisMegaEverdriveProSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE);\n    let rawRamCartSaveArrayBuffer = SegaCdUtil.makeEmptySave(GenesisMegaEverdriveProSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE);\n\n    if (flashCartInternalSaveArrayBuffer !== null) {\n      truncatedFlashCartInternalSaveBuffer = SegaCdUtil.truncateToActualSize(flashCartInternalSaveArrayBuffer);\n\n      if (truncatedFlashCartInternalSaveBuffer.byteLength !== SegaCdUtil.INTERNAL_SAVE_SIZE) {\n        throw new Error(`Internal save RAM is not the correct size. Must be ${SegaCdUtil.INTERNAL_SAVE_SIZE} bytes`);\n      }\n    }\n\n    if (flashCartRamCartSaveArrayBuffer !== null) {\n      truncatedFlashCartRamCartSaveArrayBuffer = SegaCdUtil.truncateToActualSize(flashCartRamCartSaveArrayBuffer);\n      rawRamCartSaveArrayBuffer = SegaCdUtil.resize(truncatedFlashCartRamCartSaveArrayBuffer, GenesisMegaEverdriveProSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE);\n    }\n\n    return new GenesisMegaEverdriveProSegaCdFlashCartSaveData(\n      truncatedFlashCartInternalSaveBuffer,\n      truncatedFlashCartRamCartSaveArrayBuffer,\n      truncatedFlashCartInternalSaveBuffer,\n      rawRamCartSaveArrayBuffer,\n    );\n  }\n\n  static createFromRawData({ rawInternalSaveArrayBuffer = null, rawRamCartSaveArrayBuffer = null }) {\n    let truncatedRawInternalSaveBuffer = SegaCdUtil.makeEmptySave(SegaCdUtil.INTERNAL_SAVE_SIZE);\n    let truncatedRawRamCartSaveArrayBuffer = SegaCdUtil.makeEmptySave(GenesisMegaEverdriveProSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE);\n    let flashCartRamCartSaveArrayBuffer = SegaCdUtil.makeEmptySave(GenesisMegaEverdriveProSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE);\n\n    if (rawInternalSaveArrayBuffer !== null) {\n      truncatedRawInternalSaveBuffer = SegaCdUtil.truncateToActualSize(rawInternalSaveArrayBuffer);\n\n      if (truncatedRawInternalSaveBuffer.byteLength !== SegaCdUtil.INTERNAL_SAVE_SIZE) {\n        throw new Error(`Internal save RAM is not the correct size. Must be ${SegaCdUtil.INTERNAL_SAVE_SIZE} bytes`);\n      }\n    }\n\n    if (rawRamCartSaveArrayBuffer !== null) {\n      truncatedRawRamCartSaveArrayBuffer = SegaCdUtil.truncateToActualSize(rawRamCartSaveArrayBuffer);\n      flashCartRamCartSaveArrayBuffer = SegaCdUtil.resize(truncatedRawRamCartSaveArrayBuffer, GenesisMegaEverdriveProSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE);\n    }\n\n    return new GenesisMegaEverdriveProSegaCdFlashCartSaveData(\n      truncatedRawInternalSaveBuffer,\n      flashCartRamCartSaveArrayBuffer,\n      truncatedRawInternalSaveBuffer,\n      truncatedRawRamCartSaveArrayBuffer,\n    );\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newRawRamCartArrayBuffer = SegaCdUtil.resize(flashCartSaveData.rawRamCartSaveArrayBuffer, newSize);\n\n    return new GenesisMegaEverdriveProSegaCdFlashCartSaveData(\n      flashCartSaveData.flashCartInternalSaveArrayBuffer,\n      flashCartSaveData.flashCartRamCartSaveArrayBuffer,\n      flashCartSaveData.rawInternalSaveArrayBuffer,\n      newRawRamCartArrayBuffer,\n    );\n  }\n\n  static getFlashCartFileExtension() {\n    return null; // See getFlashCartFileName()\n  }\n\n  static getFlashCartFileName(index = GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY) {\n    switch (index) {\n      case GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY:\n        return 'cd-bram.brm';\n\n      case GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART:\n        return 'cd-cart.srm';\n\n      default:\n        throw new Error(`Unknown index: ${index}`);\n    }\n  }\n\n  static getRawFileExtension() {\n    return 'brm';\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'segacd';\n  }\n\n  static getRawDefaultRamCartSize() {\n    return GenesisMegaEverdriveProSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE;\n  }\n\n  static getFlashCartDefaultRamCartSize() {\n    return GenesisMegaEverdriveProSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE;\n  }\n\n  constructor(flashCartInternalSaveArrayBuffer, flashCartRamCartSaveArrayBuffer, rawInternalSaveArrayBuffer, rawRamCartSaveArrayBuffer) {\n    this.flashCartInternalSaveArrayBuffer = flashCartInternalSaveArrayBuffer;\n    this.flashCartRamCartSaveArrayBuffer = flashCartRamCartSaveArrayBuffer;\n    this.rawInternalSaveArrayBuffer = rawInternalSaveArrayBuffer;\n    this.rawRamCartSaveArrayBuffer = rawRamCartSaveArrayBuffer;\n  }\n\n  getRawArrayBuffer(index = GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY) {\n    switch (index) {\n      case GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY:\n        return this.rawInternalSaveArrayBuffer;\n\n      case GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART:\n        return this.rawRamCartSaveArrayBuffer;\n\n      default:\n        throw new Error(`Unknown index: ${index}`);\n    }\n  }\n\n  getFlashCartArrayBuffer(index = GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY) {\n    switch (index) {\n      case GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY:\n        return this.flashCartInternalSaveArrayBuffer;\n\n      case GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART:\n        return this.flashCartRamCartSaveArrayBuffer;\n\n      default:\n        throw new Error(`Unknown index: ${index}`);\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaSD/32X.js",
    "content": "import GenesisBase from './GenesisBase';\n\nconst MEGA_SD_NEW_STYLE_PADDING_BYTE_SRAM = 0x00; // Smaller sample size with the 32X files I was given, but all of them were padded with 0x00\nconst MEGA_SD_NEW_STYLE_PADDING_BYTE_EEPROM = 0x00;\n\nconst PLATFORM_INFO = {\n  padding: {\n    sram: MEGA_SD_NEW_STYLE_PADDING_BYTE_SRAM,\n    eeprom: MEGA_SD_NEW_STYLE_PADDING_BYTE_EEPROM,\n  },\n};\n\nexport default class GenesisMegaSd32xFlashCartSaveData extends GenesisBase {\n  static createFromRawData(rawArrayBuffer) {\n    return super.createFromRawData(rawArrayBuffer, PLATFORM_INFO);\n  }\n\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return super.createFromFlashCartData(flashCartArrayBuffer);\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    return super.createWithNewSize(flashCartSaveData, newSize, PLATFORM_INFO);\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaSD/Genesis.js",
    "content": "import GenesisBase from './GenesisBase';\n\nconst MEGA_SD_NEW_STYLE_PADDING_BYTE_SRAM = 0x00; // 3/4 of the new style files I was given were padded with 0x00 but one was 0xFF\nconst MEGA_SD_NEW_STYLE_PADDING_BYTE_EEPROM = 0xFF; // The example new style eeprom save was padded with 0xFF\n\nconst PLATFORM_INFO = {\n  padding: {\n    sram: MEGA_SD_NEW_STYLE_PADDING_BYTE_SRAM,\n    eeprom: MEGA_SD_NEW_STYLE_PADDING_BYTE_EEPROM,\n  },\n};\n\nexport default class GenesisMegaSdGenesisFlashCartSaveData extends GenesisBase {\n  static createFromRawData(rawArrayBuffer) {\n    return super.createFromRawData(rawArrayBuffer, PLATFORM_INFO);\n  }\n\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return super.createFromFlashCartData(flashCartArrayBuffer);\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    return super.createWithNewSize(flashCartSaveData, newSize, PLATFORM_INFO);\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaSD/GenesisBase.js",
    "content": "// There are two \"styles\" of save files that can be generated by a Mega SD:\n// - The \"old style\" (from earlier firmware, it seems) which is byte expanded with 0xFF\n// - The \"new style\" (from later firmware) which is not byte expanded and includes a \"BUP2\" prepended to the bgeinning\n//\n// I'm not sure which firmware revision changed this, nor do I know whether a Mega SD can read both types of files with the most recent firmware\n//\n// Here we will accept either type of file as input, and always output a \"new style\" file. This will allow people to use their\n// old saves hopefully without making things complicated for the user.\n\nimport SaveFilesUtil from '../../../../util/SaveFiles';\nimport GenesisUtil from '../../../../util/Genesis';\nimport MathUtil from '../../../../util/Math';\nimport PaddingUtil from '../../../../util/Padding';\nimport Util from '../../../../util/util';\n\nconst MAGIC = 'BUP2';\nconst MAGIC_OFFSET = 0;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst MEGA_SD_NEW_STYLE_PADDED_SIZE = 32768; // Both SRAM and EEPROM saves appear to always be padded out to this size\n\n// const MEGA_SD_OLD_STYLE_FILL_BYTE = 0xFF; // \"Old style\" Mega SD files are byte expanded with a fill byte of 0xFF\nconst RAW_FILL_BYTE = 0x00;\n\nconst RAW_EEPROM_MIN_SIZE = 128; // Most EEPROM files we see (Wii VC, Everdrive) are this size for Wonder Boy in Monster World, even though the Mega SD only writes out 64 bytes (and GenesisPlus loads that fine)\nconst RAW_SRAM_MIN_SIZE = 16384; // 8kB, byte expanded\n\n// When converting from raw, I'm concerned about removing padding then checking the resulting file size\n// to see if it's an EEPROM save because ome games if saved early might not have much data, and so we might get an incorrect result.\n\nfunction isNewStyleSave(flashCartArrayBuffer) {\n  try {\n    Util.checkMagic(flashCartArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n  } catch (e) {\n    return false;\n  }\n\n  return ((flashCartArrayBuffer.byteLength > MAGIC.length) && MathUtil.isPowerOf2(flashCartArrayBuffer.byteLength - MAGIC.length));\n}\n\nfunction isOldStyleSave(flashCartArrayBuffer) {\n  // FIXME: The EEPROM part is a complete guess: we don't know how an EEPROM save in the \"old sty;e\" looks, since there weren't any in our set of sample files.\n  // See also convertFromOldStyleToRaw()\n  return ((GenesisUtil.isEepromSave(flashCartArrayBuffer) || GenesisUtil.isByteExpanded(flashCartArrayBuffer)) && MathUtil.isPowerOf2(flashCartArrayBuffer.byteLength));\n}\n\nfunction isRawSave(rawArrayBuffer) {\n  return ((GenesisUtil.isEepromSave(rawArrayBuffer) || GenesisUtil.isByteExpanded(rawArrayBuffer)) && MathUtil.isPowerOf2(rawArrayBuffer.byteLength));\n}\n\nfunction convertFromOldStyleToRaw(flashCartArrayBuffer) {\n  // FIXME: This is a complete guess: we don't know how an EEPROM save in the \"old sty;e\" looks, since there weren't any in our set of sample files.\n  // See also isOldStyleSave()\n  if (GenesisUtil.isEepromSave(flashCartArrayBuffer)) {\n    return PaddingUtil.padAtEndToMinimumSize(flashCartArrayBuffer, RAW_FILL_BYTE, RAW_EEPROM_MIN_SIZE); // EEPROM saves don't get byte expanded\n  }\n\n  const padding = PaddingUtil.getPadFromEndValueAndCount(flashCartArrayBuffer);\n  const unpaddedArrayBuffer = PaddingUtil.removePaddingFromEnd(flashCartArrayBuffer, padding.count);\n\n  return GenesisUtil.changeFillByte(unpaddedArrayBuffer, RAW_FILL_BYTE);\n}\n\nfunction convertFromNewStyleToRaw(flashCartArrayBuffer) {\n  // First, check if we're an EEPROM save. These have the magic on the front, and are padded out.\n\n  // For whatever reason, we've observed files in the new style padded with both 0xFF and 0x00.\n\n  const collapsedArrayBuffer = flashCartArrayBuffer.slice(MAGIC.length);\n  const padding = PaddingUtil.getPadFromEndValueAndCount(collapsedArrayBuffer);\n  const collapsedUnpaddedArrayBuffer = PaddingUtil.removePaddingFromEnd(collapsedArrayBuffer, padding.count);\n\n  if (GenesisUtil.isEepromSave(collapsedUnpaddedArrayBuffer)) {\n    return PaddingUtil.padAtEndToMinimumSize(collapsedUnpaddedArrayBuffer, RAW_FILL_BYTE, RAW_EEPROM_MIN_SIZE); // EEPROM saves don't get byte expanded\n  }\n\n  return PaddingUtil.padAtEndToMinimumSize(GenesisUtil.byteExpand(collapsedUnpaddedArrayBuffer, RAW_FILL_BYTE), RAW_FILL_BYTE, RAW_SRAM_MIN_SIZE);\n}\n\nfunction convertFromRawToNewStyle(rawArrayBuffer, platformInfo) {\n  // Remember that we may be given data in the Retrode style, with repeated bytes, or in the\n  // Mega Everdrive Pro/emulator-style file (filled with 0x00 instead)\n\n  const textEncoder = new TextEncoder(MAGIC_ENCODING);\n  const magicArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(MAGIC));\n\n  const padding = PaddingUtil.getPadFromEndValueAndCount(rawArrayBuffer);\n  let unpaddedArrayBuffer = PaddingUtil.removePaddingFromEnd(rawArrayBuffer, padding.count);\n\n  let paddingByte = platformInfo.padding.eeprom;\n\n  if (!GenesisUtil.isEepromSave(unpaddedArrayBuffer)) {\n    unpaddedArrayBuffer = GenesisUtil.byteCollapse(rawArrayBuffer);\n    paddingByte = platformInfo.padding.sram;\n  }\n\n  return Util.concatArrayBuffers([magicArrayBuffer, PaddingUtil.padAtEndToMinimumSize(unpaddedArrayBuffer, paddingByte, MEGA_SD_NEW_STYLE_PADDED_SIZE)]);\n}\n\nexport default class GenesisMegaSdGenesisFlashCartSaveData {\n  static NEW_STYLE_MAGIC = MAGIC;\n\n  static isRawSave(rawArrayBuffer) {\n    return isRawSave(rawArrayBuffer);\n  }\n\n  static convertFromRawToNewStyle(rawArrayBuffer, paddingByteSram, paddingByteEeprom) {\n    return convertFromRawToNewStyle(rawArrayBuffer, paddingByteSram, paddingByteEeprom);\n  }\n\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    if (isNewStyleSave(flashCartArrayBuffer)) {\n      return new GenesisMegaSdGenesisFlashCartSaveData(flashCartArrayBuffer, convertFromNewStyleToRaw(flashCartArrayBuffer));\n    }\n\n    if (isOldStyleSave(flashCartArrayBuffer)) {\n      return new GenesisMegaSdGenesisFlashCartSaveData(flashCartArrayBuffer, convertFromOldStyleToRaw(flashCartArrayBuffer));\n    }\n\n    throw new Error('This does not appear to be a Mega SD Genesis save file');\n  }\n\n  static createFromRawData(rawArrayBuffer, platformInfo) {\n    if (isRawSave(rawArrayBuffer, platformInfo)) {\n      const flashCartArrayBuffer = convertFromRawToNewStyle(rawArrayBuffer, platformInfo);\n\n      return new GenesisMegaSdGenesisFlashCartSaveData(flashCartArrayBuffer, rawArrayBuffer);\n    }\n\n    throw new Error('This does not appear to be a raw Genesis save file');\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize, platformInfo) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(flashCartSaveData.getRawArrayBuffer(), newSize); // Note that we're resizing the raw save here, which has a fill byte of 0x00, so it's okay to pad with zeros via this function\n\n    return GenesisMegaSdGenesisFlashCartSaveData.createFromRawData(newRawSaveData, platformInfo);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'SRM';\n  }\n\n  static getRawFileExtension() {\n    return null;\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null; // We pad out our files, so this doesn't make much sense here\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaSD/SMS.js",
    "content": "// SMS files on the Mega SD appear to just have \"BUP2\" prepended to the start of the file.\n// This is the same as the \"new style\" (i.e. recent firmware) of Genesis saves on the device.\n// I'm not sure if there's an \"old style\" for SMS saves on the Mega SD.\n//\n// We're going to make this also be able to load raw saves in case that was the \"old style\" (if there was even an \"old style\"!)\n\nimport SaveFilesUtil from '../../../../util/SaveFiles';\nimport MathUtil from '../../../../util/Math';\nimport Util from '../../../../util/util';\n\nconst MAGIC = 'BUP2';\nconst MAGIC_OFFSET = 0;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nfunction isNewStyleSave(flashCartArrayBuffer) {\n  try {\n    Util.checkMagic(flashCartArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n  } catch (e) {\n    return false;\n  }\n\n  return ((flashCartArrayBuffer.byteLength > MAGIC.length) && MathUtil.isPowerOf2(flashCartArrayBuffer.byteLength - MAGIC.length));\n}\n\nfunction isOldStyleSave(flashCartArrayBuffer) {\n  return MathUtil.isPowerOf2(flashCartArrayBuffer.byteLength);\n}\n\nfunction convertFromNewStyleToRaw(flashCartArrayBuffer) {\n  return flashCartArrayBuffer.slice(MAGIC.length);\n}\n\nfunction convertFromRawToNewStyle(rawArrayBuffer) {\n  const textEncoder = new TextEncoder(MAGIC_ENCODING);\n  const magicArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(MAGIC));\n\n  return Util.concatArrayBuffers([magicArrayBuffer, rawArrayBuffer]);\n}\n\nexport default class GenesisMegaSdSmsFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    if (isNewStyleSave(flashCartArrayBuffer)) {\n      return new GenesisMegaSdSmsFlashCartSaveData(flashCartArrayBuffer, convertFromNewStyleToRaw(flashCartArrayBuffer));\n    }\n\n    if (isOldStyleSave(flashCartArrayBuffer)) {\n      const rawArrayBuffer = flashCartArrayBuffer; // In the \"old sty;e\", the flash cart data is just raw data\n      return new GenesisMegaSdSmsFlashCartSaveData(convertFromRawToNewStyle(rawArrayBuffer), rawArrayBuffer);\n    }\n\n    throw new Error('This does not appear to be a Mega SD Sega Master System save file');\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new GenesisMegaSdSmsFlashCartSaveData(convertFromRawToNewStyle(rawArrayBuffer), rawArrayBuffer);\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(flashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return GenesisMegaSdSmsFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'SRM';\n  }\n\n  static getRawFileExtension() {\n    return null; // SMS saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'sms';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/Genesis/MegaSD/SegaCd.js",
    "content": "// The MegaSD produces a single file for Sega CD that's a concatenation of:\n//\n// - Magic\n// - Internal memory\n// - RAM cart\n//\n// I don't have an example of a file that only has the internal memory, so I don't know if the file is truncated\n// (i.e. it's just magic + internal memory) or if it also includes an empty RAM cart section. The only one I've seen has a blank section\n// at the end that's as long as the RAM cart section would be (but is all 0's)\n//\n// So we're going to make this code able to parse a file that's truncated but only output files that have both sections, just to be safe.\n\nimport SegaCdUtil from '../../../../util/SegaCd';\nimport Util from '../../../../util/util';\n\nconst MAGIC = 'BUP3';\nconst MAGIC_OFFSET = 0;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst INTERNAL_MEMORY_OFFSET = 4;\nconst RAM_CART_OFFSET = INTERNAL_MEMORY_OFFSET + SegaCdUtil.INTERNAL_SAVE_SIZE;\n\nexport default class GenesisMegaSdSegaCdFlashCartSaveData {\n  static INTERNAL_MEMORY = 'internal-memory';\n\n  static RAM_CART = 'ram-cart';\n\n  static FLASH_CART_RAM_CART_SIZE = 32768; // The RAM cart portion of a Mega SD file is this size\n\n  static EMULATOR_RAM_CART_SIZE = 524288; // The emulators I've seen produce a RAM cart file of this size (note that the output size is changeable by the user)\n\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    Util.checkMagic(flashCartArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const isShortVersion = (flashCartArrayBuffer.byteLength === (INTERNAL_MEMORY_OFFSET + SegaCdUtil.INTERNAL_SAVE_SIZE));\n    const isLongVersion = (flashCartArrayBuffer.byteLength === (INTERNAL_MEMORY_OFFSET + SegaCdUtil.INTERNAL_SAVE_SIZE + GenesisMegaSdSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE));\n\n    if (!isShortVersion && !isLongVersion) {\n      throw new Error('This file does not appear to be a Mega SD Sega CD save file');\n    }\n\n    const flashCartInternalSaveArrayBuffer = flashCartArrayBuffer.slice(INTERNAL_MEMORY_OFFSET, INTERNAL_MEMORY_OFFSET + SegaCdUtil.INTERNAL_SAVE_SIZE);\n\n    let flashCartRamCartSaveArrayBuffer = SegaCdUtil.makeEmptySave(GenesisMegaSdSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE);\n    if (isLongVersion) {\n      const potentialRamCartArrayBuffer = flashCartArrayBuffer.slice(RAM_CART_OFFSET, RAM_CART_OFFSET + GenesisMegaSdSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE);\n\n      // Ignore the RAM cart portion if it's incorrectly formatted. This can happen with a file that's only the\n      // internal memory: the RAM cart portion is all 0's\n      if (SegaCdUtil.isCorrectlyFormatted(potentialRamCartArrayBuffer)) {\n        // Consider adding a check here to see if potentialRamCartArrayBuffer is indeed all 0's\n        flashCartRamCartSaveArrayBuffer = potentialRamCartArrayBuffer;\n      }\n    }\n\n    const truncatedFlashCartInternalSaveBuffer = SegaCdUtil.truncateToActualSize(flashCartInternalSaveArrayBuffer);\n\n    if (truncatedFlashCartInternalSaveBuffer.byteLength !== SegaCdUtil.INTERNAL_SAVE_SIZE) {\n      throw new Error(`Internal save RAM is not the correct size. Must be ${SegaCdUtil.INTERNAL_SAVE_SIZE} bytes`);\n    }\n\n    const truncatedFlashCartRamCartSaveArrayBuffer = SegaCdUtil.truncateToActualSize(flashCartRamCartSaveArrayBuffer);\n    const rawRamCartSaveArrayBuffer = SegaCdUtil.resize(truncatedFlashCartRamCartSaveArrayBuffer, GenesisMegaSdSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE);\n\n    return new GenesisMegaSdSegaCdFlashCartSaveData(\n      flashCartArrayBuffer,\n      truncatedFlashCartInternalSaveBuffer,\n      rawRamCartSaveArrayBuffer,\n    );\n  }\n\n  static createFromRawData({ rawInternalSaveArrayBuffer = null, rawRamCartSaveArrayBuffer = null }) {\n    const textEncoder = new TextEncoder(MAGIC_ENCODING);\n    const magicArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(MAGIC));\n\n    let truncatedRawInternalSaveBuffer = SegaCdUtil.makeEmptySave(SegaCdUtil.INTERNAL_SAVE_SIZE);\n    let truncatedRawRamCartSaveArrayBuffer = SegaCdUtil.makeEmptySave(GenesisMegaSdSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE);\n    let flashCartRamCartSaveArrayBuffer = SegaCdUtil.makeEmptySave(GenesisMegaSdSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE);\n\n    if (rawInternalSaveArrayBuffer !== null) {\n      truncatedRawInternalSaveBuffer = SegaCdUtil.truncateToActualSize(rawInternalSaveArrayBuffer);\n\n      if (truncatedRawInternalSaveBuffer.byteLength !== SegaCdUtil.INTERNAL_SAVE_SIZE) {\n        throw new Error(`Internal save RAM is not the correct size. Must be ${SegaCdUtil.INTERNAL_SAVE_SIZE} bytes`);\n      }\n    }\n\n    if (rawRamCartSaveArrayBuffer !== null) {\n      truncatedRawRamCartSaveArrayBuffer = SegaCdUtil.truncateToActualSize(rawRamCartSaveArrayBuffer);\n      flashCartRamCartSaveArrayBuffer = SegaCdUtil.resize(truncatedRawRamCartSaveArrayBuffer, GenesisMegaSdSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE);\n    }\n\n    const flashCartArrayBuffer = Util.concatArrayBuffers([magicArrayBuffer, truncatedRawInternalSaveBuffer, flashCartRamCartSaveArrayBuffer]);\n\n    return new GenesisMegaSdSegaCdFlashCartSaveData(\n      flashCartArrayBuffer,\n      truncatedRawInternalSaveBuffer,\n      truncatedRawRamCartSaveArrayBuffer,\n    );\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newRawRamCartArrayBuffer = SegaCdUtil.resize(flashCartSaveData.rawRamCartSaveArrayBuffer, newSize);\n\n    return new GenesisMegaSdSegaCdFlashCartSaveData(\n      flashCartSaveData.flashCartArrayBuffer,\n      flashCartSaveData.rawInternalSaveArrayBuffer,\n      newRawRamCartArrayBuffer,\n    );\n  }\n\n  static getFlashCartFileExtension() {\n    return 'SRM';\n  }\n\n  static getRawFileExtension() {\n    return 'brm';\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'segacd';\n  }\n\n  static getRawDefaultRamCartSize() {\n    return GenesisMegaSdSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE;\n  }\n\n  static getFlashCartDefaultRamCartSize() {\n    return GenesisMegaSdSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE;\n  }\n\n  constructor(flashCartArrayBuffer, rawInternalSaveArrayBuffer, rawRamCartSaveArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawInternalSaveArrayBuffer = rawInternalSaveArrayBuffer;\n    this.rawRamCartSaveArrayBuffer = rawRamCartSaveArrayBuffer;\n  }\n\n  getRawArrayBuffer(index = GenesisMegaSdSegaCdFlashCartSaveData.INTERNAL_MEMORY) {\n    switch (index) {\n      case GenesisMegaSdSegaCdFlashCartSaveData.INTERNAL_MEMORY:\n        return this.rawInternalSaveArrayBuffer;\n\n      case GenesisMegaSdSegaCdFlashCartSaveData.RAM_CART:\n        return this.rawRamCartSaveArrayBuffer;\n\n      default:\n        throw new Error(`Unknown index: ${index}`);\n    }\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/N64/GB64Emulator.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nGB64 is a GB/GBC emulator that runs on the N64\n\nThe save format has a header which is described here: https://github.com/lambertjamesd/gb64/blob/master/src/gameboy.h#L112\n\nstruct GameboySettings\n{\n    // Always has the value 0x47423634 (GB64 as an ascii string)\n    0: u32 header;\n    // Used to check save file compatibility\n    4: u32 version;\n    8: u16 flags;\n    // color palette to use for non color games\n    10: u16 bgpIndex;\n    12: u16 obp0Index;\n    14: u16 obp1Index;\n    16: struct InputMapping inputMapping; -> 16 bytes\n    32: struct GameboyGraphicsSettings graphics; -> 4 bytes\n    40: u64 timer; -> unsure why this isn't offset 36: some sort of alignment issue?\n    48: enum StoredInfoType storedType; -> 4 bytes\n    52: u32 compressedSize;\n};\n\nOffset 128: Beginning of data compressed with gzip\n\nWhen uncompressed, this data is a concatenation of various things the emulator needs, and begins with SRAM data. The length of the SRAM\ndata is determined from the ROM\n\nstruct InputMapping\n{\n    u8 right;\n    u8 left;\n    u8 up;\n    u8 down;\n    u8 a;\n    u8 b;\n    u8 select;\n    u8 start;\n\n    u8 save;\n    u8 load;\n    u8 openMenu;\n    u8 fastForward;\n\n    u32 reserved2;\n};\n\nstruct GameboyGraphicsSettings\n{\n    u32 unused:27;\n    u32 smooth:1;\n    u32 scaleSetting:4;\n};\n\nenum StoredInfoType\n{\n    StoredInfoTypeAll,\n    StoredInfoTypeSettingsRAM,\n    StoredInfoTypeRAM,\n    StoredInfoTypeSettings,\n    StoredInfoTypeNone,\n};\n*/\n\nimport pako from 'pako';\nimport Util from '../../../util/util';\nimport SaveFilesUtil from '../../../util/SaveFiles';\nimport GbRom from '../../../rom-formats/gb';\n\nconst LITTLE_ENDIAN = false;\n\nconst MAGIC = 'GB64';\nconst MAGIC_OFFSET = 0;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst VERSION_OFFSET = 4;\nconst FLAGS_OFFSET = 8;\nconst BGP_INDEX_OFFSET = 10;\nconst OBP0_INDEX_OFFSET = 12;\nconst OBP1_INDEX_OFFSET = 14;\nconst INPUT_MAPPING_OFFSET = 16;\nconst INPUT_MAPPING_LENGTH = 16;\nconst GRAPHICS_SETTINGS_OFFSET = 32;\nconst TIMER_OFFSET = 40;\nconst STORED_INFO_TYPE_OFFSET = 48;\nconst COMPRESSED_SIZE_OFFSET = 52;\nconst GAMEBOY_STATE_DATA_OFFSET = 0x80;\n\nconst HEADER_SIZE = GAMEBOY_STATE_DATA_OFFSET;\nconst HEADER_FILL_VALUE = 0x00;\n\nconst FILE_LENGTH = 0x20000;\nconst FILE_PADDING_VALUE = 0xAA;\n\nconst DESIRED_VERSION = 2;\n\nconst DEFAULT_FLAGS = 0x0000;\nconst DEFAULT_BGP_INDEX = 0;\nconst DEFAULT_OBP0_INDEX = 0;\nconst DEFAULT_OBP1_INDEX = 0;\nconst DEFAULT_GRAPHICS_SETTINGS = 0x00000002;\nconst DEFAULT_TIMER = 0x02C445F9n; // 0n;\n\nconst STORED_INFO_TYPE_ALL = 0;\n// const STORED_INFO_TYPE_SETTINGS_RAM = 1; // The emulator returns immediately after reading the SRAM data if the stored info type is one of these: https://github.com/lambertjamesd/gb64/blob/master/src/save.c#L588\n// const STORED_INFO_TYPE_RAM = 2;\nconst STORED_INFO_TYPE_SETTINGS = 3;\nconst STORED_INFO_TYPE_NONE = 4;\n\nconst GAMEBOY_STATE_DATA_SRAM_OFFSET = 0;\nconst GAMEBOY_STATE_DATA_FILL_VALUE = 0x00;\nconst MIN_SRAM_SIZE = 8192;\n\nconst GAMEBOY_DATA_DATA_LENGTH_GB = (25472 - 8192); // Gotten empirically by looking at a save file for Zelda: Link's Awakening: file size minus game SRAM size\nconst GAMEBOY_DATA_DATA_LENGTH_GBC = (58240 - 8192); // Gotten empirically by looking at a save file for Zelda: Oracle of Seasons: file size minus game SRAM size\n\n/*\nconst PALETTE_COUNT = 64; // https://github.com/lambertjamesd/gb64/blob/a6b90ef5454e3f2cf4b92dd746926e7ddd858f91/src/memory_map.h#L177\nconst MAX_RAM_SIZE = 0x8000; // https://github.com/lambertjamesd/gb64/blob/a6b90ef5454e3f2cf4b92dd746926e7ddd858f91/src/memory_map.h#L12\nconst MISC_MEMORY_SIZE = 0x8000; // Man this is so complex I don't want to add it all up: https://github.com/lambertjamesd/gb64/blob/a6b90ef5454e3f2cf4b92dd746926e7ddd858f91/src/memory_map.h#L160\nconst MISC_SAVE_STATE_DATA_SIZE = 0x8000; // Same for this: really complex and I don't want to add it up: https://github.com/lambertjamesd/gb64/blob/391b553966ef1ff45368bad8bb28fea119aa20de/src/save.c#L434\n\n// From https://github.com/lambertjamesd/gb64/blob/391b553966ef1ff45368bad8bb28fea119aa20de/src/save.c#L25\nfunction alignFlashOffset(offset) {\n  return ((offset + 0x7F) & ~0x7F);\n}\n*/\n\nfunction calculateGameboyStateDataSize(isGbc) {\n  /*\n  // Taken from https://github.com/lambertjamesd/gb64/blob/master/src/save.c#L441\n  // which seems, oddly enough, to be different from https://github.com/lambertjamesd/gb64/blob/master/src/save.c#L720\n  // (The latter doesn't rely on checking if the platform is GBC, for example)\n  // I wonder if the latter is not actually used\n\n  let offset = 0;\n  offset = alignFlashOffset(offset + sramLength);\n  offset = alignFlashOffset(offset + (isGbc ? 0x4000 : 0x2000));\n  offset = alignFlashOffset(offset + (2 * PALETTE_COUNT));\n  offset = alignFlashOffset(offset + (isGbc ? MAX_RAM_SIZE : 0x2000));\n  offset = alignFlashOffset(offset + MISC_MEMORY_SIZE);\n  offset = alignFlashOffset(offset + MISC_SAVE_STATE_DATA_SIZE);\n\n  return offset;\n  */\n  if (isGbc) {\n    return GAMEBOY_DATA_DATA_LENGTH_GBC;\n  }\n\n  return GAMEBOY_DATA_DATA_LENGTH_GB;\n}\n\nfunction getDefaultInputMapping() {\n  // Just hardcode the default data I see in an example save file, rather than spelling out every\n  // last item here\n\n  const arrayBuffer = Util.getFilledArrayBuffer(INPUT_MAPPING_LENGTH, 0x00);\n  const dataView = new DataView(arrayBuffer);\n\n  dataView.setUint32(0, 0x08090B0A, false);\n  dataView.setUint32(4, 0x0F0E0D0C, false);\n  dataView.setUint32(8, 0x03020100, false);\n\n  return arrayBuffer;\n}\n\nexport default class Gb64EmulatorSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer, romArrayBuffer) {\n    const gbRom = new GbRom(romArrayBuffer);\n\n    return Gb64EmulatorSaveData.createFromFlashCartDataInternal(flashCartArrayBuffer, gbRom.getSramSize());\n  }\n\n  static createFromFlashCartDataInternal(flashCartArrayBuffer, sramSize) {\n    // Based on https://github.com/lambertjamesd/gb64/blob/master/src/save.c#L492\n\n    Util.checkMagic(flashCartArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const flashCartDataView = new DataView(flashCartArrayBuffer);\n\n    const version = flashCartDataView.getUint32(VERSION_OFFSET, LITTLE_ENDIAN);\n    // const flags = flashCartDataView.getUint16(FLAGS_OFFSET, LITTLE_ENDIAN);\n    const storedInfoType = flashCartDataView.getUint32(STORED_INFO_TYPE_OFFSET, LITTLE_ENDIAN);\n    const compressedSize = flashCartDataView.getUint32(COMPRESSED_SIZE_OFFSET, LITTLE_ENDIAN);\n    const dataIsCompressed = (version === DESIRED_VERSION);\n\n    if ((version < 0) || (version > DESIRED_VERSION)) {\n      throw new Error(`Found version ${version} but can only read versions 0 through ${DESIRED_VERSION}`);\n    }\n\n    if ((storedInfoType < STORED_INFO_TYPE_ALL) || (storedInfoType > STORED_INFO_TYPE_NONE)) {\n      throw new Error(`Unrecognized stored info type: ${storedInfoType}`);\n    }\n\n    if ((storedInfoType === STORED_INFO_TYPE_SETTINGS) || (storedInfoType === STORED_INFO_TYPE_NONE)) {\n      throw new Error('This file does not contain save data');\n    }\n\n    let gameboyStateData = null;\n\n    if (dataIsCompressed) {\n      const compressedData = flashCartArrayBuffer.slice(GAMEBOY_STATE_DATA_OFFSET, GAMEBOY_STATE_DATA_OFFSET + compressedSize);\n\n      gameboyStateData = pako.inflate(compressedData);\n    } else {\n      gameboyStateData = flashCartArrayBuffer.slice(GAMEBOY_STATE_DATA_OFFSET); // In the emulator code, this begins at ALIGN_FLASH_OFFSET(sizeof(GameboySettings)), which is ALIGN_FLASH_OFFSET(56), which is 0x80 -- same as FLASH_BLOCK_SIZE for the compressed data\n    }\n\n    // The emulator appears to incorrectly obtain the SRAM size from the ROM:\n    // https://github.com/lambertjamesd/gb64/blob/master/src/save.c#L443\n    // https://github.com/lambertjamesd/gb64/blob/dde5833ec53dda6ec642d591b9985422eecba923/src/rom.c#L206\n    //\n    // Effectively, this appears to ensure a minimum size of 8kB, even if the ROM specifies 2kB or 0kB.\n    // Notice also that the weird MBC2 cartridge type is also covered by this: it was a value of 0 in the header but has 2kB of onboard RAM.\n    // It's not tested for specifically by the emulator, but happens to succeed by making a minimum value of 8kB.\n\n    const sramLength = Math.max(sramSize, MIN_SRAM_SIZE);\n\n    const rawArrayBuffer = gameboyStateData.slice(GAMEBOY_STATE_DATA_SRAM_OFFSET, GAMEBOY_STATE_DATA_SRAM_OFFSET + sramLength);\n\n    return new Gb64EmulatorSaveData(flashCartArrayBuffer, rawArrayBuffer, gameboyStateData);\n  }\n\n  static createFromRawData(rawArrayBuffer, romArrayBuffer) {\n    const gbRom = new GbRom(romArrayBuffer);\n\n    return Gb64EmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, gbRom.getSramSize(), gbRom.getIsGbc());\n  }\n\n  static createFromRawDataInternal(rawArrayBuffer, sramLength, isGbc) {\n    const headerArrayBuffer = Util.setMagic(Util.getFilledArrayBuffer(HEADER_SIZE, HEADER_FILL_VALUE), MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n    const headerDataView = new DataView(headerArrayBuffer);\n    const headerUint8Array = new Uint8Array(headerArrayBuffer);\n\n    const defaultInputMapping = new Uint8Array(getDefaultInputMapping());\n\n    headerUint8Array.set(defaultInputMapping, INPUT_MAPPING_OFFSET);\n\n    headerDataView.setUint32(VERSION_OFFSET, DESIRED_VERSION, LITTLE_ENDIAN);\n    headerDataView.setUint16(FLAGS_OFFSET, DEFAULT_FLAGS, LITTLE_ENDIAN);\n    headerDataView.setUint16(BGP_INDEX_OFFSET, DEFAULT_BGP_INDEX, LITTLE_ENDIAN);\n    headerDataView.setUint16(OBP0_INDEX_OFFSET, DEFAULT_OBP0_INDEX, LITTLE_ENDIAN);\n    headerDataView.setUint16(OBP1_INDEX_OFFSET, DEFAULT_OBP1_INDEX, LITTLE_ENDIAN);\n    headerDataView.setUint32(GRAPHICS_SETTINGS_OFFSET, DEFAULT_GRAPHICS_SETTINGS, LITTLE_ENDIAN);\n    headerDataView.setBigUint64(TIMER_OFFSET, DEFAULT_TIMER, LITTLE_ENDIAN);\n    headerDataView.setUint32(STORED_INFO_TYPE_OFFSET, STORED_INFO_TYPE_ALL, LITTLE_ENDIAN);\n\n    // The data which is compressed is a concatenation of SRAM data first, then other blocks of data used by the\n    // emulator like RAM, etc. We need to include space for all of it so that the emulator can read it in, otherwise\n    // the emulator will fail reading the file: https://github.com/lambertjamesd/gb64/blob/master/src/save.c#L441\n\n    const gameboyStateDataSize = calculateGameboyStateDataSize(isGbc);\n\n    const resizedRawArrayBuffer = SaveFilesUtil.resizeRawSave(rawArrayBuffer, sramLength, GAMEBOY_STATE_DATA_FILL_VALUE);\n    const gameboyStateDataPadding = Util.getFilledArrayBuffer(gameboyStateDataSize, GAMEBOY_STATE_DATA_FILL_VALUE);\n\n    const gameboyStateData = Util.concatArrayBuffers([resizedRawArrayBuffer, gameboyStateDataPadding]);\n    const compressedData = pako.gzip(gameboyStateData); // Don't use deflate() because gb64 uses a tiny zlib library that explicitly expects gzip: https://github.com/lambertjamesd/gb64/blob/391b553966ef1ff45368bad8bb28fea119aa20de/src/save.c#L260\n\n    headerDataView.setUint32(COMPRESSED_SIZE_OFFSET, compressedData.byteLength, LITTLE_ENDIAN);\n\n    const paddingArrayBuffer = Util.getFilledArrayBuffer(FILE_LENGTH - HEADER_SIZE - compressedData.byteLength, FILE_PADDING_VALUE);\n\n    const flashCartArrayBuffer = Util.concatArrayBuffers([headerArrayBuffer, compressedData, paddingArrayBuffer]);\n\n    return new Gb64EmulatorSaveData(flashCartArrayBuffer, rawArrayBuffer, gameboyStateData);\n  }\n\n  static createWithNewSize(gb64EmulatorSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(gb64EmulatorSaveData.getRawArrayBuffer(), newSize);\n\n    return new Gb64EmulatorSaveData(gb64EmulatorSaveData.getFlashCartArrayBuffer(), newRawSaveData, gb64EmulatorSaveData.gameboyStateDataArrayBuffer);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'fla';\n  }\n\n  static getRawFileExtension() {\n    return 'srm'; // GB/C saves have many possible extensions, but keeping .fla is definitely not the correct one\n  }\n\n  static requiresRom() {\n    return {\n      clazz: GbRom,\n      requiredToConvert: ['convertToFormat', 'convertToRaw'],\n    };\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gb';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer, gameboyStateDataArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.gameboyStateDataArrayBuffer = gameboyStateDataArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n\n  getGameboyStateDataArrayBuffer() {\n    return this.gameboyStateDataArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/N64/N64.js",
    "content": "/*\nSwaps the endianness of N64 save data for SRAM and FlashRAM files. EEPROM files do not need to be endian swapped\n*/\n\nimport N64Util from '../../../util/N64';\nimport SaveFilesUtil from '../../../util/SaveFiles';\n\nexport default class N64FlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    const rawArrayBuffer = N64Util.needsEndianSwap(flashCartArrayBuffer) ? N64Util.endianSwap(flashCartArrayBuffer) : flashCartArrayBuffer;\n\n    return new N64FlashCartSaveData(flashCartArrayBuffer, rawArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    const flashCartArrayBuffer = N64Util.needsEndianSwap(rawArrayBuffer) ? N64Util.endianSwap(rawArrayBuffer) : rawArrayBuffer;\n\n    return new N64FlashCartSaveData(flashCartArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(n64FlashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(n64FlashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return N64FlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return null; // N64 saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static getRawFileExtension() {\n    return null; // N64 saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'n64'; // Apparently N64 Everdrives will ignore a save that's the wrong size, and just overwrite it\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/N64/NES.js",
    "content": "// Some N64 flash carts support an NES core that runs on the FPGA, as opposed to the Neon64 emulator supported by others\n// It seems that by default on an Everdrive 64 X7, it saves out 128kB save files, of which the first 8kB (or whatever) is the actual\n// SRAM data, and the rest is padded with 0xAA. This can be changed in the Everdrive menu, under ROM Info for a particular ROM.\n//\n// The core is able to read in a \"regualar\" 8kB file, and then it rewrites it as 128kB again padded with 0xAA\n//\n// The emulator I tried was able to read in the 128kB file and ignore everything beyond the necessary first 8kB.\n\nimport SaveFilesUtil from '../../../util/SaveFiles';\nimport Util from '../../../util/util';\n\nconst PADDED_SIZE = 131072;\nconst PADDING_VALUE = 0xAA;\n\nfunction padArrayBuffer(arrayBuffer, paddedSize) {\n  if (arrayBuffer.byteLength <= paddedSize) {\n    const paddingArrayBuffer = Util.getFilledArrayBuffer(paddedSize - arrayBuffer.byteLength, PADDING_VALUE);\n\n    return Util.concatArrayBuffers([arrayBuffer, paddingArrayBuffer]);\n  }\n\n  return arrayBuffer;\n}\n\nexport default class N64NesFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new N64NesFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    const flashCartArrayBuffer = padArrayBuffer(rawArrayBuffer, PADDED_SIZE);\n\n    return new N64NesFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer, rawArrayBuffer); // Pass the new array buffer as both raw and flash cart, because in the UI we want the size to show up as 128kB to prevent confusion and that size is read from the raw array buffer\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newFlashCartArrayBuffer = SaveFilesUtil.resizeRawSave(flashCartSaveData.getOriginalRawArrayBuffer(), newSize, PADDING_VALUE);\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(flashCartSaveData.getOriginalRawArrayBuffer(), newSize);\n\n    return new N64NesFlashCartSaveData(newFlashCartArrayBuffer, newRawSaveData, flashCartSaveData.getOriginalRawArrayBuffer());\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // NES saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'nes';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer, originalRawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.originalRawArrayBuffer = originalRawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getOriginalRawArrayBuffer() {\n    return this.originalRawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/N64/Neon64Emulator.js",
    "content": "/*\nNeon64 is an NES emulator that runs on the N64\n\nDetails on the save format: https://github.com/hcs64/neon64v2/issues/20\n\nThe format is:\n\n0x10000-0x10003: 0x79783B4A\n0x10004-0x10007: 0x985626E0\n0x10008-0x12007: battery backed RAM\n0x12008-0x1200B: 0x0BDFD303\n0x1200C-0x1200F: 0x4579BC39\n\nAll of the rest of the file is ignored by the emulator. It happens to be filled with 0xAA.\nThere is an 8 byte magic header before the save data, and another 8 byte magic footer afterward.\nOnly 8kB saves are supported.\n*/\n\nimport Util from '../../../util/util';\nimport SaveFilesUtil from '../../../util/SaveFiles';\n\nconst LITTLE_ENDIAN = false;\n\nconst HEADER = [\n  0x79783B4A,\n  0x985626E0,\n];\n\nconst FOOTER = [\n  0x0BDFD303,\n  0x4579BC39,\n];\n\nconst HEADER_OFFSET = 0x10000;\nconst HEADER_LENGTH = HEADER.length * 4;\nconst SAVE_OFFSET = HEADER_OFFSET + HEADER_LENGTH;\nconst SAVE_LENGTH = 8192; // Neon64 only works with 8kB saves\nconst FOOTER_OFFSET = HEADER_OFFSET + HEADER_LENGTH + SAVE_LENGTH;\n\nconst FILL_BYTE = 0xAA;\nconst FILE_LENGTH = 0x20000;\n\nfunction checkHeaderAndFooter(flashCartArrayBuffer) {\n  const dataView = new DataView(flashCartArrayBuffer);\n\n  const headerMatches = HEADER.every((magic, index) => (dataView.getUint32(HEADER_OFFSET + (index * 4), LITTLE_ENDIAN) === magic));\n  const footerMatches = FOOTER.every((magic, index) => (dataView.getUint32(FOOTER_OFFSET + (index * 4), LITTLE_ENDIAN) === magic));\n\n  if (!headerMatches || !footerMatches) {\n    throw new Error('This does not appear to be a Neon64 save file');\n  }\n}\n\nfunction fillInHeaderAndFooter(flashCartArrayBuffer) {\n  const dataView = new DataView(flashCartArrayBuffer);\n\n  HEADER.forEach((magic, index) => { dataView.setUint32(HEADER_OFFSET + (index * 4), magic, LITTLE_ENDIAN); });\n  FOOTER.forEach((magic, index) => { dataView.setUint32(FOOTER_OFFSET + (index * 4), magic, LITTLE_ENDIAN); });\n}\n\nexport default class Neon64EmulatorSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    if (flashCartArrayBuffer.byteLength !== FILE_LENGTH) {\n      throw new Error('This does not appear to be a Neon64 save file');\n    }\n\n    checkHeaderAndFooter(flashCartArrayBuffer);\n\n    return new Neon64EmulatorSaveData(flashCartArrayBuffer, flashCartArrayBuffer.slice(SAVE_OFFSET, SAVE_OFFSET + SAVE_LENGTH));\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    if (rawArrayBuffer.byteLength !== SAVE_LENGTH) {\n      throw new Error('Neon64 only works with 8kB NES save files');\n    }\n\n    const emptyArrayBuffer = Util.getFilledArrayBuffer(FILE_LENGTH, FILL_BYTE);\n\n    fillInHeaderAndFooter(emptyArrayBuffer);\n\n    const flashCartArrayBuffer = Util.setArrayBufferPortion(emptyArrayBuffer, rawArrayBuffer, SAVE_OFFSET, 0, SAVE_LENGTH);\n\n    return new Neon64EmulatorSaveData(flashCartArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(neon64EmulatorSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(neon64EmulatorSaveData.getRawArrayBuffer(), newSize);\n\n    // Don't call createFromRawData() with the resized raw data, because we'll get an error saying Neon can only do 8kB saves. Bypass it instead.\n    return new Neon64EmulatorSaveData(neon64EmulatorSaveData.getFlashCartArrayBuffer(), newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // NES saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null; // Neon64 only works with 8kB saves, and if we get a save of another size we can't adjust it\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/NES.js",
    "content": "import SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class NesFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new NesFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new NesFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(nesFlashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(nesFlashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return NesFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // NES saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'nes';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/PcEngine.js",
    "content": "import PcEngineUtil from '../../util/PcEngine';\n\nexport default class PcEngineFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    PcEngineUtil.verifyPcEngineData(flashCartArrayBuffer);\n    return new PcEngineFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    PcEngineUtil.verifyPcEngineData(rawArrayBuffer);\n    return new PcEngineFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm'; // Unsure what the best extension for PCE saves is\n  }\n\n  static getRawFileExtension() {\n    return null; // Unsure what the best extension for PCE saves is\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null;\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/SMS.js",
    "content": "import SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class SmsFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new SmsFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new SmsFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(flashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(flashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return SmsFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // SMS saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'sms';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/SNES/GB.js",
    "content": "import SaveFilesUtil from '../../../util/SaveFiles';\n\nexport default class SuperGameboyFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new SuperGameboyFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new SuperGameboyFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(gbFlashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(gbFlashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return SuperGameboyFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return null; // GB saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static getRawFileExtension() {\n    return null; // GB saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gb';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/FlashCarts/SNES/SNES.js",
    "content": "import SaveFilesUtil from '../../../util/SaveFiles';\n\nexport default class SnesFlashCartSaveData {\n  static createFromFlashCartData(flashCartArrayBuffer) {\n    return new SnesFlashCartSaveData(flashCartArrayBuffer, flashCartArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new SnesFlashCartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(snesFlashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(snesFlashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return SnesFlashCartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getFlashCartFileExtension() {\n    return 'srm';\n  }\n\n  static getRawFileExtension() {\n    return null; // SNES saves have many possible extensions, and we just want to keep whatever the original extension was\n  }\n\n  static requiresRom() {\n    return null;\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'snes';\n  }\n\n  constructor(flashCartArrayBuffer, rawArrayBuffer) {\n    this.flashCartArrayBuffer = flashCartArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getFlashCartArrayBuffer() {\n    return this.flashCartArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GBA/ActionReplay.js",
    "content": "/*\nThe Action Replay data format is just a raw file with no header or footer.\n*/\n\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class ActionReplaySaveData {\n  static createFromActionReplayData(actionReplayArrayBuffer) {\n    return new ActionReplaySaveData(actionReplayArrayBuffer);\n  }\n\n  static createFromEmulatorData(emulatorArrayBuffer) {\n    return new ActionReplaySaveData(emulatorArrayBuffer);\n  }\n\n  static createWithNewSize(actionReplaySaveData, newSize) {\n    // Sometimes we may need to change the size of our raw buffer. This is because it's very difficult to determine\n    // what the save game size is for a particular game and so some emulators get this wrong and there are many files\n    // floating around the Internet that are the wrong size.\n    //\n    // So we can either truncate them (most likely), or pad them with zeros to make them the size\n    // that the game/emulator actually expects.\n    //\n    // More information:\n    // - https://zork.net/~st/jottings/GBA_saves.html\n    // - https://dillonbeliveau.com/2020/06/05/GBA-FLASH.html\n\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(actionReplaySaveData.getRawSaveData(), newSize);\n\n    return ActionReplaySaveData.createFromEmulatorData(newRawSaveData);\n  }\n\n  // This constructor creates a new object from a binary representation of a Action Replay save data file\n  constructor(arrayBuffer) {\n    this.rawSaveData = arrayBuffer;\n  }\n\n  getRawSaveData() {\n    return this.rawSaveData;\n  }\n\n  getArrayBuffer() {\n    return this.rawSaveData;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GBA/GameShark.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"&\", \">>>\", \"<<\"] }] */\n\n/*\nThe GameShark data format header contains a header, the raw save, then a CRC.\nThe header contains a number of strings, so it's of variable length:\n\n- First 4 bytes: 0x0000000d (length of \"SharkPortSave\")\n- Next 13 bytes: \"SharkPortSave\"\n- Next 4 bytes: Platform (GBA is 0x000f0000)\n- Next 4 bytes: Length of title\n- Next N bytes: Title\n- Next 4 bytes: Length of date\n- Next N bytes: Date\n- Next 4 bytes: Length of notes\n- Next N bytes: Notes\n- Next 4 bytes: Length of raw save (including 0x1c bytes of a second header)\n- Next 0x1C bytes: Second header\n- Next N bytes: Raw save\n- Next 4 bytes: CRC of second header + raw save\n\nThe second header is information from the ROM of the game the save is for:\n- First 16 bytes: Game internal name (this is checked by some emulators, so we need to set it correctly)\n- Next 2 bytes: ROM checksum\n- Next 1 byte: ROM compliment check\n- Next 1 byte: \"Maker\" (unsure what this is, often seems to be 0x30)\n- Next 1 byte: 0x1 (for 1 save?)\n- Next 7 bytes: 0x0\n(see https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/src/gba/GBA.cpp#L1168)\n*/\n\nimport GbaRom from '../../rom-formats/gba';\nimport Util from '../../util/util';\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nconst LITTLE_ENDIAN = true;\nconst SHARK_PORT_SAVE = 'SharkPortSave';\nconst CODE_GBA = 0x000f0000;\nconst SECOND_HEADER_LENGTH = 0x1C;\nconst SECOND_HEADER_INTERNAL_NAME_LENGTH = 0x10;\n\nfunction getText(arrayBuffer, dataView, textDecoder, currentByte) {\n  // The format for text in the header is 4 bytes to give the length, then a string of that length\n\n  let newCurrentByte = currentByte;\n  const textLength = dataView.getUint32(newCurrentByte, LITTLE_ENDIAN);\n  newCurrentByte += 4;\n\n  const textArrayBuffer = arrayBuffer.slice(newCurrentByte, newCurrentByte + textLength);\n  newCurrentByte += textLength;\n\n  const textUint8Array = new Uint8Array(textArrayBuffer);\n  const text = textDecoder.decode(textUint8Array);\n\n  return {\n    text,\n    nextByte: newCurrentByte,\n  };\n}\n\nfunction copyUint8ArrayUpToMaxLength(copyFrom, maxLength) {\n  const copyTo = new Uint8Array(maxLength);\n\n  copyTo.fill(0);\n\n  for (let i = 0; i < Math.min(copyFrom.length, maxLength); i += 1) {\n    copyTo[i] = copyFrom[i];\n  }\n\n  return copyTo;\n}\n\nfunction parseSecondHeader(arrayBuffer, textDecoder) {\n  const dataView = new DataView(arrayBuffer);\n\n  const gameInternalNameBuffer = arrayBuffer.slice(0, SECOND_HEADER_INTERNAL_NAME_LENGTH);\n  const gameInternalNameArray = new Uint8Array(gameInternalNameBuffer);\n\n  return {\n    gameInternalName: textDecoder.decode(gameInternalNameArray),\n    romChecksum: dataView.getUint16(SECOND_HEADER_INTERNAL_NAME_LENGTH, LITTLE_ENDIAN),\n    romComplimentCheck: dataView.getUint8(SECOND_HEADER_INTERNAL_NAME_LENGTH + 2),\n    maker: dataView.getUint8(SECOND_HEADER_INTERNAL_NAME_LENGTH + 3),\n    flag: dataView.getUint8(SECOND_HEADER_INTERNAL_NAME_LENGTH + 4),\n  };\n}\n\nfunction createSecondHeaderFromRom(romArrayBuffer) {\n  const gbaRom = new GbaRom(romArrayBuffer);\n\n  const secondHeader = {\n    gameInternalName: gbaRom.getInternalName(),\n    romChecksum: gbaRom.getChecksum(),\n    romComplimentCheck: gbaRom.getComplimentCheck(),\n    maker: gbaRom.getMaker(),\n    flag: 1,\n  };\n\n  return secondHeader;\n}\n\nfunction createSecondHeaderArrayBuffer(secondHeader, textEncoder) {\n  const headerArrayBuffer = new ArrayBuffer(SECOND_HEADER_LENGTH);\n  const headerDataView = new DataView(headerArrayBuffer);\n  const headerUint8Array = new Uint8Array(headerArrayBuffer);\n\n  const encodedInternalName = textEncoder.encode(secondHeader.gameInternalName);\n  const encodedInternalNameMaxLength = copyUint8ArrayUpToMaxLength(encodedInternalName, SECOND_HEADER_INTERNAL_NAME_LENGTH);\n\n  headerUint8Array.set(encodedInternalNameMaxLength, 0);\n  headerDataView.setUint16(SECOND_HEADER_INTERNAL_NAME_LENGTH, secondHeader.romChecksum, LITTLE_ENDIAN);\n  headerDataView.setUint8(SECOND_HEADER_INTERNAL_NAME_LENGTH + 2, secondHeader.romComplimentCheck);\n  headerDataView.setUint8(SECOND_HEADER_INTERNAL_NAME_LENGTH + 3, secondHeader.maker);\n  headerDataView.setUint8(SECOND_HEADER_INTERNAL_NAME_LENGTH + 4, secondHeader.flag);\n\n  return headerArrayBuffer;\n}\n\nfunction calculateCrc(arrayBuffer) {\n  // Not a standard CRC algorithm as far as I know.\n  // Taken from https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/src/gba/GBA.cpp#L1180\n\n  const dataView = new DataView(arrayBuffer);\n\n  let crc = 0;\n\n  for (let i = 0; i < arrayBuffer.byteLength; i += 1) {\n    crc += ((dataView.getUint8(i) << (crc % 18)) >>> 0);\n    if (crc >= 2 ** 32) {\n      crc -= 2 ** 32;\n    }\n  }\n\n  return crc;\n}\n\nexport default class GameSharkSaveData {\n  static createFromGameSharkData(gameSharkArrayBuffer) {\n    return new GameSharkSaveData(gameSharkArrayBuffer);\n  }\n\n  static createWithNewSize(gameSharkSaveData, newSize) {\n    // Sometimes we may need to change the size of our raw buffer. This is because it's very difficult to determine\n    // what the save game size is for a particular game and so some emulators get this wrong and there are many files\n    // floating around the Internet that are the wrong size.\n    //\n    // So we can either truncate them (most likely), or pad them with zeros to make them the size\n    // that the game/emulator actually expects.\n    //\n    // More information:\n    // - https://zork.net/~st/jottings/GBA_saves.html\n    // - https://dillonbeliveau.com/2020/06/05/GBA-FLASH.html\n\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(gameSharkSaveData.getRawSaveData(), newSize);\n\n    return GameSharkSaveData.createFromEmulatorDataAndSecondHeader(\n      newRawSaveData,\n      gameSharkSaveData.getTitle(),\n      gameSharkSaveData.getDate(),\n      gameSharkSaveData.getNotes(),\n      gameSharkSaveData.getSecondHeader(),\n    );\n  }\n\n  static createFromEmulatorData(emulatorArrayBuffer, title, date, notes, romArrayBuffer) {\n    const secondHeader = createSecondHeaderFromRom(romArrayBuffer);\n\n    return GameSharkSaveData.createFromEmulatorDataAndSecondHeader(emulatorArrayBuffer, title, date, notes, secondHeader);\n  }\n\n  static createFromEmulatorDataAndSecondHeader(emulatorArrayBuffer, title, date, notes, secondHeader) {\n    // A bit inefficient to promptly go and re-parse the save data, but this\n    // has the nice benefit of verifying that we put everything in the correct endianness\n    // and got everything in the right spot. Yes I suppose that should be a test instead.\n\n    const textEncoder = new TextEncoder('US-ASCII'); // The name can contain 0x00 characters that we need to interpret correctly\n\n    // Create the first header\n\n    const firstHeaderLength = 4 + SHARK_PORT_SAVE.length + 4 + 4 + title.length + 4 + date.length + 4 + notes.length + 4;\n    const firstHeaderArrayBuffer = new ArrayBuffer(firstHeaderLength);\n    const firstHeaderUint8Array = new Uint8Array(firstHeaderArrayBuffer);\n    const firstHeaderDataView = new DataView(firstHeaderArrayBuffer);\n\n    let currentByte = 0;\n\n    firstHeaderDataView.setUint32(currentByte, SHARK_PORT_SAVE.length, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    firstHeaderUint8Array.set(textEncoder.encode(SHARK_PORT_SAVE), currentByte);\n    currentByte += SHARK_PORT_SAVE.length;\n\n    firstHeaderDataView.setUint32(currentByte, CODE_GBA, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    firstHeaderDataView.setUint32(currentByte, title.length, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    firstHeaderUint8Array.set(textEncoder.encode(title), currentByte);\n    currentByte += title.length;\n\n    firstHeaderDataView.setUint32(currentByte, date.length, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    firstHeaderUint8Array.set(textEncoder.encode(date), currentByte);\n    currentByte += date.length;\n\n    firstHeaderDataView.setUint32(currentByte, notes.length, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    firstHeaderUint8Array.set(textEncoder.encode(notes), currentByte);\n    currentByte += notes.length;\n\n    firstHeaderDataView.setUint32(currentByte, emulatorArrayBuffer.byteLength + SECOND_HEADER_LENGTH, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    // Create the second header, and concat it with the raw save then calculate the CRC of that\n\n    const secondHeaderAndRawSave = new ArrayBuffer(emulatorArrayBuffer.byteLength + SECOND_HEADER_LENGTH);\n    const secondHeaderAndRawSaveUint8Array = new Uint8Array(secondHeaderAndRawSave);\n\n    const secondHeaderArrayBuffer = createSecondHeaderArrayBuffer(secondHeader, textEncoder);\n\n    const secondHeaderUint8Array = new Uint8Array(secondHeaderArrayBuffer);\n    const emulatorUint8Array = new Uint8Array(emulatorArrayBuffer);\n\n    secondHeaderAndRawSaveUint8Array.set(secondHeaderUint8Array, 0);\n    secondHeaderAndRawSaveUint8Array.set(emulatorUint8Array, SECOND_HEADER_LENGTH);\n\n    const calculatedCrc = calculateCrc(secondHeaderAndRawSave);\n\n    // And now we concat everything together: first header + second header + raw save + crc\n\n    const crcArrayBuffer = new ArrayBuffer(4);\n    const crcDataView = new DataView(crcArrayBuffer);\n\n    crcDataView.setUint32(0, calculatedCrc, LITTLE_ENDIAN);\n\n    const gameSharkArrayBuffer = Util.concatArrayBuffers([firstHeaderArrayBuffer, secondHeaderArrayBuffer, emulatorArrayBuffer, crcArrayBuffer]);\n\n    return new GameSharkSaveData(gameSharkArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a GameShark save data file\n  constructor(arrayBuffer) {\n    this.arrayBuffer = arrayBuffer;\n    const dataView = new DataView(arrayBuffer);\n    const textDecoder = new TextDecoder('US-ASCII'); // The name can contain 0x00 characters that we need to interpret correctly\n\n    //\n    // First make sure that the stuff in the header all makes sense\n    //\n\n    let currentByte = 0;\n\n    // Read \"SharkPortSave\"\n\n    const sharkPortSaveInfo = getText(arrayBuffer, dataView, textDecoder, currentByte);\n\n    if (sharkPortSaveInfo.text !== SHARK_PORT_SAVE) {\n      throw new Error('This does not appear to be a GameShark save file');\n    }\n\n    currentByte = sharkPortSaveInfo.nextByte;\n\n    // Read the platform\n\n    const platformCode = dataView.getUint32(currentByte, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    if (platformCode !== CODE_GBA) {\n      throw new Error('This does not appear to be a GBA GameShark file');\n    }\n\n    try {\n      // Read the title\n\n      const titleInfo = getText(arrayBuffer, dataView, textDecoder, currentByte);\n\n      this.title = titleInfo.text;\n      currentByte = titleInfo.nextByte;\n\n      // Read the date\n\n      const dateInfo = getText(arrayBuffer, dataView, textDecoder, currentByte);\n\n      this.date = dateInfo.text;\n      currentByte = dateInfo.nextByte;\n\n      // Read the notes\n\n      const notesInfo = getText(arrayBuffer, dataView, textDecoder, currentByte);\n\n      this.notes = notesInfo.text;\n      currentByte = notesInfo.nextByte;\n\n      // Next grab the second header and raw save\n\n      const secondHeaderAndRawSaveLength = dataView.getUint32(currentByte, LITTLE_ENDIAN);\n      currentByte += 4;\n\n      const secondHeaderAndRawSave = arrayBuffer.slice(currentByte, currentByte + secondHeaderAndRawSaveLength);\n\n      const rawSaveLength = secondHeaderAndRawSaveLength - SECOND_HEADER_LENGTH;\n\n      const secondHeaderData = arrayBuffer.slice(currentByte, currentByte + SECOND_HEADER_LENGTH);\n      currentByte += SECOND_HEADER_LENGTH;\n\n      this.secondHeader = parseSecondHeader(secondHeaderData, textDecoder);\n\n      const rawSaveData = arrayBuffer.slice(currentByte, currentByte + rawSaveLength);\n      currentByte += 4;\n\n      // And lastly the CRC\n\n      this.crcFromFile = dataView.getUint32(currentByte, LITTLE_ENDIAN);\n      currentByte += 4;\n\n      this.calculatedCrc = calculateCrc(secondHeaderAndRawSave);\n\n      // Some files found on the Internet do not set the CRC (e.g. its 0x00000000 or oxFFFFFFFF) so there's\n      // no point in rejecting a file if the CRC doesn't match.\n\n      // Everything looks good\n\n      this.rawSaveData = rawSaveData;\n    } catch (e) {\n      // The header length is variable, so having bad values for the length of the various strings\n      // results in a file that isn't readable\n      throw new Error('This file appears to be corrupted');\n    }\n  }\n\n  getTitle() {\n    return this.title;\n  }\n\n  getDate() {\n    return this.date;\n  }\n\n  getNotes() {\n    return this.notes;\n  }\n\n  getSecondHeader() {\n    return this.secondHeader;\n  }\n\n  getCrc() {\n    return this.crc;\n  }\n\n  getCalculatedCrc() {\n    return this.calculatedCrc;\n  }\n\n  getRawSaveData() {\n    return this.rawSaveData;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GBA/GameSharkSP.js",
    "content": "/*\nThe GameShark SP data format header contains a header then the raw save.\nThe header is of fixed length. The full format doesn't appear to be known, so we can currently only do the conversion one way (extracting the raw save).\n\n- Bytes 0-7: \"ADVSAVEG\"\n- Bytes 8-11: Unknown\n- Bytes 12-23: Name of the ROM this file is for\n- Bytes 24-43: Unknown\n- Bytes 44-1067: Notes\n- Bytes 1068-1071: 0x12345678 (\"xV4\\x12\" as it's referred to in VBA below)\n- Bytes 1072-EOF: Raw save\n\n(see https://github.com/visualboyadvance-m/visualboyadvance-m/blob/master/src/gba/GBA.cpp#L1078)\n*/\n\nconst LITTLE_ENDIAN = true;\nconst HEADER_START_MARKER = 'ADVSAVEG';\nconst HEADER_START_MARKER_POS = 0;\nconst TITLE_START_POS = 12;\nconst TITLE_LENGTH = 12;\nconst NOTES_START_POS = 44;\nconst NOTES_LENGTH = 1023;\nconst HEADER_END_MARKER = 0x12345678;\nconst HEADER_END_MARKER_POS = 1068;\nconst HEADER_LENGTH = 1072;\n\nfunction getText(arrayBuffer, startPos, length, textDecoder) {\n  const textArrayBuffer = arrayBuffer.slice(startPos, startPos + length);\n  const textUint8Array = new Uint8Array(textArrayBuffer);\n\n  return textDecoder.decode(textUint8Array);\n}\n\nexport default class GameSharkSpSaveData {\n  static createFromGameSharkSpData(gameSharkSpArrayBuffer) {\n    return new GameSharkSpSaveData(gameSharkSpArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a GameShark SP save data file\n  constructor(arrayBuffer) {\n    this.arrayBuffer = arrayBuffer;\n    const dataView = new DataView(arrayBuffer);\n    const textDecoder = new TextDecoder('US-ASCII');\n\n    //\n    // First make sure that the stuff in the header all makes sense\n    //\n\n    // Read the header start marker\n\n    const startMarker = getText(arrayBuffer, HEADER_START_MARKER_POS, HEADER_START_MARKER.length, textDecoder);\n\n    if (startMarker !== HEADER_START_MARKER) {\n      throw new Error('This does not appear to be a GameShark SP file');\n    }\n\n    // Read the header end marker\n\n    const endMarker = dataView.getUint32(HEADER_END_MARKER_POS, LITTLE_ENDIAN);\n\n    if (endMarker !== HEADER_END_MARKER) {\n      throw new Error('This does not appear to be a GameShark SP file');\n    }\n\n    // Read the game title and notes\n    this.title = getText(arrayBuffer, TITLE_START_POS, TITLE_LENGTH, textDecoder);\n    this.notes = getText(arrayBuffer, NOTES_START_POS, NOTES_LENGTH, textDecoder);\n    this.rawSaveData = arrayBuffer.slice(HEADER_LENGTH);\n  }\n\n  getTitle() {\n    return this.title;\n  }\n\n  getNotes() {\n    return this.notes;\n  }\n\n  getRawSaveData() {\n    return this.rawSaveData;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/Components/Basics.js",
    "content": "export default class GameCubeBasics {\n  static LITTLE_ENDIAN = false;\n\n  static BLOCK_SIZE = 0x2000;\n\n  static NUM_RESERVED_BLOCKS = 5;\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/Components/BlockAllocationTable.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThe directory entry format is reused in a few different gamecube file type\n\nHere's the structure as assembled from reading\n- https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L350\n- https://www.gc-forever.com/yagcd/chap12.html#sec12.4\n\n0x0000-0x0001: Additive checksum\n0x0002-0x0003: Inverse checksum\n0x0004-0x0005: Update counter (signed (!))\n0x0006-0x0007: Number of free blocks\n0x0008-0x0009: Last allocated block\n0x000A-0x1FFF: Table of allocated blocks\n*/\n\nimport Util from '../../../util/util';\nimport ArrayUtil from '../../../util/Array';\n\nimport GameCubeUtil from '../Util';\n\nimport GameCubeBasics from './Basics';\n\nconst {\n  LITTLE_ENDIAN,\n  BLOCK_SIZE,\n  NUM_RESERVED_BLOCKS,\n} = GameCubeBasics;\n\nconst NUM_BLOCK_ALLOCATION_TABLE_ENTRIES = 0xFFB; // https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L107\nconst BLOCK_ALLOCATION_TABLE_ENTRY_SIZE = 2;\n\nconst DEFAULT_UPDATE_COUNTER = 0;\n\nconst CHECKSUM_OFFSET = 0x0000;\nconst CHECKSUM_INVERSE_OFFSET = 0x0002;\nconst UPDATE_COUNTER_OFFSET = 0x0004;\nconst NUM_FREE_BLOCKS_OFFSET = 0x0006;\nconst LAST_ALLOCATED_BLOCK_OFFSET = 0x0008;\nconst BLOCK_ALLOCATION_TABLE_OFFSET = 0x000A;\n\nconst CHECKSUMMED_DATA_BEGIN_OFFSET = UPDATE_COUNTER_OFFSET; // Checksummed data offset and size are taken from https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L634\nconst CHECKSUMMED_DATA_SIZE = BLOCK_SIZE - CHECKSUMMED_DATA_BEGIN_OFFSET;\n\nconst TABLE_ENTRY_BLOCK_IS_FREE = 0x0000;\nconst TABLE_ENTRY_LAST_BLOCK = 0xFFFF;\n\nexport default class GameCubeBlockAllocationTable {\n  static TABLE_ENTRY_BLOCK_IS_FREE = TABLE_ENTRY_BLOCK_IS_FREE;\n\n  static TABLE_ENTRY_LAST_BLOCK = TABLE_ENTRY_LAST_BLOCK;\n\n  static writeBlockAllocationTable(saveFiles, numTotalBlocks) {\n    const arrayBuffer = Util.getFilledArrayBuffer(BLOCK_SIZE, TABLE_ENTRY_BLOCK_IS_FREE);\n    const dataView = new DataView(arrayBuffer);\n\n    // Build individual block lists for each save\n\n    let numBlocksUsed = 0;\n\n    const nextBlockNumberLists = saveFiles.map((saveFile) => {\n      const nextBlockNumberList = saveFile.blockList.map((block, i) => NUM_RESERVED_BLOCKS + numBlocksUsed + i + 1);\n      numBlocksUsed += saveFile.blockList.length;\n\n      if (nextBlockNumberList.length > 0) {\n        nextBlockNumberList.pop();\n        nextBlockNumberList.push(TABLE_ENTRY_LAST_BLOCK);\n      }\n\n      return nextBlockNumberList;\n    });\n\n    // Make sure the total number of entries needed isn't too big\n\n    const blockAllocationTableSize = nextBlockNumberLists.reduce((accumulator, nextBlockNumberList) => accumulator + nextBlockNumberList.length, 0);\n\n    if (blockAllocationTableSize > NUM_BLOCK_ALLOCATION_TABLE_ENTRIES) {\n      throw new Error(`Cannot fit all save files in memory card image. Desired block allocation table size: ${blockAllocationTableSize} entries, but max is ${NUM_BLOCK_ALLOCATION_TABLE_ENTRIES}`);\n    }\n\n    // Write out all the lists into the single table\n\n    let currentOffset = BLOCK_ALLOCATION_TABLE_OFFSET;\n\n    nextBlockNumberLists.forEach((nextBlockNumberList) => {\n      nextBlockNumberList.forEach((nextBlockNumber) => {\n        dataView.setUint16(currentOffset, nextBlockNumber, LITTLE_ENDIAN);\n        currentOffset += BLOCK_ALLOCATION_TABLE_ENTRY_SIZE;\n      });\n    });\n\n    // Lastly, set our update counter and then finally checksums\n\n    dataView.setUint16(NUM_FREE_BLOCKS_OFFSET, numTotalBlocks - numBlocksUsed, LITTLE_ENDIAN);\n    dataView.setUint16(LAST_ALLOCATED_BLOCK_OFFSET, numBlocksUsed - 1 + NUM_RESERVED_BLOCKS, LITTLE_ENDIAN);\n\n    dataView.setInt16(UPDATE_COUNTER_OFFSET, DEFAULT_UPDATE_COUNTER, LITTLE_ENDIAN); // GameCube BIOS compares these as signed values: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L359\n\n    const { checksum, checksumInverse } = GameCubeUtil.calculateChecksums(arrayBuffer, CHECKSUMMED_DATA_BEGIN_OFFSET, CHECKSUMMED_DATA_SIZE);\n\n    dataView.setUint16(CHECKSUM_OFFSET, checksum, LITTLE_ENDIAN);\n    dataView.setUint16(CHECKSUM_INVERSE_OFFSET, checksumInverse, LITTLE_ENDIAN);\n\n    return arrayBuffer;\n  }\n\n  static readBlockAllocationTable(arrayBuffer) {\n    const dataView = new DataView(arrayBuffer);\n\n    const checksum = dataView.getUint16(CHECKSUM_OFFSET, LITTLE_ENDIAN);\n    const checksumInverse = dataView.getUint16(CHECKSUM_INVERSE_OFFSET, LITTLE_ENDIAN);\n    const updateCounter = dataView.getInt16(UPDATE_COUNTER_OFFSET, LITTLE_ENDIAN); // GameCube BIOS compares these as signed values: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L359\n    const numFreeBlocks = dataView.getUint16(NUM_FREE_BLOCKS_OFFSET, LITTLE_ENDIAN);\n    const lastAllocatedBlock = dataView.getUint16(LAST_ALLOCATED_BLOCK_OFFSET, LITTLE_ENDIAN);\n\n    const blockAllocationTable = ArrayUtil.createSequentialArray(0, NUM_BLOCK_ALLOCATION_TABLE_ENTRIES).map((i) => (\n      dataView.getUint16(BLOCK_ALLOCATION_TABLE_OFFSET + (i * BLOCK_ALLOCATION_TABLE_ENTRY_SIZE), LITTLE_ENDIAN)\n    ));\n\n    const calculatedChecksums = GameCubeUtil.calculateChecksums(arrayBuffer, CHECKSUMMED_DATA_BEGIN_OFFSET, CHECKSUMMED_DATA_SIZE);\n\n    if ((checksum !== calculatedChecksums.checksum) || (checksumInverse !== calculatedChecksums.checksumInverse)) {\n      // The block is corrupted\n      return null;\n    }\n\n    return {\n      updateCounter,\n      numFreeBlocks,\n      lastAllocatedBlock,\n      blockAllocationTable,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/Components/Directory.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThe directory entry format is reused in a few different gamecube file type\n\nHere's the structure as assembled from reading\n- https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L316\n- https://www.gc-forever.com/yagcd/chap12.html#sec12.3\n\nNote that an invalid or empty directory entry is all 0xFF. So dolphin checks for the first 4 bytes of it (the game code):\nhttps://github.com/dolphin-emu/dolphin/blob/c9bdda63dc624995406c37f4e29e3b8c4696e6d0/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L788\n\n0x0000-0x1FBF: Directory entries (max 127)\n0x1FC0-0x1FF9: padding (0xFF)\n0x1FFA-0x1FFB: Update counter (signed (!))\n0x1FFC-0x1FFD: Additive checksum\n0x1FFE-0x1FFF: Inverse checksum\n*/\n\nimport Util from '../../../util/util';\nimport ArrayUtil from '../../../util/Array';\n\nimport GameCubeUtil from '../Util';\n\nimport GameCubeBasics from './Basics';\nimport GameCubeDirectoryEntry from './DirectoryEntry';\n\nconst {\n  LITTLE_ENDIAN,\n  BLOCK_SIZE,\n} = GameCubeBasics;\n\nconst DIRECTORY_PADDING_VALUE = 0xFF;\n\nconst MAX_DIRECTORY_ENTRIES = 127;\nconst DIRECTORY_ENTRY_LENGTH = GameCubeDirectoryEntry.LENGTH;\n\nconst DEFAULT_UPDATE_COUNTER = 0;\n\nconst UPDATE_COUNTER_OFFSET = 0x1FFA;\nconst CHECKSUM_OFFSET = 0x1FFC;\nconst CHECKSUM_INVERSE_OFFSET = 0x1FFE;\nconst CHECKSUMMED_DATA_BEGIN_OFFSET = 0; // Checksummed data offset and size are taken from https://github.com/dolphin-emu/dolphin/blob/4f210df86a2d2362ef8087cf81b817b18c3d32e9/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L1348\nconst CHECKSUMMED_DATA_SIZE = CHECKSUM_OFFSET - CHECKSUMMED_DATA_BEGIN_OFFSET;\n\nexport default class GameCubeDirectory {\n  static writeDirectory(saveFiles) {\n    if (saveFiles.length > MAX_DIRECTORY_ENTRIES) {\n      throw new Error(`Unable to fit ${saveFiles.length} saves into a single memory card image. Max is ${MAX_DIRECTORY_ENTRIES}`);\n    }\n\n    let arrayBuffer = Util.getFilledArrayBuffer(BLOCK_SIZE, DIRECTORY_PADDING_VALUE);\n\n    saveFiles.forEach((saveFile, i) => {\n      const directoryEntry = GameCubeDirectoryEntry.writeDirectoryEntry(saveFile);\n\n      arrayBuffer = Util.setArrayBufferPortion(arrayBuffer, directoryEntry, i * GameCubeDirectoryEntry.LENGTH, 0, GameCubeDirectoryEntry.LENGTH);\n    });\n\n    // Lastly, set our update counter and then finally checksums\n\n    const dataView = new DataView(arrayBuffer);\n\n    dataView.setInt16(UPDATE_COUNTER_OFFSET, DEFAULT_UPDATE_COUNTER, LITTLE_ENDIAN); // GameCube BIOS compares these as signed values: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L325\n\n    const { checksum, checksumInverse } = GameCubeUtil.calculateChecksums(arrayBuffer, CHECKSUMMED_DATA_BEGIN_OFFSET, CHECKSUMMED_DATA_SIZE);\n\n    dataView.setUint16(CHECKSUM_OFFSET, checksum, LITTLE_ENDIAN);\n    dataView.setUint16(CHECKSUM_INVERSE_OFFSET, checksumInverse, LITTLE_ENDIAN);\n\n    return arrayBuffer;\n  }\n\n  static readDirectory(arrayBuffer) {\n    const dataView = new DataView(arrayBuffer);\n\n    const updateCounter = dataView.getInt16(UPDATE_COUNTER_OFFSET, LITTLE_ENDIAN); // GameCube BIOS compares these as signed values: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L325\n    const checksum = dataView.getUint16(CHECKSUM_OFFSET, LITTLE_ENDIAN);\n    const checksumInverse = dataView.getUint16(CHECKSUM_INVERSE_OFFSET, LITTLE_ENDIAN);\n\n    const directoryEntries = ArrayUtil.createSequentialArray(0, MAX_DIRECTORY_ENTRIES).map((i) => {\n      const directoryEntryArrayBuffer = arrayBuffer.slice(i * DIRECTORY_ENTRY_LENGTH, (i + 1) * DIRECTORY_ENTRY_LENGTH);\n\n      return GameCubeDirectoryEntry.readDirectoryEntry(directoryEntryArrayBuffer);\n    }).filter((directoryEntry) => directoryEntry !== null);\n\n    const calculatedChecksums = GameCubeUtil.calculateChecksums(arrayBuffer, CHECKSUMMED_DATA_BEGIN_OFFSET, CHECKSUMMED_DATA_SIZE);\n\n    if ((checksum !== calculatedChecksums.checksum) || (checksumInverse !== calculatedChecksums.checksumInverse)) {\n      // The block is corrupted\n      return null;\n    }\n\n    return {\n      directoryEntries,\n      updateCounter,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/Components/DirectoryEntry.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThe directory entry format is reused in a few different gamecube file type\n\nHere's the structure as assembled from reading\n- https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L239\n- https://www.gc-forever.com/yagcd/chap12.html#sec12.3.1\n- http://www.surugi.com/projects/gcifaq.html\n- https://github.com/suloku/gcmm/blob/master/source/gci.h#L12\n\n0x00-0x03: Game code (last character is the region code)\n0x04-0x05: Publisher ID\n0x06:      unused (0xFF)\n0x07:      Banner and icon flags: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L254\n0x08-0x27: File ID\n0x28-0x2B: Date last modified\n0x2C-0x2F: Icon graphic data offset\n0x30-0x31: Icon graphic format: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L273\n0x32-0x33: Icon graphic speed: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L281\n0x34:      Permission attribute bitfield (public/no copy/no move)\n0x35:      Copy counter\n0x36-0x37: Starting block number\n0x38-0x39: Save size in blocks\n0x3A-0x3B: unused (0xFFFF)\n0x3C-0x3F: Comment offset\n*/\n\nimport GameCubeUtil from '../Util';\nimport Util from '../../../util/util';\n\nimport GameCubeBasics from './Basics';\n\nconst { LITTLE_ENDIAN } = GameCubeBasics;\n\nconst ENCODING = 'US-ASCII'; // From tests in Gci.spec.js with various Japanese-only games, I believe all the fields in this object are encoded as ASCII. Only the comments appear to be encoded as shift-jis in Japanese games\n\nconst GAME_CODE_OFFSET = 0x00;\nconst GAME_CODE_LENGTH = 4;\nconst REGION_CODE_OFFSET = 0x03;\nconst REGION_CODE_LENGTH = 1;\nconst PUBLISHER_CODE_OFFSET = 0x04;\nconst PUBLISHER_CODE_LENGTH = 2;\nconst BANNER_AND_ICON_FLAGS_OFFSET = 0x07;\nconst FILE_NAME_OFFSET = 0x08;\nconst FILE_NAME_LENGTH = 32;\nconst DATE_LAST_MODIFIED_OFFSET = 0x28;\n\nconst ICON_START_OFFSET = 0x2C;\nconst ICON_FORMAT_OFFSET = 0x30;\nconst ICON_SPEED_OFFSET = 0x32;\n\nconst PERMISSION_ATTRIBUTE_BITFIELD_OFFSET = 0x34;\nconst COPY_COUNTER_OFFSET = 0x35;\nconst SAVE_START_BLOCK_OFFSET = 0x36;\nconst SAVE_SIZE_BLOCKS_OFFSET = 0x38;\n\nconst COMMENT_START_OFFSET = 0x3C;\nconst COMMENT_LENGTH = 32;\n\nconst DIRECTORY_ENTRY_LENGTH = 0x40;\nconst DIRECTORY_ENTRY_PADDING_VALUE = 0xFF;\nconst DIRECTORY_ENTRY_FILE_NAME_FILL_VALUE = 0x00; // The filename should be filled with null characters so we don't read past the end of our string\n\nexport default class GameCubeDirectoryEntry {\n  static ICON_SPEED_NONE = 0x00;\n\n  static ICON_SPEED_FAST = 0x01;\n\n  static ICON_SPEED_MIDDLE = 0x02;\n\n  static ICON_SPEED_SLOW = 0x03;\n\n  static PERMISSION_ATTRIBUTE_PUBLIC = 0x04;\n\n  static PERMISSION_ATTRIBUTE_NO_COPY = 0x08;\n\n  static PERMISSION_ATTRIBUTE_NO_MOVE = 0x10;\n\n  static LENGTH = DIRECTORY_ENTRY_LENGTH;\n\n  static writeDirectoryEntry(saveFile) {\n    let arrayBuffer = Util.getFilledArrayBuffer(DIRECTORY_ENTRY_LENGTH, DIRECTORY_ENTRY_PADDING_VALUE);\n\n    arrayBuffer = Util.fillArrayBufferPortion(arrayBuffer, FILE_NAME_OFFSET, FILE_NAME_LENGTH, DIRECTORY_ENTRY_FILE_NAME_FILL_VALUE);\n\n    arrayBuffer = Util.setString(arrayBuffer, GAME_CODE_OFFSET, saveFile.gameCode, ENCODING, GAME_CODE_LENGTH);\n    arrayBuffer = Util.setString(arrayBuffer, PUBLISHER_CODE_OFFSET, saveFile.publisherCode, ENCODING, PUBLISHER_CODE_LENGTH);\n    arrayBuffer = Util.setString(arrayBuffer, FILE_NAME_OFFSET, saveFile.fileName, ENCODING, FILE_NAME_LENGTH);\n\n    const dataView = new DataView(arrayBuffer);\n\n    dataView.setUint8(BANNER_AND_ICON_FLAGS_OFFSET, saveFile.bannerAndIconFlags);\n    dataView.setUint32(DATE_LAST_MODIFIED_OFFSET, saveFile.dateLastModifiedCode, LITTLE_ENDIAN);\n\n    dataView.setUint32(ICON_START_OFFSET, saveFile.iconStartOffset, LITTLE_ENDIAN);\n    dataView.setUint16(ICON_FORMAT_OFFSET, saveFile.iconFormatCode, LITTLE_ENDIAN);\n    dataView.setUint16(ICON_SPEED_OFFSET, saveFile.iconSpeedCode, LITTLE_ENDIAN);\n\n    dataView.setUint8(PERMISSION_ATTRIBUTE_BITFIELD_OFFSET, saveFile.permissionAttributeBitfield);\n    dataView.setUint8(COPY_COUNTER_OFFSET, saveFile.copyCounter);\n    dataView.setUint16(SAVE_START_BLOCK_OFFSET, saveFile.saveStartBlock, LITTLE_ENDIAN);\n    dataView.setUint16(SAVE_SIZE_BLOCKS_OFFSET, saveFile.saveSizeBlocks, LITTLE_ENDIAN);\n    dataView.setUint32(COMMENT_START_OFFSET, saveFile.commentStart, LITTLE_ENDIAN);\n\n    return arrayBuffer;\n  }\n\n  static getComments(commentStart, rawDataArrayBuffer, encoding) {\n    const uint8Array = new Uint8Array(rawDataArrayBuffer);\n\n    const commentOffsets = [\n      commentStart,\n      commentStart + COMMENT_LENGTH,\n    ];\n\n    return commentOffsets.map((commentOffset) => Util.readNullTerminatedString(uint8Array, commentOffset, encoding, COMMENT_LENGTH));\n  }\n\n  static readDirectoryEntry(arrayBuffer) {\n    const uint8Array = new Uint8Array(arrayBuffer);\n    const dataView = new DataView(arrayBuffer);\n\n    // An empty entry appears to be all 0xFF. Dolphin just checks the game code, so we will too\n    // https://github.com/dolphin-emu/dolphin/blob/c9bdda63dc624995406c37f4e29e3b8c4696e6d0/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L788\n    // https://github.com/dolphin-emu/dolphin/blob/c9bdda63dc624995406c37f4e29e3b8c4696e6d0/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L243\n    const isValidEntry = uint8Array\n      .slice(GAME_CODE_OFFSET, GAME_CODE_OFFSET + GAME_CODE_LENGTH)\n      .some((i) => i !== 0xFF);\n\n    if (!isValidEntry) {\n      return null;\n    }\n\n    const gameCode = Util.readString(uint8Array, GAME_CODE_OFFSET, ENCODING, GAME_CODE_LENGTH);\n    const regionCode = Util.readString(uint8Array, REGION_CODE_OFFSET, ENCODING, REGION_CODE_LENGTH);\n    const publisherCode = Util.readString(uint8Array, PUBLISHER_CODE_OFFSET, ENCODING, PUBLISHER_CODE_LENGTH);\n    const bannerAndIconFlags = dataView.getUint8(BANNER_AND_ICON_FLAGS_OFFSET);\n    const fileName = Util.readNullTerminatedString(uint8Array, FILE_NAME_OFFSET, ENCODING, FILE_NAME_LENGTH);\n    const dateLastModifiedCode = dataView.getUint32(DATE_LAST_MODIFIED_OFFSET, LITTLE_ENDIAN);\n\n    const iconStartOffset = dataView.getUint32(ICON_START_OFFSET, LITTLE_ENDIAN);\n    const iconFormatCode = dataView.getUint16(ICON_FORMAT_OFFSET, LITTLE_ENDIAN);\n    const iconSpeedCode = dataView.getUint16(ICON_SPEED_OFFSET, LITTLE_ENDIAN);\n\n    const permissionAttributeBitfield = dataView.getUint8(PERMISSION_ATTRIBUTE_BITFIELD_OFFSET);\n    const copyCounter = dataView.getUint8(COPY_COUNTER_OFFSET);\n    const saveStartBlock = dataView.getUint16(SAVE_START_BLOCK_OFFSET, LITTLE_ENDIAN);\n    const saveSizeBlocks = dataView.getUint16(SAVE_SIZE_BLOCKS_OFFSET, LITTLE_ENDIAN);\n    const commentStart = dataView.getUint32(COMMENT_START_OFFSET, LITTLE_ENDIAN);\n\n    return {\n      gameCode,\n      regionCode,\n      region: GameCubeUtil.getRegionString(regionCode),\n      publisherCode,\n      bannerAndIconFlags,\n      fileName,\n      dateLastModifiedCode,\n      dateLastModified: GameCubeUtil.getDate(dateLastModifiedCode),\n      iconStartOffset,\n      iconFormatCode,\n      iconSpeedCode,\n      permissionAttributeBitfield,\n      copyCounter,\n      saveStartBlock,\n      saveSizeBlocks,\n      commentStart,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/Components/Header.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nHeader: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L160\n\nFirst a quick note that every individual original memory card has a unique 12-byte \"flash ID\". It's written to the GameCube's SRAM when the card is mounted.\nWhen writing an image to an official memcard if the flash ID doesn't match the card's then the card will be corrupted: https://github.com/suloku/gcmm/blob/95c737c2af0ebecfa2ef02a8c6c30496d0036e87/source/main.c#L41\nThe serial number (see below) and flash ID is ignored in emulators and the memcard pro. Memcard images from these sources typically have a serial and/or flash ID that's all 0x00\nExample flash IDs can be found in the tests for this module.\n\n0x0000-0x000B: Serial number. This is the memory card's flash ID mangled with the format time (see getSerial() below)\n0x000C-0x0013: Time of format of the card (64 bit value, as an OSTime: see GameCubeUtil.getDateFromOsTime())\n0x0014-0x0017: RTC bias (value added to RTC) read from SRAM at time of format. See https://gitlab.collabora.com/sebastianfricke/linux/-/blob/7a24a61a5051a1454f42b370da76691cb59d9385/drivers/rtc/rtc-gamecube.c\n0x0018-0x001B: Language code read from SRAM. Values: https://www.gc-forever.com/yagcd/chap10.html#sec10.5\n0x001C-0x001F: VI DTV status register value. Contains information about progressive scan and/or whether component cables plugged in etc: https://www.gc-forever.com/yagcd/chap5.html#sec5\n0x0020-0x0021: Slot number (0: Slot A, 1: Slot B)\n0x0022-0x0023: Size of memcard in megabits\n0x0024-0x0025: Encoding (0: ASCII, 1: shift-jis)\n0x0026-0x01FB: padding (0xFF)\n0x01FC-0x01FD: Additive checksum\n0x01FE-0x01FF: Inverse checksum\n0x0200-0x3DFF: padding (0xFF)\n\nSome sources put a potential update counter at 0x01FA-0x01FB, but even they say it's always 0xFFFF and so likely part of the padding.\nGiven that the actual update counters in the directory and block allocation table blocks are in different positions, in different orders\nwith respect to the checksums, I don't think it makes sense to assume that there is one in this block.\nParticularly when there's no need for it because there is only a single header and not a backup\n*/\n\nimport Util from '../../../util/util';\n\nimport GameCubeUtil from '../Util';\nimport GameCubeBasics from './Basics';\n\nconst {\n  BLOCK_SIZE,\n  LITTLE_ENDIAN,\n} = GameCubeBasics;\n\nconst HEADER_PADDING_VALUE = 0xFF;\n\nconst SERIAL_OFFSET = 0x0000;\nconst SERIAL_LENGTH = 12;\nconst FORMAT_OSTIME_OFFSET = 0x000C;\nconst RTC_BIAS_OFFSET = 0x0014;\nconst LANGUAGE_CODE_OFFSET = 0x0018;\nconst VI_DTV_STATUS_OFFSET = 0x001C;\nconst MEMCARD_SLOT_OFFSET = 0x0020;\nconst MEMCARD_SLOT_A = 0;\nconst MEMCARD_SLOT_B = 1;\nconst MEMCARD_SIZE_OFFSET = 0x0022;\nconst ENCODING_OFFSET = 0x0024;\nconst CHECKSUM_OFFSET = 0x01FC;\nconst CHECKSUM_INVERSE_OFFSET = 0x01FE;\nconst CHECKSUMMED_DATA_BEGIN_OFFSET = 0; // Checksummed data offset and size are taken from https://github.com/dolphin-emu/dolphin/blob/4f210df86a2d2362ef8087cf81b817b18c3d32e9/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L1284\nconst CHECKSUMMED_DATA_SIZE = CHECKSUM_OFFSET - CHECKSUMMED_DATA_BEGIN_OFFSET;\n\nconst DEFAULT_FLASH_ID = Util.getFilledArrayBuffer(SERIAL_LENGTH, 0x00);\n\n// Taken from https://github.com/dolphin-emu/dolphin/blob/4f210df86a2d2362ef8087cf81b817b18c3d32e9/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L1210\nfunction getSerial(cardFlashId, formatTime) {\n  const serialArrayBuffer = new ArrayBuffer(SERIAL_LENGTH);\n  const serialUint8Array = new Uint8Array(serialArrayBuffer);\n  const cardFlashIdUint8Array = new Uint8Array(cardFlashId);\n\n  let rand = formatTime;\n\n  for (let i = 0; i < SERIAL_LENGTH; i += 1) {\n    rand = (((rand * 0x0000000041c64e6dn) + 0x0000000000003039n) >> 16n);\n    serialUint8Array[i] = (cardFlashIdUint8Array[i] + Number(rand & 0xFFFFFFFFn)) & 0xFF;\n    rand = (((rand * 0x0000000041c64e6dn) + 0x0000000000003039n) >> 16n);\n    rand &= 0x0000000000007fffn;\n  }\n\n  return serialArrayBuffer;\n}\n\n// Taken from https://github.com/dolphin-emu/dolphin/blob/4f210df86a2d2362ef8087cf81b817b18c3d32e9/Source/Core/Core/HW/Sram.cpp#L50\nfunction getCardFlashId(serialArrayBuffer, formatTime) {\n  const cardFlashIdArrayBuffer = new ArrayBuffer(SERIAL_LENGTH);\n  const cardFlashIdUint8Array = new Uint8Array(cardFlashIdArrayBuffer);\n  const serialUint8Array = new Uint8Array(serialArrayBuffer);\n\n  let rand = formatTime;\n\n  for (let i = 0; i < SERIAL_LENGTH; i += 1) {\n    rand = (((rand * 0x0000000041c64e6dn) + 0x0000000000003039n) >> 16n);\n    cardFlashIdUint8Array[i] = serialUint8Array[i] - Number(rand & 0xFFn);\n    rand = (((rand * 0x0000000041c64e6dn) + 0x0000000000003039n) >> 16n);\n    rand &= 0x0000000000007fffn;\n  }\n\n  return cardFlashIdArrayBuffer;\n}\n\nexport default class GameCubeHeader {\n  static MEMCARD_SLOT_A = MEMCARD_SLOT_A;\n\n  static MEMCARD_SLOT_B = MEMCARD_SLOT_B;\n\n  static writeHeader(volumeInfo) {\n    let cardFlashId = DEFAULT_FLASH_ID;\n\n    if (volumeInfo.cardFlashId !== undefined) {\n      // For the Memcard Pro GC it requires that flash ID be all 0's otherwise it will read the image as invalid.\n      // So keep it at this default value unless it's specified\n      cardFlashId = volumeInfo.cardFlashId;\n    }\n\n    const serialArrayBuffer = getSerial(cardFlashId, volumeInfo.formatOsTimeCode);\n    let headerArrayBuffer = Util.getFilledArrayBuffer(BLOCK_SIZE, HEADER_PADDING_VALUE);\n    headerArrayBuffer = Util.setArrayBufferPortion(headerArrayBuffer, serialArrayBuffer, SERIAL_OFFSET, 0, SERIAL_LENGTH);\n\n    const headerDataView = new DataView(headerArrayBuffer);\n\n    headerDataView.setBigUint64(FORMAT_OSTIME_OFFSET, volumeInfo.formatOsTimeCode, LITTLE_ENDIAN);\n    headerDataView.setUint32(RTC_BIAS_OFFSET, volumeInfo.rtcBias, LITTLE_ENDIAN);\n    headerDataView.setUint32(LANGUAGE_CODE_OFFSET, volumeInfo.languageCode, LITTLE_ENDIAN);\n    headerDataView.setUint32(VI_DTV_STATUS_OFFSET, volumeInfo.viDtvStatus, LITTLE_ENDIAN);\n    headerDataView.setUint16(MEMCARD_SLOT_OFFSET, volumeInfo.memcardSlot, LITTLE_ENDIAN);\n    headerDataView.setUint16(MEMCARD_SIZE_OFFSET, volumeInfo.memcardSizeMegabits, LITTLE_ENDIAN);\n    headerDataView.setUint16(ENCODING_OFFSET, volumeInfo.encodingCode, LITTLE_ENDIAN);\n\n    const { checksum, checksumInverse } = GameCubeUtil.calculateChecksums(headerArrayBuffer, CHECKSUMMED_DATA_BEGIN_OFFSET, CHECKSUMMED_DATA_SIZE);\n\n    headerDataView.setUint16(CHECKSUM_OFFSET, checksum, LITTLE_ENDIAN);\n    headerDataView.setUint16(CHECKSUM_INVERSE_OFFSET, checksumInverse, LITTLE_ENDIAN);\n\n    return headerArrayBuffer;\n  }\n\n  static readHeader(headerBlock) {\n    const dataView = new DataView(headerBlock);\n\n    const serial = headerBlock.slice(SERIAL_OFFSET, SERIAL_OFFSET + SERIAL_LENGTH);\n    const formatOsTimeCode = dataView.getBigUint64(FORMAT_OSTIME_OFFSET, LITTLE_ENDIAN);\n    const rtcBias = dataView.getUint32(RTC_BIAS_OFFSET, LITTLE_ENDIAN);\n    const languageCode = dataView.getUint32(LANGUAGE_CODE_OFFSET, LITTLE_ENDIAN);\n    const viDtvStatus = dataView.getUint32(VI_DTV_STATUS_OFFSET, LITTLE_ENDIAN);\n    const memcardSlot = dataView.getUint16(MEMCARD_SLOT_OFFSET, LITTLE_ENDIAN);\n    const memcardSizeMegabits = dataView.getUint16(MEMCARD_SIZE_OFFSET, LITTLE_ENDIAN);\n    const encodingCode = dataView.getUint16(ENCODING_OFFSET, LITTLE_ENDIAN);\n    const checksum = dataView.getUint16(CHECKSUM_OFFSET, LITTLE_ENDIAN);\n    const checksumInverse = dataView.getUint16(CHECKSUM_INVERSE_OFFSET, LITTLE_ENDIAN);\n\n    const cardFlashId = getCardFlashId(serial, formatOsTimeCode);\n\n    const calculatedChecksums = GameCubeUtil.calculateChecksums(headerBlock, CHECKSUMMED_DATA_BEGIN_OFFSET, CHECKSUMMED_DATA_SIZE);\n\n    if (checksum !== calculatedChecksums.checksum) {\n      throw new Error(`File may be corrupt. Read checksum 0x${checksum.toString(16)} but calculated checksum 0x${calculatedChecksums.checksum.toString(16)}`);\n    }\n\n    if (checksumInverse !== calculatedChecksums.checksumInverse) {\n      throw new Error(`File may be corrupt. Read checksum inverse 0x${checksumInverse.toString(16)} but calculated checksum inverse 0x${calculatedChecksums.checksumInverse.toString(16)}`);\n    }\n\n    return {\n      serial,\n      cardFlashId,\n      formatOsTimeCode,\n      formatTime: GameCubeUtil.getDateFromOsTime(formatOsTimeCode),\n      rtcBias,\n      languageCode,\n      language: GameCubeUtil.getLanguageString(languageCode),\n      viDtvStatus,\n      memcardSlot,\n      memcardSizeMegabits,\n      encodingCode,\n      encodingString: GameCubeUtil.getEncodingString(encodingCode),\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/GameCube.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThe format for a memory card image\n\nThe format is somewhat described here: https://www.gc-forever.com/yagcd/chap12.html#sec12 but with errors and omissions\n\nOverall the format is fairly similar to the N64 mempack format, with the first 5 blocks being reserved and there being 2 pairs of blocks with identical information in them\n\nBlock 0: Header\nBlock 1: Directory\nBlock 2: Directory backup (repeat of block 1)\nBlock 3: Block allocation table\nBlock 4: Block allocation table backup (repeat of block 3)\n*/\n\nimport Util from '../../util/util';\nimport PlatformSaveSizes from '../PlatformSaveSizes';\n\nimport GameCubeUtil from './Util';\n\nimport GameCubeBasics from './Components/Basics';\nimport GameCubeHeader from './Components/Header';\nimport GameCubeDirectory from './Components/Directory';\nimport GameCubeDirectoryEntry from './Components/DirectoryEntry';\nimport GameCubeBlockAllocationTable from './Components/BlockAllocationTable';\nimport GameSpecificFixups from './GameSpecificFixups/GameSpecificFixups';\n\nconst { BLOCK_SIZE, NUM_RESERVED_BLOCKS } = GameCubeBasics;\n\nconst HEADER_BLOCK_NUMBER = 0;\nconst DIRECTORY_BLOCK_NUMBER = 1;\nconst DIRECTORY_BACKUP_BLOCK_NUMBER = 2;\nconst BLOCK_ALLOCATION_TABLE_BLOCK_NUMBER = 3;\nconst BLOCK_ALLOCATION_TABLE_BACKUP_BLOCK_NUMBER = 4;\n\nconst BLOCK_PADDING_VALUE = 0x00;\n\nfunction getBlock(arrayBuffer, blockNumber) {\n  const startOffset = blockNumber * BLOCK_SIZE;\n  return arrayBuffer.slice(startOffset, startOffset + BLOCK_SIZE);\n}\n\nfunction createBlocks(numBlocks) {\n  return Util.getFilledArrayBuffer(BLOCK_SIZE * numBlocks, BLOCK_PADDING_VALUE);\n}\n\nfunction getActiveBlock(mainInfo, backupInfo) {\n  // If the update counter is equal on the two blocks we're supposed to pick the first one:\n  // https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L156\n  // Dolphin sometimes picks one or the other:\n  // https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcardDirectory.cpp#L468\n  // https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcardDirectory.cpp#L590\n\n  // The updateCounter is compared as a 16-bit signed value by the GameCube BIOS, with no protection against overflow: https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L252\n  // That's only 32767 updates. My childhood memory card that I didn't use very much is 1% of the way there at 333.\n\n  // There are some interesting rules about when the GameCube BIOS considers the whole card to be corrupted:\n  // https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L152\n\n  // I think it makes sense to be a bit more lenient here, and so allow this tool to potentially \"fix\" a corrupted card.\n  // So let's ignore the rule about 2 corrupted blocks -> whole card considered corrupted.\n\n  // As for the rule about a mismatch in block counts from the directory entry vs the block allocation table, let's ignore that one as well\n  // until we get feedback that fixing the error would be helpful to users. In general, we tend to parse and re-create a memory card image\n  // when returning it to users and so whatever we output will be free of inconsistencies like this. I guess if there's an inconsistency\n  // there it's hard to know whether to prefer the directory entry or the block allocation table (i.e. assume directory entry is correct and so\n  // use the other block allocation table, which is what we will do by default). Might need somewhat complex logic there,\n  // and I'd like to get feedback that it would be helpful before adding this complexity.\n\n  // It's worth noting in all this that Dolphin has considered but never implemented \"fixing\" corrupted images.\n  // I suspect there is not much demand for this.\n\n  if ((mainInfo !== null) && (backupInfo !== null)) {\n    // If both blocks were not corrupted, then return the one with the higher updateCounter\n    // (while preferring the first one if the updateCounter is equal)\n\n    if (backupInfo.updateCounter > mainInfo.updateCounter) {\n      return backupInfo;\n    }\n\n    return mainInfo;\n  }\n\n  // If one block is corrupted, then return the other one\n\n  if (backupInfo !== null) {\n    return backupInfo;\n  }\n\n  if (mainInfo !== null) {\n    return mainInfo;\n  }\n\n  // If both are corrupted then the card is considered corrupted\n\n  throw new Error('This memory card image appears to be corrupted');\n}\n\nfunction getBlockNumberList(saveStartBlock, blockAllocationTable) {\n  let nextBlockNum = saveStartBlock;\n\n  const blockNumberList = [];\n\n  do {\n    const currentBlockNum = nextBlockNum;\n    const currentBlockTableEntry = blockAllocationTable[currentBlockNum - NUM_RESERVED_BLOCKS];\n\n    if (currentBlockTableEntry === GameCubeBlockAllocationTable.TABLE_ENTRY_BLOCK_IS_FREE) {\n      throw new Error('File appears to be corrupted: block list for file contains entry marked as free');\n    }\n\n    blockNumberList.push(currentBlockNum);\n\n    nextBlockNum = currentBlockTableEntry;\n  } while (nextBlockNum !== GameCubeBlockAllocationTable.TABLE_ENTRY_LAST_BLOCK);\n\n  return blockNumberList;\n}\n\nfunction getSaveData(saveStartBlock, blockAllocationTable, arrayBuffer) {\n  const blockNumberList = getBlockNumberList(saveStartBlock, blockAllocationTable);\n\n  const blockList = blockNumberList.map((blockNumber) => getBlock(arrayBuffer, blockNumber));\n\n  return {\n    blockNumberList,\n    rawData: Util.concatArrayBuffers(blockList),\n  };\n}\n\nfunction readSaveFiles(directoryEntries, blockAllocationTable, arrayBuffer, encoding) {\n  return directoryEntries.map((directoryEntry) => {\n    const saveData = getSaveData(directoryEntry.saveStartBlock, blockAllocationTable, arrayBuffer);\n\n    const comments = GameCubeDirectoryEntry.getComments(directoryEntry.commentStart, saveData.rawData, encoding);\n\n    return {\n      ...directoryEntry,\n      comments,\n      ...saveData,\n    };\n  });\n}\n\nfunction checkDesiredSize(sizeBytes) {\n  if (!PlatformSaveSizes.gamecube.includes(sizeBytes)) {\n    throw new Error(`${sizeBytes} bytes (${GameCubeUtil.bytesToMegabits(sizeBytes)} megabits) is not a valid size for a gamecube memory card image`);\n  }\n}\n\nexport default class GameCubeSaveData {\n  static createWithNewSize(gameCubeSaveData, newSize) {\n    checkDesiredSize(newSize);\n\n    const volumeInfo = {\n      ...gameCubeSaveData.getVolumeInfo(),\n      memcardSizeMegabits: GameCubeUtil.bytesToMegabits(newSize),\n    };\n\n    return GameCubeSaveData.createFromSaveFiles(gameCubeSaveData.getSaveFiles(), volumeInfo);\n  }\n\n  static createWithNewEncoding(gameCubeSaveData, newEncoding) {\n    const volumeInfo = {\n      ...gameCubeSaveData.getVolumeInfo(),\n      encodingCode: GameCubeUtil.getEncodingCode(newEncoding),\n    };\n\n    return GameCubeSaveData.createFromSaveFiles(gameCubeSaveData.getSaveFiles(), volumeInfo);\n  }\n\n  static createFromGameCubeData(arrayBuffer) {\n    if (arrayBuffer.byteLength < (NUM_RESERVED_BLOCKS * BLOCK_SIZE)) {\n      throw new Error('This does not appear to be a GameCube memory card image');\n    }\n\n    const headerInfo = GameCubeHeader.readHeader(getBlock(arrayBuffer, HEADER_BLOCK_NUMBER));\n\n    const { numTotalBytes, numTotalBlocks } = GameCubeUtil.getTotalSizes(headerInfo.memcardSizeMegabits);\n\n    if (arrayBuffer.byteLength < numTotalBytes) {\n      throw new Error('This does not appear to be a GameCube memory card image');\n    }\n\n    const directoryInfo = getActiveBlock(\n      GameCubeDirectory.readDirectory(getBlock(arrayBuffer, DIRECTORY_BLOCK_NUMBER)),\n      GameCubeDirectory.readDirectory(getBlock(arrayBuffer, DIRECTORY_BACKUP_BLOCK_NUMBER)),\n    );\n\n    const blockAllocationTableInfo = getActiveBlock(\n      GameCubeBlockAllocationTable.readBlockAllocationTable(getBlock(arrayBuffer, BLOCK_ALLOCATION_TABLE_BLOCK_NUMBER)),\n      GameCubeBlockAllocationTable.readBlockAllocationTable(getBlock(arrayBuffer, BLOCK_ALLOCATION_TABLE_BACKUP_BLOCK_NUMBER)),\n    );\n\n    const volumeInfo = {\n      ...headerInfo,\n      numTotalBlocks,\n      numUsedBlocks: numTotalBlocks - blockAllocationTableInfo.numFreeBlocks,\n      numFreeBlocks: blockAllocationTableInfo.numFreeBlocks,\n      lastAllocatedBlock: blockAllocationTableInfo.lastAllocatedBlock,\n    };\n\n    const saveFiles = readSaveFiles(directoryInfo.directoryEntries, blockAllocationTableInfo.blockAllocationTable, arrayBuffer, headerInfo.encodingString);\n\n    return new GameCubeSaveData(arrayBuffer, saveFiles, volumeInfo);\n  }\n\n  static createFromSaveFiles(saveFiles, volumeInfo) {\n    const { numTotalBytes, numTotalBlocks } = GameCubeUtil.getTotalSizes(volumeInfo.memcardSizeMegabits);\n\n    checkDesiredSize(numTotalBytes);\n\n    const headerBlock = GameCubeHeader.writeHeader(volumeInfo);\n\n    // Fixup any save files that need it\n    const saveFilesWithFixUps = saveFiles.map((saveFile) => GameSpecificFixups.fixupSaveFile(saveFile, headerBlock));\n\n    // Begin by dividing up the data from our save files into blocks, so we know how many there are\n\n    let currentBlock = NUM_RESERVED_BLOCKS;\n\n    const saveFilesWithBlockInfo = saveFilesWithFixUps.map((saveFile) => {\n      const saveStartBlock = currentBlock;\n\n      const blockList = [];\n\n      for (let currentOffset = 0; currentOffset < saveFile.rawData.byteLength; currentOffset += BLOCK_SIZE) {\n        blockList.push(saveFile.rawData.slice(currentOffset, currentOffset + BLOCK_SIZE));\n      }\n\n      if (blockList.length > 0) {\n        let finalBlock = blockList.pop();\n\n        finalBlock = Util.padArrayBuffer(finalBlock, BLOCK_SIZE, BLOCK_PADDING_VALUE);\n\n        blockList.push(finalBlock);\n      }\n\n      currentBlock += blockList.length;\n\n      return {\n        ...saveFile,\n        saveStartBlock,\n        saveSizeBlocks: blockList.length,\n        blockList,\n      };\n    });\n\n    // The memord card image is the reserved blocks, followed by the data blocks, followed by empty blocks\n\n    const directoryBlock = GameCubeDirectory.writeDirectory(saveFilesWithBlockInfo);\n    const blockAllocationTableBlock = GameCubeBlockAllocationTable.writeBlockAllocationTable(saveFilesWithBlockInfo, numTotalBlocks);\n\n    let memcardArrayBuffer = Util.concatArrayBuffers([headerBlock, directoryBlock, directoryBlock, blockAllocationTableBlock, blockAllocationTableBlock]);\n\n    saveFilesWithBlockInfo.forEach((saveFile) => { memcardArrayBuffer = Util.concatArrayBuffers([memcardArrayBuffer, ...saveFile.blockList]); });\n\n    if (memcardArrayBuffer.byteLength > numTotalBytes) {\n      throw new Error(`Unable to create a ${volumeInfo.memcardSizeMegabit} megabit card for these save files. Requires ${memcardArrayBuffer.byteLength} bytes but card is only ${numTotalBytes} bytes`);\n    }\n\n    // Fill in the rest of the file with empty blocks\n\n    const remainingBlocks = Math.floor((numTotalBytes - memcardArrayBuffer.byteLength) / BLOCK_SIZE);\n\n    memcardArrayBuffer = Util.concatArrayBuffers([memcardArrayBuffer, createBlocks(remainingBlocks)]);\n\n    return new GameCubeSaveData(memcardArrayBuffer, saveFilesWithBlockInfo, volumeInfo);\n  }\n\n  constructor(arrayBuffer, saveFiles, volumeInfo) {\n    this.arrayBuffer = arrayBuffer;\n    this.saveFiles = saveFiles;\n    this.volumeInfo = volumeInfo;\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getVolumeInfo() {\n    return this.volumeInfo;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/GameSpecificFixups/FZeroGx.js",
    "content": "/* eslint-disable no-bitwise */\n\n// Taken from https://github.com/dolphin-emu/dolphin/blob/059282df6f5a0f1671611fbd72de645916b526cd/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L1068\n\nimport GameCubeBasics from '../Components/Basics';\n\nimport Util from '../../../util/util';\n\nconst { BLOCK_SIZE, LITTLE_ENDIAN } = GameCubeBasics;\n\nconst CHECKSUM_OFFSET = 0;\nconst CHECKSUM_LENGTH = 2;\n\nexport default class FZeroGxFixups {\n  static fixupSaveFile(saveFile, headerSerials) {\n    // Make sure that we've got the right file and it's the right length\n\n    if (saveFile.fileName !== 'f_zero.dat') {\n      return saveFile;\n    }\n\n    if (Math.ceil(saveFile.rawData.byteLength / BLOCK_SIZE) !== 4) {\n      return saveFile;\n    }\n\n    // We've got the right file, so let's begin fixing it up\n\n    const fixedSaveFile = {\n      ...saveFile,\n      rawData: Util.copyArrayBuffer(saveFile.rawData),\n    };\n\n    const saveFileRawDataView = new DataView(fixedSaveFile.rawData);\n    const saveFileRawDataUint8Array = new Uint8Array(fixedSaveFile.rawData);\n\n    // Set the new serial numbers\n\n    saveFileRawDataView.setUint16(1 * BLOCK_SIZE + 0x0066, (headerSerials.serial1 >>> 16) & 0xFFFF, LITTLE_ENDIAN); // Deconstruct the offsets to make it easier to check this code against Dolphin's\n    saveFileRawDataView.setUint16(3 * BLOCK_SIZE + 0x1580, (headerSerials.serial2 >>> 16) & 0xFFFF, LITTLE_ENDIAN);\n    saveFileRawDataView.setUint16(1 * BLOCK_SIZE + 0x0060, headerSerials.serial1 & 0xFFFF, LITTLE_ENDIAN);\n    saveFileRawDataView.setUint16(1 * BLOCK_SIZE + 0x0200, headerSerials.serial2 & 0xFFFF, LITTLE_ENDIAN);\n\n    // Calculate a new 16 bit checksum\n\n    let checksum = 0xFFFF;\n\n    for (let i = CHECKSUM_OFFSET + CHECKSUM_LENGTH; i < fixedSaveFile.rawData.byteLength; i += 1) {\n      checksum ^= saveFileRawDataUint8Array[i];\n\n      for (let j = 8; j > 0; j -= 1) {\n        if ((checksum & 1) !== 0) {\n          checksum = ((checksum >>> 1) ^ 0x8408) >>> 0; // xor will interpret number as negative if high bit is set, but we want unsigned\n        } else {\n          checksum >>>= 1;\n        }\n      }\n    }\n\n    // Set the new checksum\n\n    saveFileRawDataView.setUint16(CHECKSUM_OFFSET, (~checksum) & 0xFFFF, LITTLE_ENDIAN);\n\n    return fixedSaveFile;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/GameSpecificFixups/GameSpecificFixups.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThere are various games for the GameCube where the save data depends on specifics from the memory card\n(usually the serial number), and so moving the save to a different card (or the same card with a different format time)\nwill result in the game thinking the save is corrupted\n*/\n\nimport GameCubeBasics from '../Components/Basics';\n\nimport FZeroGxFixups from './FZeroGx';\nimport PhantasyStarOnlineFixups from './PhantasyStarOnline';\n\nconst { LITTLE_ENDIAN } = GameCubeBasics;\n\nconst FIXUP_CLASSES = [\n  FZeroGxFixups,\n  PhantasyStarOnlineFixups,\n];\n\nconst HEADER_SERIAL_DATA_LENGTH = 32;\n\n// Taken from https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L1249\n// and https://github.com/bodgit/gc/blob/main/header.go#L64\n// It's a bit confusing that both Dolphin and the gc library above refer to these checksums as \"serials\", which is\n// also the name they give the first 12 bytes of the header.\nfunction calculateHeaderSerials(headerBlock) {\n  const headerBlockDataView = new DataView(headerBlock);\n\n  let serial1 = 0;\n  let serial2 = 0;\n\n  for (let currentOffset = 0; currentOffset < HEADER_SERIAL_DATA_LENGTH; currentOffset += 8) {\n    serial1 = (serial1 ^ headerBlockDataView.getUint32(currentOffset + 0, LITTLE_ENDIAN)) & 0xFFFFFFFF;\n    serial2 = (serial2 ^ headerBlockDataView.getUint32(currentOffset + 4, LITTLE_ENDIAN)) & 0xFFFFFFFF;\n  }\n\n  return { serial1, serial2 };\n}\n\nexport default class GameSpecificFixups {\n  static fixupSaveFile(saveFile, headerBlock) {\n    // All of the games so far want the same checksums from the card header\n    const headerSerials = calculateHeaderSerials(headerBlock);\n\n    let fixedSaveFile = saveFile;\n\n    FIXUP_CLASSES.forEach((fixupClass) => { fixedSaveFile = fixupClass.fixupSaveFile(fixedSaveFile, headerSerials); });\n\n    return fixedSaveFile;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/GameSpecificFixups/PhantasyStarOnline.js",
    "content": "/* eslint-disable no-bitwise */\n\n// Taken from https://github.com/dolphin-emu/dolphin/blob/059282df6f5a0f1671611fbd72de645916b526cd/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L1123\n\nimport GameCubeBasics from '../Components/Basics';\n\nimport Util from '../../../util/util';\n\nconst { BLOCK_SIZE, LITTLE_ENDIAN } = GameCubeBasics;\n\nconst FILENAME_TO_EXTRA_CHECKSUM_LENGTH = new Map([\n  ['PSO_SYSTEM', 0],\n  ['PSO3_SYSTEM', 0x10],\n]);\n\nconst CRC32_LOOK_UP_TABLE_SIZE = 256;\nconst CRC32_LOOK_UP_TABLE = new Array(CRC32_LOOK_UP_TABLE_SIZE);\n\nfunction initializeCrc32LookUpTable() {\n  let checksum = 0;\n\n  for (let i = 0; i < CRC32_LOOK_UP_TABLE_SIZE; i += 1) {\n    checksum = i;\n    for (let j = 8; j > 0; j -= 1) {\n      if ((checksum & 1) !== 0) {\n        checksum = ((checksum >>> 1) ^ 0xEDB88320) >>> 0; // xor will interpret number as negative if high bit is set, but we want unsigned\n      } else {\n        checksum >>>= 1;\n      }\n    }\n\n    CRC32_LOOK_UP_TABLE[i] = checksum;\n  }\n}\n\ninitializeCrc32LookUpTable();\n\nexport default class PhantasyStarOnlineFixups {\n  static fixupSaveFile(saveFile, headerSerials) {\n    // Make sure that we've got the right file\n\n    if (!FILENAME_TO_EXTRA_CHECKSUM_LENGTH.has(saveFile.fileName)) {\n      return saveFile;\n    }\n\n    // We've got the right file, so let's begin fixing it up\n\n    const fixedSaveFile = {\n      ...saveFile,\n      rawData: Util.copyArrayBuffer(saveFile.rawData),\n    };\n\n    const saveFileRawDataView = new DataView(fixedSaveFile.rawData);\n    const saveFileRawDataUint8Array = new Uint8Array(fixedSaveFile.rawData);\n\n    // Set the new serial numbers\n\n    saveFileRawDataView.setUint32(1 * BLOCK_SIZE + 0x0158, headerSerials.serial1, LITTLE_ENDIAN); // Deconstruct the offsets to make it easier to check this code against Dolphin's\n    saveFileRawDataView.setUint32(1 * BLOCK_SIZE + 0x015C, headerSerials.serial2, LITTLE_ENDIAN);\n\n    // Calculate our new checksum\n\n    const extraChecksumLength = FILENAME_TO_EXTRA_CHECKSUM_LENGTH.get(fixedSaveFile.fileName);\n\n    let checksum = 0xDEBB20E3;\n\n    for (let i = 0x004C; i < (0x0164 + extraChecksumLength); i += 1) {\n      const lookupTableIndex = ((checksum ^ saveFileRawDataUint8Array[1 * BLOCK_SIZE + i]) >>> 0) % CRC32_LOOK_UP_TABLE_SIZE;\n      checksum = (((checksum >>> 8) & 0xFFFFFF) ^ CRC32_LOOK_UP_TABLE[lookupTableIndex]) >>> 0;\n    }\n\n    saveFileRawDataView.setUint32(1 * BLOCK_SIZE + 0x0048, (checksum ^ 0xFFFFFFFF) >>> 0, LITTLE_ENDIAN);\n\n    return fixedSaveFile;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/IndividualSaves/GameShark.js",
    "content": "// A GameCube GameShark file is a .gci file with a 0x110 byte header prepended\n//\n// 0x00-0x05:  Magic (\"GCSAVE\")\n// 0x10-0x109: Comment (encoding may be either US-ASCII or shift-jis)\n// 0x110-EOF:  .gci file\n\nimport GameCubeGciSaveData from './Gci';\nimport GameCubeBasics from '../Components/Basics';\n\nimport Util from '../../../util/util';\n\nconst { BLOCK_SIZE } = GameCubeBasics;\n\nconst HEADER_LENGTH = 0x110;\n\nconst MAGIC = 'GCSAVE';\nconst MAGIC_OFFSET = 0;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst COMMENT_OFFSET = 0x10;\nconst COMMENT_LENGTH = HEADER_LENGTH - COMMENT_OFFSET;\n\nexport default class GameCubeGameSharkSaveData {\n  static convertIndividualSaveToSaveFile(arrayBuffer) {\n    Util.checkMagic(arrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const uint8Array = new Uint8Array(arrayBuffer);\n    const gciArrayBuffer = arrayBuffer.slice(HEADER_LENGTH);\n\n    const saveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer, false); // Save size in blocks may be set incorrectly, so don't check it: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp#L162\n\n    const gameSharkComment = Util.readNullTerminatedString(uint8Array, COMMENT_OFFSET, saveFile.inferredCommentEncoding, COMMENT_LENGTH);\n\n    return {\n      ...saveFile,\n      saveSizeBlocks: Math.ceil(saveFile.rawData.byteLength / BLOCK_SIZE), // Fix up the save size manually\n      gameSharkComment,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/IndividualSaves/Gci.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThe standard format for individual saves on the GameCube appears to be the .GCI format.\n\nThere are other potential formats recognized by Dolphin:\n- .GCS: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp#L149\n- .SAV: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp#L182\n\nDolphin distinguishes between them based on file size, because the blocks are the same but the header is different: https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp#L212\n\n.GCI is a directory entry concatenated with the raw save data\n\nNote that the starting block number in the directory entry is irrelevant here\n\n0x00-0x3F: Directory entry\n0x40-EOF:  Game data (including the comment and icons)\n*/\n\nimport Util from '../../../util/util';\n\nimport GameCubeBasics from '../Components/Basics';\nimport GameCubeDirectoryEntry from '../Components/DirectoryEntry';\n\nconst { BLOCK_SIZE } = GameCubeBasics;\n\n// Figuring out the encoding of the comments is tricky. In a real save file the encoding is specified in the header.\n// However, this user-defined format takes the directory entry from the real format but omits the header.\n\n// It does not appear that we can automatically detect the encoding of the comments.\n// The encoding-japanese package that we use to encode/decode shift-jis strings can in theory\n// detect encoding, but for our example save files it returns \"UTF32\" for US-ASCII comments,\n// and any one of \"UTF32\", \"UTF16\", or \"SJIS\" for the Japanese ones (which are all in shift-jis)\n\n// We could parse them always using shift-jis because the ASCII stuff will be decoded correctly, with the exception of backslash and tilde and then anything in \"extended\" ASCII above 0x7F\n\n// But we can maybe do slightly better by trying to infer the encoding from the region of the game.\n// Games from the Japan region we'll decode as shift-jis, and the other 2 regions (North American and Europe) we'll decode as US-ASCII\n\nconst GAME_CODE_AND_FILE_NAME_ENCODING = 'US-ASCII';\n\nconst SHIFT_JIS_COMMENT_REGIONS = ['Japan', 'Korea'];\n\nconst DATA_OFFSET = GameCubeDirectoryEntry.LENGTH;\n\nconst DEFAULT_START_BLOCK_NUMBER = 0; // Doesn't matter: the concept of where the save is located doesn't mean anything in this format\n\nexport default class GameCubeGciSaveData {\n  static convertSaveFilesToGcis(saveFiles) {\n    return saveFiles.map((saveFile) => {\n      const saveFileWithBlockInfo = {\n        ...saveFile,\n        saveStartBlock: DEFAULT_START_BLOCK_NUMBER,\n        saveSizeBlocks: saveFile.rawData.byteLength / BLOCK_SIZE,\n      };\n\n      const directoryEntryArrayBuffer = GameCubeDirectoryEntry.writeDirectoryEntry(saveFileWithBlockInfo);\n\n      return Util.concatArrayBuffers([directoryEntryArrayBuffer, saveFileWithBlockInfo.rawData]);\n    });\n  }\n\n  // Based on https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp#L131\n  static convertIndividualSaveToSaveFile(arrayBuffer, checkSaveSizes = true) {\n    const directoryEntry = GameCubeDirectoryEntry.readDirectoryEntry(arrayBuffer, GAME_CODE_AND_FILE_NAME_ENCODING);\n    const rawData = arrayBuffer.slice(DATA_OFFSET);\n    const inferredCommentEncoding = (SHIFT_JIS_COMMENT_REGIONS.indexOf(directoryEntry.region) >= 0) ? 'shift-jis' : 'US-ASCII'; // Note that this can be incorrect for Korean games: they can have the region E (USA)\n\n    if (checkSaveSizes && (rawData.byteLength !== (directoryEntry.saveSizeBlocks * BLOCK_SIZE))) {\n      throw new Error(`File appears to be corrupt. Save size specified as ${directoryEntry.saveSizeBlocks} blocks (${directoryEntry.saveSizeBlocks * BLOCK_SIZE} bytes)`\n        + ` but save data is ${rawData.byteLength} bytes`);\n    }\n\n    const comments = GameCubeDirectoryEntry.getComments(directoryEntry.commentStart, rawData, inferredCommentEncoding);\n\n    return {\n      ...directoryEntry,\n      inferredCommentEncoding,\n      comments,\n      rawData,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/IndividualSaves/IndividualSaves.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThere are various formats on GameFAQs for individual save files. Fortunately they have magic in the header\nwhich makes them easy to distinguish between\n*/\n\nimport GameCubeGameSharkSaveData from './GameShark';\nimport GameCubeMaxDriveSaveData from './MaxDrive';\nimport GameCubeGciSaveData from './Gci';\n\nconst INDIVIDUAL_SAVE_CLASSES = [\n  GameCubeGameSharkSaveData,\n  GameCubeMaxDriveSaveData,\n  GameCubeGciSaveData, // This one last because it doesn't have any handy magic bytes in the header to easily distinguish it\n];\n\nexport default class GameCubeIndividualSaves {\n  static convertIndividualSaveToSaveFile(individualSave) {\n    for (let i = 0; i < INDIVIDUAL_SAVE_CLASSES.length; i += 1) {\n      try {\n        return INDIVIDUAL_SAVE_CLASSES[i].convertIndividualSaveToSaveFile(individualSave);\n      } catch (e) {\n        // Move onto the next individual save type\n      }\n    }\n\n    throw new Error('This does not appear to be a GameCube individual save file');\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/IndividualSaves/MaxDrive.js",
    "content": "// A GameCube MaxDrive file is a .gci file with a 0x80 byte header prepended\n//\n// Note that many, but not all, of the .gci fields are endian swapped. Specifically, the date and all of the text fields are not swapped.\n//\n// 0x00-0x0B: Magic (\"DATELGC_SAVE\")\n// 0x10-0x47: Comment 1 (encoding may be either US-ASCII or shift-jis)\n// 0x48-0x79: Comment 2\n// 0x80-EOF:  .gci file\n\nimport GameCubeGciSaveData from './Gci';\n\nimport Util from '../../../util/util';\n\nconst HEADER_LENGTH = 0x80;\n\nconst MAGIC = 'DATELGC_SAVE';\nconst MAGIC_OFFSET = 0;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst COMMENT_OFFSETS = [0x10, 0x48];\nconst COMMENT_LENGTH = 0x38;\n\nconst BYTE_SWAP_OFFSETS = [ // https://github.com/dolphin-emu/dolphin/blob/master/Source/Core/Core/HW/GCMemcard/GCMemcardUtils.cpp#L94\n  0x06, // Banner and icon flags\n  0x2C, // Icon graphic data offset (4 bytes)\n  0x2E, // Icon graphic data offset\n  0x30, // Icon graphic format\n  0x32, // Icon graphic speed\n  0x34, // Permission attribute bitfield\n  0x36, // Starting block number\n  0x38, // Save size in blocks\n  0x3A, // Unused\n  0x3C, // Comment offset (4 bytes)\n  0x3E, // Comment offset\n];\n\nexport default class GameCubeMaxDriveSaveData {\n  static convertIndividualSaveToSaveFile(arrayBuffer) {\n    Util.checkMagic(arrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const uint8Array = new Uint8Array(arrayBuffer);\n    const gciArrayBuffer = arrayBuffer.slice(HEADER_LENGTH);\n    const gciDataView = new DataView(gciArrayBuffer);\n\n    BYTE_SWAP_OFFSETS.forEach((offset) => gciDataView.setUint16(offset, gciDataView.getUint16(offset, false), true)); // Weirdly, most but not all entries are a different endianness\n\n    const saveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer);\n\n    const maxDriveComments = COMMENT_OFFSETS.map((commentOffset) => Util.readNullTerminatedString(uint8Array, commentOffset, saveFile.inferredCommentEncoding, COMMENT_LENGTH));\n\n    return {\n      ...saveFile,\n      maxDriveComments,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/GameCube/Util.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport GameCubeBasics from './Components/Basics';\n\nconst {\n  BLOCK_SIZE,\n  NUM_RESERVED_BLOCKS,\n  LITTLE_ENDIAN,\n} = GameCubeBasics;\n\n// Taken from http://www.surugi.com/projects/gcifaq.html and the FAQ from https://gc-saves.com/\nconst REGION_DECODE = new Map([\n  ['J', 'Japan'],\n  ['E', 'North America'],\n  ['P', 'Europe'],\n  ['D', 'Germany'],\n  ['F', 'France'],\n  ['H', 'Netherlands'],\n  ['I', 'Italy'],\n  ['S', 'Spain'],\n  ['K', 'Korea'],\n  ['U', 'Korea'],\n  ['W', 'Korea'],\n]);\n\nconst UNKNOWN_REGION_STRING = 'Unknown';\nconst UNKNOWN_REGION_CODE = 'X';\n\n// Taken from https://github.com/dolphin-emu/dolphin/blob/ee27f03a4387baca6371a06068274135ff9547a5/Source/Core/Core/HW/GCMemcard/GCMemcard.h#L186\nconst ENCODING_DECODE = new Map([\n  [0, 'US-ASCII'],\n  [1, 'shift-jis'],\n]);\n\nconst UNKNOWN_ENCODING_STRING = 'Unknown';\nconst UNKNOWN_ENCODING_CODE = -1;\n\n// Taken from https://www.gc-forever.com/yagcd/chap10.html#sec10.5\nconst LANGUAGE_DECODE = new Map([\n  [0, 'English'],\n  [1, 'German'],\n  [2, 'French'],\n  [3, 'Spanish'],\n  [4, 'Italian'],\n  [5, 'Dutch'],\n]);\n\nconst UNKNOWN_LANGUAGE_STRING = 'Unknown';\nconst UNKNOWN_LANGUAGE_CODE = -1;\n\n// The epoch for Javascript Dates is Jan 1, 1970. For GameCube dates it's Jan 1, 2000: https://github.com/dolphin-emu/dolphin/blob/4f210df86a2d2362ef8087cf81b817b18c3d32e9/Source/Core/Core/HW/EXI/EXI_DeviceIPL.h#L27\nconst MILLISECONDS_BETWEEN_EPOCHS = 946684800000;\n\n// Numbers to turn a OSTime into a regular time\n// Bus operates at 162 MHz. Read games read this value from address 0x800000F8: https://github.com/doldecomp/melee/blob/aa123d0cefebc03046794e5ebc712551fa9b36fa/src/dolphin/os/OSTime.h#L29\n// which contains the number 162000000: https://www.gc-forever.com/yagcd/chap4.html\nconst OS_BUS_CLOCK = 162000000n; // https://github.com/doldecomp/melee/blob/aa123d0cefebc03046794e5ebc712551fa9b36fa/src/dolphin/os/OSTime.h#L31\nconst OS_TIMER_CLOCK = OS_BUS_CLOCK / 4n; // https://github.com/doldecomp/melee/blob/aa123d0cefebc03046794e5ebc712551fa9b36fa/src/dolphin/os/OSTime.h#L32\n\nfunction getString(code, decodeMap, unknownString) {\n  if (decodeMap.has(code)) {\n    return decodeMap.get(code);\n  }\n\n  return unknownString;\n}\n\nfunction getCode(string, decodeMap, unknownCode) {\n  const possibleCodes = Array.from(decodeMap.keys());\n\n  const code = possibleCodes.find((key) => decodeMap.get(key) === string);\n\n  if (code === undefined) {\n    return unknownCode;\n  }\n\n  return code;\n}\n\nexport default class GameCubeUtil {\n  static getRegionString(regionCode) {\n    return getString(regionCode, REGION_DECODE, UNKNOWN_REGION_STRING);\n  }\n\n  static getRegionCode(regionString) {\n    return getCode(regionString, REGION_DECODE, UNKNOWN_REGION_CODE);\n  }\n\n  static getEncodingString(encodingCode) {\n    return getString(encodingCode, ENCODING_DECODE, UNKNOWN_ENCODING_STRING);\n  }\n\n  static getEncodingCode(encodingString) {\n    return getCode(encodingString, ENCODING_DECODE, UNKNOWN_ENCODING_CODE);\n  }\n\n  static getLanguageString(languageCode) {\n    return getString(languageCode, LANGUAGE_DECODE, UNKNOWN_LANGUAGE_STRING);\n  }\n\n  static getLanguageCode(languageString) {\n    return getCode(languageString, LANGUAGE_DECODE, UNKNOWN_LANGUAGE_CODE);\n  }\n\n  static getDate(dateEncoded) {\n    // Date conversion from: http://www.surugi.com/projects/gcifaq.html\n    // The GameCube stores the date as the number of seconds since Jan 1, 2000. So to convert to a javascript Date,\n    // we multiply to get milliseconds, and add the number of milliseconds between Jan 1, 1970 and Jan 1, 2000\n\n    return new Date((dateEncoded * 1000) + MILLISECONDS_BETWEEN_EPOCHS);\n  }\n\n  static getDateCode(date) {\n    return Math.floor((date.valueOf() - MILLISECONDS_BETWEEN_EPOCHS) / 1000);\n  }\n\n  static getDateFromOsTime(osTime) {\n    // OSTime is a 64 bit BigInt, so can't mix calculations with a Number\n    const secondsFromEpoch = osTime / OS_TIMER_CLOCK; // https://github.com/doldecomp/melee/blob/aa123d0cefebc03046794e5ebc712551fa9b36fa/src/dolphin/os/OSTime.h#L33\n    return GameCubeUtil.getDate(Number(secondsFromEpoch));\n  }\n\n  static getOsTimeFromDate(date) {\n    const dateCode = GameCubeUtil.getDateCode(date);\n    // BigInt is not defined in our default javascript eslint rules. Doing this properly by making a .eslintrc file specifying using newer rules leads to an awful mess of having to make a giant .eslintrc file to deal with error after error\n    return BigInt(dateCode) * OS_TIMER_CLOCK; // eslint-disable-line no-undef\n  }\n\n  // Taken from https://github.com/dolphin-emu/dolphin/blob/4f210df86a2d2362ef8087cf81b817b18c3d32e9/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L328\n  static calculateChecksums(arrayBuffer, beginOffset, length) {\n    let checksum = 0;\n    let checksumInverse = 0;\n\n    const dataView = new DataView(arrayBuffer);\n\n    for (let i = 0; i < length; i += 2) {\n      checksum += dataView.getUint16(beginOffset + i, LITTLE_ENDIAN);\n      checksumInverse += dataView.getUint16(beginOffset + i, LITTLE_ENDIAN) ^ 0xFFFF;\n\n      // Need to make sure we're always constrained to 16 bits\n      checksum &= 0xFFFF;\n      checksumInverse &= 0xFFFF;\n    }\n\n    if (checksum === 0xFFFF) {\n      checksum = 0;\n    }\n\n    if (checksumInverse === 0xFFFF) {\n      checksumInverse = 0;\n    }\n\n    return {\n      checksum,\n      checksumInverse,\n    };\n  }\n\n  static megabitsToBytes(numMegabits) {\n    return ((numMegabits / 8) * 1024 * 1024);\n  }\n\n  static bytesToMegabits(numBytes) {\n    return (numBytes / (1024 * 1024)) * 8;\n  }\n\n  static getTotalSizes(numMegabits) {\n    const numTotalBytes = GameCubeUtil.megabitsToBytes(numMegabits);\n\n    return {\n      numTotalBytes,\n      numTotalBlocks: (numTotalBytes / BLOCK_SIZE) - NUM_RESERVED_BLOCKS,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/GameGear.js",
    "content": "/*\nThe MiSTer makes saves that are 64kB in size and the emulator I tried makes saves that are 32kB. Each seems able to load the other's save.\nI'm not sure which of the two sizes is \"correct\", so I'm just going to leave everything alone.\n\nA list of Game Gear games that support saving can be found here:\nhttps://segaretro.org/Battery_backup#Game_Gear\n*/\n\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class MisterGameGearSaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gamegear';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(misterSaveData.getRawArrayBuffer(), newSize);\n\n    return MisterGameGearSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    return new MisterGameGearSaveData(misterArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new MisterGameGearSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/Gameboy.js",
    "content": "/*\nThe MiSTer saves GB/GBC data as just the raw data of the correct size: no transformation or padding required\n*/\n\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class MisterGameboySaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gb';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(misterSaveData.getRawArrayBuffer(), newSize);\n\n    return MisterGameboySaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    return new MisterGameboySaveData(misterArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new MisterGameboySaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/GameboyAdvance.js",
    "content": "/*\nMiSTer GBA files are the same as emulator files with 2 exceptions:\n\n- 512B EEPROM files must be padded out to 8192B, otherwise the core does not recognize them. This is because the core is unable to determine the EEPROM size from the ROM\n- MiSTer GBA files may have RTC data appended to the end, which will be ignored by emulators so we can remove it\n\nMore information is here: https://misterfpga.org/viewtopic.php?t=2040\n\nWhen going from a raw 8192B EEPROM save, we can't automatically truncate it for the MiSTer because we don't know whether it should be 512B or 8192B.\nI think most emulators will accept either size, but regardless the user is able to select to truncate it in the interface.\n*/\n\nimport SaveFilesUtil from '../../util/SaveFiles';\nimport PaddingUtil from '../../util/Padding';\nimport MathUtil from '../../util/Math';\n\nconst MISTER_MINIMUM_FILE_SIZE = 8192;\nconst MISTER_PADDING_VALUE = 0x00; // It doesn't matter what we use here: the core doesn't clear the data from the previous game, so it gets left uninitialized\n\nexport default class MisterGameboyAdvanceSaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gba';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(misterSaveData.getRawArrayBuffer(), newSize);\n\n    return MisterGameboyAdvanceSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    // Check if we have any RTC data appended\n    let rawArrayBuffer = misterArrayBuffer;\n    const hasRtcData = !MathUtil.isPowerOf2(misterArrayBuffer.byteLength);\n\n    if (hasRtcData) {\n      rawArrayBuffer = PaddingUtil.removePaddingFromEnd(misterArrayBuffer, misterArrayBuffer.byteLength - MathUtil.getNextSmallestPowerOf2(misterArrayBuffer.byteLength));\n    }\n\n    return new MisterGameboyAdvanceSaveData(rawArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new MisterGameboyAdvanceSaveData(rawArrayBuffer, PaddingUtil.padAtEndToMinimumSize(rawArrayBuffer, MISTER_PADDING_VALUE, MISTER_MINIMUM_FILE_SIZE));\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/Genesis.js",
    "content": "/*\nThe MiSTer saves Genesis data as bytes (similar to the internal Wii format) rather than shorts like some emulators\n\nBased on https://github.com/superg/srmtools\n*/\n\nimport PaddingUtil from '../../util/Padding';\nimport GenesisUtil from '../../util/Genesis';\nimport SaveFilesUtil from '../../util/SaveFiles';\n\n// Genesis files on the mister are padded out to 64k with 0xFFs.\n// The core is apparently pretty lenient on reading unpadded files, but we'll still be friendly and pad ours out.\n// There's one ROM hack, Sonic 1 Remastered, that instead requires padding out with 0x00s.\n// But we're not going to handle that. How could we?\nconst MISTER_FILE_SIZE = 65536;\nconst MISTER_PADDING_VALUE = 0xFF;\n\nexport default class MisterGenesisSaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'genesis';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(misterSaveData.getRawArrayBuffer(), newSize);\n\n    return MisterGenesisSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    // First, we need to unpad the mister save. Otherwise we will byte-expand all the 0xFFs at the end\n    // which will result in a crazy file\n\n    let unpaddedMisterArrayBuffer = misterArrayBuffer;\n\n    const padding = PaddingUtil.getPadFromEndValueAndCount(misterArrayBuffer);\n\n    // The Genesis MiSTer core can actually output files with either padding value.\n    // I guess if it gets a file padded with 0x00 then it just maintains that?\n    // So althugh it's tempting to only remove padding here if it's the MISTER_PADDING_VALUE\n    // it seems to be more correct to always remove it\n    unpaddedMisterArrayBuffer = PaddingUtil.removePaddingFromEnd(misterArrayBuffer, padding.count);\n\n    if (GenesisUtil.isEepromSave(unpaddedMisterArrayBuffer)) {\n      // If it's an EEPROM save, an emulator will want it to not be byte expanded\n      return new MisterGenesisSaveData(unpaddedMisterArrayBuffer, unpaddedMisterArrayBuffer);\n    }\n\n    // Now that the padding is gone, we can proceed\n\n    const rawArrayBuffer = GenesisUtil.byteExpand(unpaddedMisterArrayBuffer, 0x00);\n\n    return new MisterGenesisSaveData(rawArrayBuffer, misterArrayBuffer); // Note that we're passing through the padded file here as the mister file\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    // The mister takes all of its files as non-byte-expanded, whether they are SRAM/FRAM or EEPROM\n\n    // Genesis EEPROM saves don't have either kind of strange byte expansion to work in an emulator that the SRAM and FRAM saves\n    // for the Genesis do. And so it works as-is on a MiSTer.\n    //\n    // But, the user may not know that, and try to convert their save when trying to use it\n    // on a MiSTer.\n    //\n    // Rather than display an error, which may mislead the user into not using the tool for other\n    // subsequent files that DO require conversion, let's just silently pass back the same file (but add padding)\n    // and pretend we converted it.\n    //\n    // This only applies to a really small list of games, so whichever tactic we choose here\n    // won't have much of an impact (hopefully!)\n\n    let unpaddedMisterArrayBuffer = rawArrayBuffer;\n\n    if (GenesisUtil.isByteExpanded(rawArrayBuffer)) {\n      unpaddedMisterArrayBuffer = GenesisUtil.byteCollapse(rawArrayBuffer);\n    }\n\n    return new MisterGenesisSaveData(rawArrayBuffer, PaddingUtil.padAtEndToMinimumSize(unpaddedMisterArrayBuffer, MISTER_PADDING_VALUE, MISTER_FILE_SIZE));\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/N64Cart.js",
    "content": "/*\nWe've split up the N64 into cart and mempack because a mempack image is the same size as an SRAM image,\nSo if the mempack was corrupted we wouldn't be able to disambiguate that and would\nassume the image was SRAM which may be confusing to the user\n\nMiSTer N64 cart saves are stored with the same endianness as emulator saves, so no transformation is required\n*/\n\nimport SaveFilesUtil from '../../util/SaveFiles';\nimport N64Util from '../../util/N64';\n\nexport default class MisterN64CartSaveData {\n  static getMisterFileExtension(arrayBuffer) {\n    return N64Util.getFileExtension(arrayBuffer);\n  }\n\n  static getRawFileExtension(arrayBuffer) {\n    return N64Util.getFileExtension(arrayBuffer);\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'n64';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(misterSaveData.getRawArrayBuffer(), newSize);\n\n    return MisterN64CartSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    return new MisterN64CartSaveData(misterArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new MisterN64CartSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/N64Mempack.js",
    "content": "/*\nThe MiSTer saves N64 mempack data as just a raw memory card image: no transformation requuired\n*/\n\nimport N64MempackSaveData from '../N64/Mempack';\n\nexport default class MisterN64MempackSaveData {\n  static getMisterFileExtension() {\n    return 'cpk';\n  }\n\n  static getRawFileExtension() {\n    return 'mpk';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null; // File size is always one memory card\n  }\n\n  static createWithNewSize(misterSaveData) {\n    return misterSaveData;\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    const n64MempackSaveData = N64MempackSaveData.createFromN64MempackData(misterArrayBuffer); // Parse the data so we can display an error if it's not in the correct format\n\n    return new MisterN64MempackSaveData(n64MempackSaveData.getArrayBuffer(), n64MempackSaveData.getArrayBuffer());\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    const n64MempackSaveData = N64MempackSaveData.createFromN64MempackData(rawArrayBuffer); // Parse the data so we can display an error if it's not in the correct format\n\n    return new MisterN64MempackSaveData(n64MempackSaveData.getArrayBuffer(), n64MempackSaveData.getArrayBuffer());\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/Nes.js",
    "content": "/*\nThe MiSTer saves NES data as a regular raw file. If the NES ROM has an iNES header, then the MiSTer core will make a 32kB save.\nIf it's a NES 2.0 headered ROM, then the MiSTer core will make a correct (usually 8kB) sized save.\n\nIf we made a file smaller than 32kB, the MiSTer core will leave the rest of the memory uninitialized (which shouldn't cause any harm),\nbut let's be friendly and pad out our file to 32kB. Beyond that mark, the MiSTer core will start mirroring addresses (whatever that means :))\n\nLoading these too-large 32kB files straight in an emulator seems to work fine. Since we don't know what the actual size should be (even\nthough it's usually 8kB) then let's just leave them alone.\n\nThere are some games that will cause the MiSTer core to make a larger (e.g. 128kB) save.\n*/\n\nimport PaddingUtil from '../../util/Padding';\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nconst MISTER_MINIMUM_FILE_SIZE = 32768;\nconst MISTER_PADDING_VALUE = 0x00; // Not sure what to choose for padding, given that actual MiSTer files are filled with garbage data\n\nexport default class MisterNesSaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'nes';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(misterSaveData.getRawArrayBuffer(), newSize);\n\n    return MisterNesSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    // Just copy it straight over, because we don't know what size to truncate to: not all NES saves are 8kB\n    return new MisterNesSaveData(misterArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    // Pad our file out to the minimum MiSTer size, just to be nice\n    return new MisterNesSaveData(rawArrayBuffer, PaddingUtil.padAtEndToMinimumSize(rawArrayBuffer, MISTER_PADDING_VALUE, MISTER_MINIMUM_FILE_SIZE));\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/PcEngine.js",
    "content": "/*\nThe MiSTer saves PC Engine data as just the raw data of the correct size: no transformation or padding required\n\nWe can do a little checking to make sure it's in the correct format\n*/\n\nimport PcEngineUtil from '../../util/PcEngine';\n\nexport default class MisterPcEngineSaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null; // Not sure if anything writes out BRAM that's larger/smaller than the real one\n  }\n\n  static createWithNewSize(misterSaveData) {\n    return misterSaveData;\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    PcEngineUtil.verifyPcEngineData(misterArrayBuffer);\n    return new MisterPcEngineSaveData(misterArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    PcEngineUtil.verifyPcEngineData(rawArrayBuffer);\n    return new MisterPcEngineSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/Ps1.js",
    "content": "/*\nThe MiSTer saves PS1 data as just a raw memory card image: no transformation requuired\n*/\n\nimport Ps1MemcardSaveData from '../PS1/Memcard';\n\nexport default class MisterPs1SaveData {\n  static getMisterFileExtension() {\n    return 'mcd';\n  }\n\n  static getRawFileExtension() {\n    return 'mcr';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null; // File size is always one memory card\n  }\n\n  static createWithNewSize(misterSaveData) {\n    return misterSaveData;\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    const ps1MemcardSaveData = Ps1MemcardSaveData.createFromPs1MemcardData(misterArrayBuffer); // Parse the data so we can display an error if it's not in the correct format\n\n    return new MisterPs1SaveData(ps1MemcardSaveData.getArrayBuffer(), ps1MemcardSaveData.getArrayBuffer());\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    const ps1MemcardSaveData = Ps1MemcardSaveData.createFromPs1MemcardData(rawArrayBuffer); // Parse the data so we can display an error if it's not in the correct format\n\n    return new MisterPs1SaveData(ps1MemcardSaveData.getArrayBuffer(), ps1MemcardSaveData.getArrayBuffer());\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/SegaCd.js",
    "content": "/*\nThe Mister Sega CD save file is a single file with the internal backup RAM (8kB) concatenated with the cartridge backup RAM (set to 512kB)\n\nMost other platforms store 2 files, but the Mister stores just one for consistency with its other cores.\n\nOnce the file is parsed, like all platforms the Mister interfaces with Sega CD data via its BIOS, meaning that all saves are the same.\n\nIn the example saves I was given, one of them was a 520kB (8kB + 512kB) file but without the BRAM_FORMAT at the end of the second section\n(that section was completely blank). So I guess that part wasn't valid, and we should just truncate the file.\n*/\n\nimport SegaCdUtil from '../../util/SegaCd';\nimport Util from '../../util/util';\nimport SegaError from '../SegaError';\n\nexport default class MisterSegaCdSaveData {\n  static INTERNAL_MEMORY = 'internal-memory';\n\n  static RAM_CART = 'ram-cart';\n\n  static RAM_CART_SIZE = 524288; // Both the Mister and the emulators I've seen produce RAM cart files of this size\n\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'brm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'segacd';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    // Just leave the mister data alone: it can't load anything other than the original 512kB ram cart size.\n    // But other platforms/emulators may need a different ram cart size\n    const newRawRamCartArrayBuffer = SegaCdUtil.resize(misterSaveData.rawCartSaveArrayBuffer, newSize);\n\n    return new MisterSegaCdSaveData(misterSaveData.rawInternalSaveArrayBuffer, newRawRamCartArrayBuffer, misterSaveData.misterArrayBuffer);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    // The file can be either just internal backup RAM (potentially with padding afterward),\n    // or internal backup RAM concatenated with RAM cart backup RAM\n\n    if (misterArrayBuffer.byteLength === (SegaCdUtil.INTERNAL_SAVE_SIZE + MisterSegaCdSaveData.RAM_CART_SIZE)) {\n      let internalArrayBuffer = misterArrayBuffer.slice(0, SegaCdUtil.INTERNAL_SAVE_SIZE);\n      let ramCartArrayBuffer = misterArrayBuffer.slice(SegaCdUtil.INTERNAL_SAVE_SIZE, SegaCdUtil.INTERNAL_SAVE_SIZE + MisterSegaCdSaveData.RAM_CART_SIZE);\n\n      internalArrayBuffer = SegaCdUtil.isCorrectlyFormatted(internalArrayBuffer) ? SegaCdUtil.truncateToActualSize(internalArrayBuffer) : SegaCdUtil.makeEmptySave(SegaCdUtil.INTERNAL_SAVE_SIZE);\n      ramCartArrayBuffer = SegaCdUtil.isCorrectlyFormatted(ramCartArrayBuffer) ? SegaCdUtil.truncateToActualSize(ramCartArrayBuffer) : SegaCdUtil.makeEmptySave(MisterSegaCdSaveData.RAM_CART_SIZE);\n\n      return new MisterSegaCdSaveData(internalArrayBuffer, ramCartArrayBuffer, misterArrayBuffer);\n    }\n\n    return new MisterSegaCdSaveData(SegaCdUtil.truncateToActualSize(misterArrayBuffer), SegaCdUtil.makeEmptySave(MisterSegaCdSaveData.RAM_CART_SIZE), misterArrayBuffer);\n  }\n\n  static createFromRawData({ rawInternalSaveArrayBuffer = null, rawCartSaveArrayBuffer = null }) {\n    // We can output either a large (8kB + 512kB) save or a small (only 8kB) save depending on\n    // whether we're passed an internal save buffer and/or a ram cart save buffer.\n    // There are 4 cases, depending on which combination of raw file we are passed.\n\n    let truncatedRawInternalSaveBuffer = null;\n    let truncatedRawCartSaveArrayBuffer = null;\n    let misterRamCartSaveArrayBuffer = null;\n\n    // since either file (or both files) could have errors, throw an object with all errors collected\n    const conversionErrors = { internalSaveError: null, ramCartError: null };\n\n    if (rawInternalSaveArrayBuffer !== null) {\n      try {\n        truncatedRawInternalSaveBuffer = SegaCdUtil.truncateToActualSize(rawInternalSaveArrayBuffer);\n        if (truncatedRawInternalSaveBuffer.byteLength !== SegaCdUtil.INTERNAL_SAVE_SIZE) {\n          conversionErrors.internalSaveError = `Internal save RAM is not the correct size. Must be ${SegaCdUtil.INTERNAL_SAVE_SIZE} bytes`;\n        }\n      } catch (error) {\n        conversionErrors.internalSaveError = error.message;\n      }\n    }\n\n    if (rawCartSaveArrayBuffer !== null) {\n      try {\n        truncatedRawCartSaveArrayBuffer = SegaCdUtil.truncateToActualSize(rawCartSaveArrayBuffer);\n        misterRamCartSaveArrayBuffer = SegaCdUtil.resize(truncatedRawCartSaveArrayBuffer, MisterSegaCdSaveData.RAM_CART_SIZE);\n      } catch (error) {\n        conversionErrors.ramCartError = error.message;\n      }\n    }\n\n    if ((conversionErrors.internalSaveError !== null) || (conversionErrors.ramCartError !== null)) {\n      throw new SegaError(conversionErrors.internalSaveError, conversionErrors.ramCartError);\n    }\n\n    // Now that we've got our pieces resized and ready, we can see what we've got and figure out\n    // whether to create a small or large mister file\n\n    if (truncatedRawInternalSaveBuffer !== null) {\n      if (misterRamCartSaveArrayBuffer !== null) {\n        // We have both pieces, so we're creating a large mister file\n        return new MisterSegaCdSaveData(truncatedRawInternalSaveBuffer, truncatedRawCartSaveArrayBuffer, Util.concatArrayBuffers([truncatedRawInternalSaveBuffer, misterRamCartSaveArrayBuffer]));\n      }\n\n      // We have the internal save data but not the ram cart save data, so create a small mister file\n      return new MisterSegaCdSaveData(truncatedRawInternalSaveBuffer, SegaCdUtil.makeEmptySave(MisterSegaCdSaveData.RAM_CART_SIZE), truncatedRawInternalSaveBuffer);\n    }\n\n    // We don't have an internal save buffer\n    const emptyInternalSaveBuffer = SegaCdUtil.makeEmptySave(SegaCdUtil.INTERNAL_SAVE_SIZE);\n\n    if (misterRamCartSaveArrayBuffer !== null) {\n      // We have only the ram cart data, so create a large mister file\n      return new MisterSegaCdSaveData(emptyInternalSaveBuffer, truncatedRawCartSaveArrayBuffer, Util.concatArrayBuffers([emptyInternalSaveBuffer, misterRamCartSaveArrayBuffer]));\n    }\n\n    // We were given neither an internal nor a ram cart save buffer, so return a small mister file\n    return new MisterSegaCdSaveData(emptyInternalSaveBuffer, SegaCdUtil.makeEmptySave(MisterSegaCdSaveData.RAM_CART_SIZE), emptyInternalSaveBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawInternalSaveArrayBuffer, rawCartSaveArrayBuffer, misterArrayBuffer) {\n    this.rawInternalSaveArrayBuffer = rawInternalSaveArrayBuffer;\n    this.rawCartSaveArrayBuffer = rawCartSaveArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer(index = MisterSegaCdSaveData.INTERNAL_MEMORY) {\n    switch (index) {\n      case MisterSegaCdSaveData.INTERNAL_MEMORY:\n        return this.rawInternalSaveArrayBuffer;\n\n      case MisterSegaCdSaveData.RAM_CART:\n        return this.rawCartSaveArrayBuffer;\n\n      default:\n        throw new Error(`Unknown index: ${index}`);\n    }\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/SegaSaturn.js",
    "content": "/*\nThe Saturn core on the MiSTer stores out regular Saturn BIOS files, except \"byte expanded\".\n\nThe cartridge memory is optionally appended to the internal memory -- the same as how the Sega CD\ndoes it: https://github.com/MiSTer-devel/Saturn_MiSTer/issues/283\n*/\n\nimport SegaSaturnSaveData from '../SegaSaturn/SegaSaturn';\nimport EmulatorSegaSaturnSaveData from '../SegaSaturn/Emulators/Emulators';\n\nimport GenesisUtil from '../../util/Genesis';\n\nimport Util from '../../util/util';\n\nconst MISTER_INTERNAL_SAVE_SIZE = SegaSaturnSaveData.INTERNAL_SAVE_SIZE * 2;\nconst MISTER_CARTRIDGE_SAVE_SIZE = SegaSaturnSaveData.CARTRIDGE_SAVE_SIZE * 2;\n\nconst MISTER_PADDING_VALUE = 0xFF;\n\nexport default class MisterSegaSaturnSaveData {\n  static INTERNAL_MEMORY = 'internal-memory';\n\n  static RAM_CART = 'ram-cart';\n\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension(saveType) {\n    return (saveType === 'internal-memory') ? 'bkr' : 'bcr';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null; // The internal and cart sizes are fixed\n  }\n\n  static createWithNewSize(/* misterSaveData, newSize */) {\n    /*\n    // Just leave the mister data alone: it can't load anything other than the original 512kB ram cart size.\n    // But other platforms/emulators may need a different ram cart size\n    const newRawCartArrayBuffer = SegaCdUtil.resize(misterSaveData.rawRamCartSaveArrayBuffer, newSize);\n\n    return new MisterSegaSaturnSaveData(misterSaveData.rawInternalSaveArrayBuffer, newRawRamCartArrayBuffer, misterSaveData.misterArrayBuffer);\n    */\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    // The file can be either just internal backup memory,\n    // or internal backup memory concatenated with cart backup memory\n\n    let internalArrayBuffer = misterArrayBuffer.slice(0, MISTER_INTERNAL_SAVE_SIZE);\n    let cartArrayBuffer = GenesisUtil.byteExpand(SegaSaturnSaveData.createEmptySave(SegaSaturnSaveData.CARTRIDGE_BLOCK_SIZE), MISTER_PADDING_VALUE);\n\n    if (misterArrayBuffer.byteLength === (MISTER_INTERNAL_SAVE_SIZE + MISTER_CARTRIDGE_SAVE_SIZE)) {\n      cartArrayBuffer = misterArrayBuffer.slice(MISTER_INTERNAL_SAVE_SIZE, MISTER_INTERNAL_SAVE_SIZE + MISTER_CARTRIDGE_SAVE_SIZE);\n    }\n\n    // With this core the file can contain garbage data in the \"expanded\" bytes, so testing with GenesisUtil.isByteExpanded()\n    // will give false negatives. Instead we just blindly byte collapse it and then test the format of the resultant file.\n    // Sega Saturn files have a distinct signature at the start of the file so this test should be sufficient.\n    internalArrayBuffer = GenesisUtil.byteCollapse(internalArrayBuffer);\n    cartArrayBuffer = GenesisUtil.byteCollapse(cartArrayBuffer);\n\n    if (!SegaSaturnSaveData.isCorrectlyFormatted(internalArrayBuffer) || !SegaSaturnSaveData.isCorrectlyFormatted(cartArrayBuffer)) {\n      throw new Error('This does not appear to be a MiSTer Sega Saturn save file');\n    }\n\n    return new MisterSegaSaturnSaveData(internalArrayBuffer, cartArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData({ rawInternalSaveArrayBuffer = null, rawCartSaveArrayBuffer = null }) {\n    // We can output either a large (64kB + 1024kB) save or a small (only 64kB) save depending on\n    // whether we're passed an internal save buffer and/or a ram cart save buffer.\n    // There are 4 cases, depending on which combination of raw file we are passed.\n\n    // Our raw files may come from an emulator, in which case they may come in some slightly diffently formats and we need to get the actual raw data\n\n    let actualRawInternalSaveArrayBuffer = null;\n    let actualRawCartSaveArrayBuffer = null;\n\n    if (rawInternalSaveArrayBuffer !== null) {\n      actualRawInternalSaveArrayBuffer = EmulatorSegaSaturnSaveData.createFromSegaSaturnData(rawInternalSaveArrayBuffer).getArrayBuffer();\n\n      if (actualRawInternalSaveArrayBuffer.byteLength !== SegaSaturnSaveData.INTERNAL_SAVE_SIZE) {\n        throw new Error('This does not appear to be an internal Sega Saturn save file');\n      }\n    }\n\n    if (rawCartSaveArrayBuffer !== null) {\n      actualRawCartSaveArrayBuffer = EmulatorSegaSaturnSaveData.createFromSegaSaturnData(rawCartSaveArrayBuffer).getArrayBuffer();\n\n      if (actualRawCartSaveArrayBuffer.byteLength !== SegaSaturnSaveData.CARTRIDGE_SAVE_SIZE) {\n        throw new Error('This does not appear to be a Sega Saturn cartridge save file');\n      }\n    }\n\n    // Now that we've got our pieces resized and ready, we can see what we've got and figure out\n    // whether to create a small or large mister file\n\n    const emptyInternalSaveBuffer = SegaSaturnSaveData.createEmptySave(SegaSaturnSaveData.INTERNAL_BLOCK_SIZE);\n    const emptyCartSaveBuffer = SegaSaturnSaveData.createEmptySave(SegaSaturnSaveData.CARTRIDGE_BLOCK_SIZE);\n\n    if (actualRawInternalSaveArrayBuffer !== null) {\n      if (actualRawCartSaveArrayBuffer !== null) {\n        // We have both pieces, so we're creating a large mister file\n        return new MisterSegaSaturnSaveData(\n          actualRawInternalSaveArrayBuffer,\n          actualRawCartSaveArrayBuffer,\n          GenesisUtil.byteExpand(Util.concatArrayBuffers([actualRawInternalSaveArrayBuffer, actualRawCartSaveArrayBuffer]), MISTER_PADDING_VALUE),\n        );\n      }\n\n      // We have the internal save data but not the ram cart save data, so create a small mister file\n      return new MisterSegaSaturnSaveData(\n        actualRawInternalSaveArrayBuffer,\n        emptyCartSaveBuffer,\n        GenesisUtil.byteExpand(actualRawInternalSaveArrayBuffer, MISTER_PADDING_VALUE),\n      );\n    }\n\n    // We don't have an internal save buffer\n    if (actualRawCartSaveArrayBuffer !== null) {\n      // We have only the ram cart data, so create a large mister file\n      return new MisterSegaSaturnSaveData(\n        emptyInternalSaveBuffer,\n        actualRawCartSaveArrayBuffer,\n        GenesisUtil.byteExpand(Util.concatArrayBuffers([emptyInternalSaveBuffer, actualRawCartSaveArrayBuffer]), MISTER_PADDING_VALUE),\n      );\n    }\n\n    // We were given neither an internal nor a ram cart save buffer, so return a small mister file\n    return new MisterSegaSaturnSaveData(\n      emptyInternalSaveBuffer,\n      emptyCartSaveBuffer,\n      GenesisUtil.byteExpand(emptyInternalSaveBuffer, MISTER_PADDING_VALUE),\n    );\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawInternalSaveArrayBuffer, rawCartSaveArrayBuffer, misterArrayBuffer) {\n    this.rawInternalSaveArrayBuffer = rawInternalSaveArrayBuffer;\n    this.rawCartSaveArrayBuffer = rawCartSaveArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer(index = MisterSegaSaturnSaveData.INTERNAL_MEMORY) {\n    switch (index) {\n      case MisterSegaSaturnSaveData.INTERNAL_MEMORY:\n        return this.rawInternalSaveArrayBuffer;\n\n      case MisterSegaSaturnSaveData.RAM_CART:\n        return this.rawCartSaveArrayBuffer;\n\n      default:\n        throw new Error(`Unknown index: ${index}`);\n    }\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/Sms.js",
    "content": "/*\nLooks to be similar to NES, as the MiSTer pads out the save to 32kB\n\nOpening one of these large MiSTerfiles in an emulator seems to work fine, but I don't think any of the test files I have actually\ncontain saved data so I can't be sure.\n*/\n\nimport PaddingUtil from '../../util/Padding';\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nconst MISTER_MINIMUM_FILE_SIZE = 32768;\nconst MISTER_PADDING_VALUE = 0x00;\n\nexport default class MisterSmsSaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'sms';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(misterSaveData.getRawArrayBuffer(), newSize);\n\n    return MisterSmsSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    // Just copy it straight over, because we don't know what size to truncate to: not all NES saves are 8kB\n    return new MisterSmsSaveData(misterArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    // Pad our file out to the minimum MiSTer size, just to be nice\n    return new MisterSmsSaveData(rawArrayBuffer, PaddingUtil.padAtEndToMinimumSize(rawArrayBuffer, MISTER_PADDING_VALUE, MISTER_MINIMUM_FILE_SIZE));\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/Snes.js",
    "content": "/*\nThe MiSTer saves SNES data as just the raw data of the correct size: no transformation or padding required\n*/\n\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class MisterSnesSaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'snes';\n  }\n\n  static createWithNewSize(misterSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(misterSaveData.getRawArrayBuffer(), newSize);\n\n    return MisterSnesSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    return new MisterSnesSaveData(misterArrayBuffer, misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new MisterSnesSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Mister/WonderSwan.js",
    "content": "/*\nThe MiSTer saves WonderSwan data with an extra sector of data at the end for realtime clock information\n\nSee https://github.com/MiSTer-devel/WonderSwan_MiSTer/issues/10 for more information\n*/\n\nimport PaddingUtil from '../../util/Padding';\nimport MathUtil from '../../util/Math';\n\nconst MISTER_REALTIME_CLOCK_SIZE = 0x200;\nconst MISTER_PADDING_VALUE = 0x00;\n\nfunction addUninitializedRealtimeClockData(inputArrayBuffer) {\n  const padding = {\n    value: MISTER_PADDING_VALUE,\n    count: MISTER_REALTIME_CLOCK_SIZE,\n  };\n\n  return PaddingUtil.addPaddingToEnd(inputArrayBuffer, padding);\n}\n\nfunction removeRealtimeClockData(inputArrayBuffer) {\n  if ((inputArrayBuffer.byteLength <= MISTER_REALTIME_CLOCK_SIZE) || !MathUtil.isPowerOf2(inputArrayBuffer.byteLength - MISTER_REALTIME_CLOCK_SIZE)) {\n    throw new Error('File does not appear to be in the MiSTer WonderSwan format');\n  }\n\n  return PaddingUtil.removePaddingFromEnd(inputArrayBuffer, MISTER_REALTIME_CLOCK_SIZE);\n}\n\nexport default class MisterWonderSwanSaveData {\n  static getMisterFileExtension() {\n    return 'sav';\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return null; // No way to write WonderSwan games to real carts that I'm aware of, so prob no need to be picky about sizes?\n  }\n\n  static createWithNewSize(misterSaveData) {\n    return misterSaveData;\n  }\n\n  static createFromMisterData(misterArrayBuffer) {\n    return new MisterWonderSwanSaveData(removeRealtimeClockData(misterArrayBuffer), misterArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    // Pad our file out for the MiSTer clock data, just to be nice\n    return new MisterWonderSwanSaveData(rawArrayBuffer, addUninitializedRealtimeClockData(rawArrayBuffer));\n  }\n\n  // This constructor creates a new object from a binary representation of a MiSTer save data file\n  constructor(rawArrayBuffer, misterArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.misterArrayBuffer = misterArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getMisterArrayBuffer() {\n    return this.misterArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/Components/Basics.js",
    "content": "import Util from '../../../util/util';\n\nexport default class N64Basics {\n  static LITTLE_ENDIAN = false;\n\n  static NUM_NOTES = 16; // A \"note\" is a save slot. It consists of >= 1 pages\n\n  static NUM_PAGES = 128;\n\n  static PAGE_SIZE = 256;\n\n  static TOTAL_MEMPACK_SIZE = N64Basics.NUM_PAGES * N64Basics.PAGE_SIZE;\n\n  static FIRST_SAVE_DATA_PAGE = 5;\n\n  static createEmptyBlock(size) {\n    return Util.getFilledArrayBuffer(size, 0x00);\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/Components/GameSerialCodeUtil.js",
    "content": "const GAME_SERIAL_CODE_MEDIA_INDEX = 0;\nconst GAME_SERIAL_CODE_REGION_INDEX = 3;\n\n// Taken from https://github.com/bryc/mempak/blob/master/js/codedb.js#L88\nconst REGION_CODE_TO_NAME = {\n  A: 'All regions',\n  B: 'Brazil', // Unlicensed?\n  C: 'China', // Unused?\n  D: 'Germany',\n  E: 'North America',\n  F: 'France',\n  G: 'Gateway 64 (NTSC)',\n  H: 'Netherlands', // Unused. GC/Wii only.\n  I: 'Italy',\n  J: 'Japan',\n  K: 'South Korea', // Unused. GC/Wii only.\n  L: 'Gateway 64 (PAL)',\n  P: 'Europe',\n  R: 'Russia', // Unused. Wii only.\n  S: 'Spain',\n  U: 'Australia', // Although some AU games used standard P codes.\n  W: 'Taiwan', // Unused. GC/Wii only.\n  X: 'Europe', // Alternative PAL version (Other languages)\n  Y: 'Europe', // Alternative PAL version (Other languages)\n  Z: 'Europe', // Unused. Alternative PAL version 3. Possibly Wii only.\n};\n\nconst GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE = '\\x3B\\xAD\\xD1\\xE5';\nconst GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE = '\\xFA\\xDE';\nconst BLACKBAG_CART_SAVE_GAME_SERIAL_CODE = '\\xDE\\xAD\\xBE\\xEF'; // #cute\nconst BLACKBAG_CART_SAVE_PUBLISHER_CODE = '\\x12\\x34'; // #cute\n\nexport default class N64GameSerialCodeUtil {\n  static GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE = GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE;\n\n  static GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE = GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE;\n\n  static GAMESHARK_ACTIONREPLAY_CART_SAVE_REGION_CODE = N64GameSerialCodeUtil.getRegionCode(GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE);\n\n  static GAMESHARK_ACTIONREPLAY_CART_SAVE_MEDIA_CODE = N64GameSerialCodeUtil.getMediaCode(GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE);\n\n  static BLACKBAG_CART_SAVE_GAME_SERIAL_CODE = BLACKBAG_CART_SAVE_GAME_SERIAL_CODE;\n\n  static BLACKBAG_CART_SAVE_PUBLISHER_CODE = BLACKBAG_CART_SAVE_PUBLISHER_CODE;\n\n  static BLACKBAG_CART_SAVE_REGION_CODE = N64GameSerialCodeUtil.getRegionCode(BLACKBAG_CART_SAVE_GAME_SERIAL_CODE);\n\n  static BLACKBAG_CART_SAVE_MEDIA_CODE = N64GameSerialCodeUtil.getMediaCode(BLACKBAG_CART_SAVE_GAME_SERIAL_CODE);\n\n  static getRegionCode(gameSerialCode) {\n    return gameSerialCode.charAt(GAME_SERIAL_CODE_REGION_INDEX);\n  }\n\n  static getMediaCode(gameSerialCode) {\n    return gameSerialCode.charAt(GAME_SERIAL_CODE_MEDIA_INDEX);\n  }\n\n  static getRegionName(gameSerialCode) {\n    const regionCode = N64GameSerialCodeUtil.getRegionCode(gameSerialCode);\n\n    if (regionCode in REGION_CODE_TO_NAME) {\n      return REGION_CODE_TO_NAME[regionCode];\n    }\n\n    return 'Unknown region';\n  }\n\n  static isCartSave(saveFile) {\n    return ((saveFile.gameSerialCode === GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE) || (saveFile.gameSerialCode === BLACKBAG_CART_SAVE_GAME_SERIAL_CODE));\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/Components/IdArea.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport Util from '../../../util/util';\n\nimport N64Basics from './Basics';\n\nconst {\n  LITTLE_ENDIAN,\n  PAGE_SIZE,\n} = N64Basics;\n\nconst ID_AREA_BLOCK_SIZE = 32;\nconst ID_AREA_CHECKSUM_OFFSETS = [0x20, 0x60, 0x80, 0xC0]; // 4 different checksum in the ID Area, and if any of them match then the data is deemed valid\nconst ID_AREA_CHECKSUM_LENGTH = 28;\nconst ID_AREA_DEVICE_OFFSET = 25;\nconst ID_AREA_BANK_SIZE_OFFSET = 26;\nconst ID_AREA_CHECKSUM_DESIRED_SUM_A_OFFSET = 28;\nconst ID_AREA_CHECKSUM_DESIRED_SUM_B_OFFSET = 30;\nconst DEVICE_CONTROLLER_PAK = 0x1;\nconst BANK_SIZE = 0x1;\n\nfunction randomByte(randomNumberGenerator = null) {\n  const rng = (randomNumberGenerator !== null) ? randomNumberGenerator : Math.random;\n\n  return 0 | rng() * 256;\n}\n\n// From https://github.com/bryc/mempak/blob/master/js/parser.js#L130\nfunction calculateChecksumsOfBlock(arrayBuffer) {\n  const dataView = new DataView(arrayBuffer);\n\n  let sumA = 0x0;\n  let sumB = 0xFFF2;\n\n  for (let i = 0; i < ID_AREA_CHECKSUM_LENGTH; i += 2) {\n    sumA += dataView.getUint16(i, LITTLE_ENDIAN);\n    sumA &= 0xFFFF;\n  }\n\n  sumB -= sumA;\n\n  return {\n    sumA,\n    sumB,\n  };\n}\n\nexport default class N64IdArea {\n  // Based on https://github.com/bryc/mempak/blob/master/js/state.js#L13\n  static createIdAreaPage(randomNumberGenerator = null) {\n    // This page is 4 copies of the same block at different offsets\n\n    const checksumBlock = new ArrayBuffer(ID_AREA_BLOCK_SIZE);\n    const checksumBlockDataView = new DataView(checksumBlock);\n\n    checksumBlockDataView.setUint8(1, randomByte(randomNumberGenerator) & 0x3F);\n    checksumBlockDataView.setUint8(5, randomByte(randomNumberGenerator) & 0x7);\n    checksumBlockDataView.setUint8(6, randomByte(randomNumberGenerator));\n    checksumBlockDataView.setUint8(7, randomByte(randomNumberGenerator));\n    checksumBlockDataView.setUint8(8, randomByte(randomNumberGenerator) & 0xF);\n    checksumBlockDataView.setUint8(9, randomByte(randomNumberGenerator));\n    checksumBlockDataView.setUint8(10, randomByte(randomNumberGenerator));\n    checksumBlockDataView.setUint8(11, randomByte(randomNumberGenerator));\n    checksumBlockDataView.setUint8(ID_AREA_DEVICE_OFFSET, DEVICE_CONTROLLER_PAK);\n    checksumBlockDataView.setUint8(ID_AREA_BANK_SIZE_OFFSET, BANK_SIZE);\n\n    const { sumA, sumB } = calculateChecksumsOfBlock(checksumBlock);\n\n    checksumBlockDataView.setUint16(ID_AREA_CHECKSUM_DESIRED_SUM_A_OFFSET, sumA, LITTLE_ENDIAN);\n    checksumBlockDataView.setUint16(ID_AREA_CHECKSUM_DESIRED_SUM_B_OFFSET, sumB, LITTLE_ENDIAN);\n\n    // Now we can make our empty page\n\n    let pageArrayBuffer = new ArrayBuffer(PAGE_SIZE);\n\n    pageArrayBuffer = Util.fillArrayBuffer(pageArrayBuffer, 0);\n\n    // Now copy our block to the various offsets it needs to be at\n\n    ID_AREA_CHECKSUM_OFFSETS.forEach((offset) => {\n      pageArrayBuffer = Util.setArrayBufferPortion(pageArrayBuffer, checksumBlock, offset, 0, ID_AREA_BLOCK_SIZE);\n    });\n\n    return pageArrayBuffer;\n  }\n\n  // Taken from https://github.com/bryc/mempak/blob/master/js/parser.js#L147\n  // Calculate checksums of 4 byte arrays and compare them against the checksum\n  // listed in the file. They're redundant, so if any are correct then the file\n  // is deems not corrupted.\n  static checkIdArea(arrayBuffer) {\n    let foundValidBlock = false;\n\n    const dataView = new DataView(arrayBuffer);\n\n    ID_AREA_CHECKSUM_OFFSETS.forEach((offset) => {\n      const block = arrayBuffer.slice(offset, offset + ID_AREA_BLOCK_SIZE);\n      const { sumA, sumB } = calculateChecksumsOfBlock(block);\n\n      const desiredSumA = dataView.getUint16(offset + ID_AREA_CHECKSUM_DESIRED_SUM_A_OFFSET, LITTLE_ENDIAN);\n      let desiredSumB = dataView.getUint16(offset + ID_AREA_CHECKSUM_DESIRED_SUM_B_OFFSET, LITTLE_ENDIAN);\n\n      // Find incorrect checksums found in many DexDrive files\n      // https://github.com/bryc/mempak/blob/master/js/parser.js#L127\n      if ((desiredSumB !== sumB) && ((desiredSumB ^ 0x0C) === sumB) && (desiredSumA === sumA)) {\n        desiredSumB ^= 0xC;\n      }\n\n      foundValidBlock = foundValidBlock || ((desiredSumA === sumA) && (desiredSumB === sumB));\n    });\n\n    if (!foundValidBlock) {\n      throw new Error('File appears to be corrupt - checksums in ID Area do not match');\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/Components/InodeTable.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport Util from '../../../util/util';\n\nimport N64Basics from './Basics';\n\nconst {\n  LITTLE_ENDIAN,\n  NUM_PAGES,\n  PAGE_SIZE,\n  FIRST_SAVE_DATA_PAGE,\n} = N64Basics;\n\nconst INODE_TABLE_ENTRY_STOP = 1;\nconst INODE_TABLE_ENTRY_EMPTY = 3;\n\nfunction setNextPageNumber(inodePageDataView, pageNumber, nextPageNumber) {\n  inodePageDataView.setUint16(pageNumber * 2, nextPageNumber, LITTLE_ENDIAN);\n}\n\nfunction getNextPageNumber(inodePageDataView, pageNumber) {\n  return inodePageDataView.getUint16(pageNumber * 2, LITTLE_ENDIAN);\n}\n\nexport default class N64InodeTable {\n  static INODE_TABLE_ENTRY_STOP = INODE_TABLE_ENTRY_STOP;\n\n  static getNextPageNumber(inodePageDataView, pageNumber) {\n    return getNextPageNumber(inodePageDataView, pageNumber);\n  }\n\n  static createInodeTablePage(saveFiles) {\n    // Here we can cheat a little and figure out what the linked list *would* look like if we actually\n    // split each file into chunks\n\n    let inodeTablePage = new ArrayBuffer(PAGE_SIZE);\n    const startingPages = [];\n\n    inodeTablePage = Util.fillArrayBuffer(inodeTablePage, 0);\n\n    const inodeTablePageDataView = new DataView(inodeTablePage);\n\n    let currentPage = FIRST_SAVE_DATA_PAGE;\n\n    saveFiles.forEach((saveFile) => {\n      startingPages.push(currentPage);\n\n      for (let currentByteInFile = 0; currentByteInFile < (saveFile.rawData.byteLength - PAGE_SIZE); currentByteInFile += PAGE_SIZE) {\n        setNextPageNumber(inodeTablePageDataView, currentPage, currentPage + 1);\n        currentPage += 1;\n      }\n\n      setNextPageNumber(inodeTablePageDataView, currentPage, INODE_TABLE_ENTRY_STOP);\n      currentPage += 1;\n    });\n\n    while (currentPage < NUM_PAGES) {\n      setNextPageNumber(inodeTablePageDataView, currentPage, INODE_TABLE_ENTRY_EMPTY);\n      currentPage += 1;\n    }\n\n    return {\n      inodeTablePage,\n      startingPages,\n    };\n  }\n\n  // Taken from https://github.com/bryc/mempak/blob/master/js/parser.js#L269\n  //\n  // The implementation there performs quite a number of consistency checks on this data, and if\n  // an anomoly is found then it switches to using the backup inode page. Because these checks therefore\n  // influence how the data is parsed, we'll replicate them here\n  static checkIndexes(inodeArrayBuffer, noteTableKeys) {\n    const inodePageDataView = new DataView(inodeArrayBuffer);\n\n    const found = {\n      parsed: [],\n      empty: [],\n      stops: [],\n      keys: [],\n      values: [],\n      duplicates: {},\n    };\n\n    // First, go through each entry and make sure that all the values are within range,\n    // and there are no duplicates\n\n    for (let currentPage = FIRST_SAVE_DATA_PAGE; currentPage < NUM_PAGES; currentPage += 1) {\n      const nextPage = getNextPageNumber(inodePageDataView, currentPage);\n\n      if (nextPage === INODE_TABLE_ENTRY_STOP) {\n        found.stops.push(currentPage);\n        found.keys.push(currentPage);\n      } else if (nextPage === INODE_TABLE_ENTRY_EMPTY) {\n        found.empty.push(currentPage);\n      } else if ((nextPage >= FIRST_SAVE_DATA_PAGE) && (nextPage < NUM_PAGES)) {\n        if (found.duplicates[nextPage]) {\n          throw new Error(`Found duplicate entries in inode table. Both ${found.duplicates[nextPage]} and ${currentPage} point to page ${nextPage}`);\n        }\n\n        found.values.push(nextPage);\n        found.keys.push(currentPage);\n        found.duplicates[nextPage] = currentPage;\n      } else {\n        throw new Error(`Inode table contains illegal value: ${nextPage} at page ${currentPage}`);\n      }\n    }\n\n    // Figure out which keys we found are ones that begin a sequence, and then compare this against\n    // what we found when parsing the note table. We should have found the same number of both\n    // start keys and stops in the inode table as we found start keys in the note table.\n\n    const startKeysFound = found.keys.filter((x) => !found.values.includes(x));\n\n    if ((noteTableKeys.length !== startKeysFound.length) || (noteTableKeys.length !== found.stops.length)) {\n      throw new Error(`Found ${noteTableKeys.length} starting keys in the note table, but found ${startKeysFound.length} starting keys and ${found.stops.length} stop keys in inode table`);\n    }\n\n    startKeysFound.forEach((x) => {\n      if (!noteTableKeys.includes(x)) {\n        throw new Error(`Found start key ${x} in inode table which doesn't exist in note table`);\n      }\n    });\n\n    // Get the index sequence for each note\n\n    const noteIndexes = {};\n    startKeysFound.forEach((startingPage) => {\n      const indexes = [startingPage];\n      let currentPage = startingPage;\n      let nextPage = getNextPageNumber(inodePageDataView, currentPage);\n\n      while (nextPage !== INODE_TABLE_ENTRY_STOP) { // We've already validated that all of these are >= FIRST_SAVE_DATA_PAGE and < NUM_PAGES\n        indexes.push(nextPage);\n        currentPage = nextPage;\n        nextPage = getNextPageNumber(inodePageDataView, currentPage);\n      }\n\n      noteIndexes[startingPage] = indexes;\n      found.parsed.push(...indexes);\n    });\n\n    // Check that we parsed and found the same number of keys\n    if (found.parsed.length !== found.keys.length) {\n      throw new Error(`We encountered ${found.parsed.length} keys when following the various index sequences, but found ${found.keys.length} keys when looking through the entire inode table.`);\n    }\n\n    // We've passed all of our validations, so the last remaining part is the checksums\n    // Apparently valid files can have invalid checksums, so we won't actually check the checksums\n    // For DexDrive files, we parse the file and then re-create it entirely to avoid having to fix these sorts of things manually\n\n    return noteIndexes;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/Components/NoteTable.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport Util from '../../../util/util';\n\nimport N64Basics from './Basics';\nimport N64InodeTable from './InodeTable';\nimport N64GameSerialCodeUtil from './GameSerialCodeUtil';\nimport N64TextDecoder from './TextDecoder';\n\nconst {\n  LITTLE_ENDIAN,\n  NUM_NOTES,\n  NUM_PAGES,\n  FIRST_SAVE_DATA_PAGE,\n} = N64Basics;\n\nconst NOTE_TABLE_BLOCK_SIZE = 32;\nconst NOTE_TABLE_GAME_SERIAL_CODE_OFFSET = 0;\nconst NOTE_TABLE_GAME_SERIAL_CODE_LENGTH = 4;\nconst NOTE_TABLE_PUBLISHER_CODE_OFFSET = 4;\nconst NOTE_TABLE_PUBLISHER_CODE_LENGTH = 2;\nconst NOTE_TABLE_STARTING_PAGE_OFFSET = 6;\nconst NOTE_TABLE_STATUS_OFFSET = 8;\nconst NOTE_TABLE_OCCUPIED_BIT = 0x2;\nconst NOTE_TABLE_UNUSED_OFFSET = 10;\nconst NOTE_TABLE_NOTE_NAME_EXTENSION_OFFSET = 12;\nconst NOTE_TABLE_NOTE_NAME_EXTENSION_LENGTH = 4;\nconst NOTE_TABLE_NOTE_NAME_OFFSET = 16;\nconst NOTE_TABLE_NOTE_NAME_LENGTH = 16;\n\nfunction decodeString(uint8Array) {\n  // These fixups are made to be compatible with the strings fed to https://github.com/bryc/mempak/blob/master/js/codedb.js\n  // in case we want to use those lookup tables.\n  // Note that there's only 1 code there (the publisher for Wave Race 64) that actually uses the - at this time,\n  // but may as well make the output here match exactly just in case.\n  const uint8ArrayFixup = uint8Array.slice();\n\n  const sum = uint8Array.reduce((accumulator, n) => accumulator + n, 0);\n\n  // These indicate that something was corrupted in the file and needs manual fixing\n  // This only seems to affect one entry: the publisher for Wave Race 64. We'll maintain this fixup for compatibility with https://github.com/bryc/mempak/blob/master/js/codedb.js\n  // FIXME: This repair only affects a copy of the data (a slice) and not the actual data written out\n  if (sum === 0) {\n    uint8ArrayFixup[uint8ArrayFixup.length - 1] |= 1;\n  }\n\n  return {\n    stringCode: String.fromCharCode(...uint8Array),\n    stringCodeFixup: String.fromCharCode(...uint8ArrayFixup).replace(/\\0/g, '-'),\n  };\n}\n\nfunction encodeString(string, encodedLength) {\n  const output = new Uint8Array(encodedLength);\n\n  output.fill(0);\n\n  for (let i = 0; i < string.length; i += 1) {\n    const charCode = string.charCodeAt(i);\n\n    output[i] = ((charCode <= 255) ? charCode : 0);\n  }\n\n  return output;\n}\n\nexport default class N64NoteTable {\n  static createNoteTablePage(saveFilesWithStartingPage) {\n    const noteBlocks = saveFilesWithStartingPage.map((saveFile) => {\n      const noteBlock = N64Basics.createEmptyBlock(NOTE_TABLE_BLOCK_SIZE);\n      const noteBlockDataView = new DataView(noteBlock);\n      const noteBlockArray = new Uint8Array(noteBlock);\n\n      const noteNameEncoded = N64TextDecoder.encode(saveFile.noteName, NOTE_TABLE_NOTE_NAME_LENGTH);\n      const noteNameExtensionEncoded = N64TextDecoder.encode(saveFile.noteNameExtension, NOTE_TABLE_NOTE_NAME_EXTENSION_LENGTH);\n\n      const gameSerialEncoded = encodeString(saveFile.gameSerialCode, NOTE_TABLE_GAME_SERIAL_CODE_LENGTH);\n      const publisherCodeEncoded = encodeString(saveFile.publisherCode, NOTE_TABLE_PUBLISHER_CODE_LENGTH);\n\n      noteBlockArray.set(gameSerialEncoded, NOTE_TABLE_GAME_SERIAL_CODE_OFFSET);\n      noteBlockArray.set(publisherCodeEncoded, NOTE_TABLE_PUBLISHER_CODE_OFFSET);\n\n      noteBlockDataView.setUint16(NOTE_TABLE_STARTING_PAGE_OFFSET, saveFile.startingPage, LITTLE_ENDIAN);\n\n      noteBlockArray[NOTE_TABLE_STATUS_OFFSET] = NOTE_TABLE_OCCUPIED_BIT;\n\n      noteBlockArray.set(noteNameEncoded, NOTE_TABLE_NOTE_NAME_OFFSET);\n      noteBlockArray.set(noteNameExtensionEncoded, NOTE_TABLE_NOTE_NAME_EXTENSION_OFFSET);\n\n      return noteBlock;\n    });\n\n    while (noteBlocks.length < NUM_NOTES) {\n      noteBlocks.push(N64Basics.createEmptyBlock(NOTE_TABLE_BLOCK_SIZE));\n    }\n\n    return Util.concatArrayBuffers(noteBlocks);\n  }\n\n  // Taken from https://github.com/bryc/mempak/blob/master/js/parser.js#L173\n  static readNoteTable(inodePageArrayBuffer, noteTableArrayBuffer) {\n    const noteKeys = [];\n    const notes = [];\n\n    const noteTableArray = new Uint8Array(noteTableArrayBuffer);\n\n    const noteTableDataView = new DataView(noteTableArrayBuffer);\n    const inodePageDataView = new DataView(inodePageArrayBuffer);\n\n    for (let currentByte = 0; currentByte < noteTableArrayBuffer.byteLength; currentByte += NOTE_TABLE_BLOCK_SIZE) {\n      const noteIndex = currentByte / NOTE_TABLE_BLOCK_SIZE;\n\n      const startingPage = noteTableDataView.getUint16(currentByte + NOTE_TABLE_STARTING_PAGE_OFFSET, LITTLE_ENDIAN);\n      const nextPage = N64InodeTable.getNextPageNumber(inodePageDataView, startingPage);\n\n      const firstPageValid = (startingPage >= FIRST_SAVE_DATA_PAGE) && (startingPage < NUM_PAGES);\n      const unusedBytesAreZero = (noteTableDataView.getUint16(currentByte + NOTE_TABLE_UNUSED_OFFSET, LITTLE_ENDIAN) === 0);\n      const nextPageValid = (nextPage === N64InodeTable.INODE_TABLE_ENTRY_STOP) || ((nextPage >= FIRST_SAVE_DATA_PAGE) && (nextPage < NUM_PAGES));\n\n      if (firstPageValid && unusedBytesAreZero && nextPageValid) {\n        noteKeys.push(startingPage);\n\n        const gameSerialCodeArray = noteTableArray.slice(currentByte + NOTE_TABLE_GAME_SERIAL_CODE_OFFSET, currentByte + NOTE_TABLE_GAME_SERIAL_CODE_OFFSET + NOTE_TABLE_GAME_SERIAL_CODE_LENGTH);\n        const publisherCodeArray = noteTableArray.slice(currentByte + NOTE_TABLE_PUBLISHER_CODE_OFFSET, currentByte + NOTE_TABLE_PUBLISHER_CODE_OFFSET + NOTE_TABLE_PUBLISHER_CODE_LENGTH);\n\n        const { stringCode: gameSerialCode, stringCodeFixup: gameSerialCodeFixup } = decodeString(gameSerialCodeArray);\n        const { stringCode: publisherCode, stringCodeFixup: publisherCodeFixup } = decodeString(publisherCodeArray);\n\n        const noteName = N64TextDecoder.decode(\n          noteTableArray.slice(\n            currentByte + NOTE_TABLE_NOTE_NAME_OFFSET,\n            currentByte + NOTE_TABLE_NOTE_NAME_OFFSET + NOTE_TABLE_NOTE_NAME_LENGTH,\n          ),\n        );\n\n        const noteNameExtension = N64TextDecoder.decode(\n          noteTableArray.slice(\n            currentByte + NOTE_TABLE_NOTE_NAME_EXTENSION_OFFSET,\n            currentByte + NOTE_TABLE_NOTE_NAME_EXTENSION_OFFSET + NOTE_TABLE_NOTE_NAME_EXTENSION_LENGTH,\n          ),\n        );\n\n        notes.push({\n          noteIndex,\n          startingPage,\n          gameSerialCode,\n          gameSerialCodeFixup,\n          publisherCode,\n          publisherCodeFixup,\n          noteName,\n          noteNameExtension,\n          region: N64GameSerialCodeUtil.getRegionCode(gameSerialCode),\n          regionName: N64GameSerialCodeUtil.getRegionName(gameSerialCode),\n          media: N64GameSerialCodeUtil.getMediaCode(gameSerialCode),\n        });\n      }\n    }\n\n    return {\n      noteKeys,\n      notes,\n    };\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/Components/TextDecoder.js",
    "content": "/* eslint-disable object-property-newline */\n\nimport { invert } from 'lodash-es';\n\n// The N64 uses a custom character encoding\n// Taken from https://github.com/bryc/mempak/blob/master/js/parser.js#L35\n// Also listed here: http://n64devkit.square7.ch/n64man/nos/nosLoadFont.htm\nconst CHARACTER_CODE_LOOKUP = {\n  0: '', 15: ' ', 16: '0',\n  17: '1', 18: '2', 19: '3', 20: '4',\n  21: '5', 22: '6', 23: '7', 24: '8',\n  25: '9', 26: 'A', 27: 'B', 28: 'C',\n  29: 'D', 30: 'E', 31: 'F', 32: 'G',\n  33: 'H', 34: 'I', 35: 'J', 36: 'K',\n  37: 'L', 38: 'M', 39: 'N', 40: 'O',\n  41: 'P', 42: 'Q', 43: 'R', 44: 'S',\n  45: 'T', 46: 'U', 47: 'V', 48: 'W',\n  49: 'X', 50: 'Y', 51: 'Z', 52: '!',\n  53: '\"', 54: '#', 55: '\\'', 56: '*',\n  57: '+', 58: ',', 59: '-', 60: '.',\n  61: '/', 62: ':', 63: '=', 64: '?',\n  65: '@', 66: '。', 67: '゛', 68: '゜',\n  69: 'ァ', 70: 'ィ', 71: 'ゥ', 72: 'ェ',\n  73: 'ォ', 74: 'ッ', 75: 'ャ', 76: 'ュ',\n  77: 'ョ', 78: 'ヲ', 79: 'ン', 80: 'ア',\n  81: 'イ', 82: 'ウ', 83: 'エ', 84: 'オ',\n  85: 'カ', 86: 'キ', 87: 'ク', 88: 'ケ',\n  89: 'コ', 90: 'サ', 91: 'シ', 92: 'ス',\n  93: 'セ', 94: 'ソ', 95: 'タ', 96: 'チ',\n  97: 'ツ', 98: 'テ', 99: 'ト', 100: 'ナ',\n  101: 'ニ', 102: 'ヌ', 103: 'ネ', 104: 'ノ',\n  105: 'ハ', 106: 'ヒ', 107: 'フ', 108: 'ヘ',\n  109: 'ホ', 110: 'マ', 111: 'ミ', 112: 'ム',\n  113: 'メ', 114: 'モ', 115: 'ヤ', 116: 'ユ',\n  117: 'ヨ', 118: 'ラ', 119: 'リ', 120: 'ル',\n  121: 'レ', 122: 'ロ', 123: 'ワ', 124: 'ガ',\n  125: 'ギ', 126: 'グ', 127: 'ゲ', 128: 'ゴ',\n  129: 'ザ', 130: 'ジ', 131: 'ズ', 132: 'ゼ',\n  133: 'ゾ', 134: 'ダ', 135: 'ヂ', 136: 'ヅ',\n  137: 'デ', 138: 'ド', 139: 'バ', 140: 'ビ',\n  141: 'ブ', 142: 'ベ', 143: 'ボ', 144: 'パ',\n  145: 'ピ', 146: 'プ', 147: 'ペ', 148: 'ポ',\n};\n\nconst CHARACTER_LOOKUP = invert(CHARACTER_CODE_LOOKUP);\n\nexport default class N64TextDecoder {\n  static decode(uint8array) {\n    let output = '';\n\n    for (let i = 0; i < uint8array.length; i += 1) {\n      const char = CHARACTER_CODE_LOOKUP[uint8array[i]];\n      output += (char || '');\n    }\n\n    return output;\n  }\n\n  static encode(string, encodedLength) {\n    const output = new Uint8Array(encodedLength);\n\n    output.fill(0);\n\n    for (let i = 0; i < Math.min(string.length, encodedLength); i += 1) {\n      const char = string.charAt(i);\n\n      if (char in CHARACTER_LOOKUP) {\n        output[i] = CHARACTER_LOOKUP[char];\n      } else {\n        output[i] = 0;\n      }\n    }\n\n    return output;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/DexDrive.js",
    "content": "/*\nThe DexDrive data format is described here:\nhttps://github.com/bryc/mempak/wiki/DexDrive-.N64-format\n\nIt is:\n- 4160 byte header:\n  - Magic\n  - Some unknown stuff. This unknown stuff seems inconsequential (see link above)\n  - A comment for each block\n- Normal N64 .MPK memory card data\n*/\n\nimport N64Basics from './Components/Basics';\nimport N64MempackSaveData from './Mempack';\nimport Util from '../../util/util';\n\nconst {\n  NUM_NOTES,\n  TOTAL_MEMPACK_SIZE,\n} = N64Basics;\n\n// DexDrive header\n\nconst HEADER_LENGTH = 4160;\n\nconst HEADER_MAGIC = '123-456-STD';\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst COMMENT_ENCODING = 'US-ASCII';\nconst FIRST_COMMENT_OFFSET = 64;\nconst COMMENT_LENGTH = 256;\n\nfunction getCommentStartOffset(i) {\n  return FIRST_COMMENT_OFFSET + (i * COMMENT_LENGTH);\n}\n\nfunction getComments(headerArrayBuffer) {\n  const comments = [];\n  const textDecoder = new TextDecoder(COMMENT_ENCODING);\n\n  for (let i = 0; i < NUM_NOTES; i += 1) {\n    const commentStartOffset = getCommentStartOffset(i);\n    const commentArrayBuffer = headerArrayBuffer.slice(commentStartOffset, commentStartOffset + COMMENT_LENGTH);\n\n    comments.push(Util.trimNull(textDecoder.decode(commentArrayBuffer)).trim());\n  }\n\n  return comments;\n}\n\nexport default class N64DexDriveSaveData {\n  static createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator = null) {\n    return new N64DexDriveSaveData(dexDriveArrayBuffer, randomNumberGenerator);\n  }\n\n  static createFromSaveFiles(saveFiles, randomNumberGenerator = null) {\n    // The DexDrive image is the DexDrive header then the regular mempack data\n\n    const mempackSaveData = N64MempackSaveData.createFromSaveFiles(saveFiles, randomNumberGenerator);\n\n    const headerArrayBuffer = new ArrayBuffer(HEADER_LENGTH);\n    const headerArray = new Uint8Array(headerArrayBuffer);\n\n    const magicTextEncoder = new TextEncoder(MAGIC_ENCODING);\n    const commentTextEncoder = new TextEncoder(COMMENT_ENCODING);\n\n    // Fill in our magic\n\n    headerArray.fill(0);\n    headerArray.set(magicTextEncoder.encode(HEADER_MAGIC), 0);\n\n    // Make an array of our comments, arranged by the starting block of each save\n\n    const comments = Array.from({ length: NUM_NOTES }, () => null);\n\n    const mempackSaveDataFilesWithComments = mempackSaveData.getSaveFiles().map((file, i) => ({ ...file, comment: saveFiles[i].comment })); // Our list of save files from the memcard data is in the same order as the files were passed in\n\n    mempackSaveDataFilesWithComments.forEach((file) => { comments[file.noteIndex] = file.comment; });\n\n    for (let i = 0; i < NUM_NOTES; i += 1) {\n      if (comments[i] !== null) {\n        const encodedComment = commentTextEncoder.encode(comments[i]).slice(0, COMMENT_LENGTH);\n\n        headerArray.set(encodedComment, getCommentStartOffset(i));\n      }\n    }\n\n    // Now that we've created our DexDrive header, we can create our final memory image. We'll parse it again\n    // to pull out the file descriptions\n\n    const finalArrayBuffer = Util.concatArrayBuffers([headerArrayBuffer, mempackSaveData.getArrayBuffer()]);\n\n    return N64DexDriveSaveData.createFromDexDriveData(finalArrayBuffer, randomNumberGenerator);\n  }\n\n  // This constructor creates a new object from a binary representation of a DexDrive save data file\n  constructor(arrayBuffer, randomNumberGenerator = null) {\n    this.arrayBuffer = arrayBuffer;\n\n    // Parse the DexDrive-specific header: magic and comments\n\n    let dexDriveHeaderArrayBuffer = arrayBuffer.slice(0, HEADER_LENGTH);\n    let mempackArrayBuffer = arrayBuffer.slice(HEADER_LENGTH); // The remainder of the file is the actual contents of the memory card\n\n    try {\n      Util.checkMagic(dexDriveHeaderArrayBuffer, 0, HEADER_MAGIC, MAGIC_ENCODING);\n    } catch (e) {\n      if (arrayBuffer.byteLength === TOTAL_MEMPACK_SIZE) {\n        // Some files, found on gamefaqs primarily, are labeled as being dexdrive but are actually\n        // raw memcard images. This is likely due to gamefaqs' policy of only allowing \"legitimate\" saves\n        // and not those that could have come from an emulator.\n        dexDriveHeaderArrayBuffer = Util.getFilledArrayBuffer(HEADER_LENGTH, 0x00);\n        mempackArrayBuffer = arrayBuffer;\n      } else if (arrayBuffer.byteLength !== (HEADER_LENGTH + TOTAL_MEMPACK_SIZE)) {\n        // For some files found on the Internet they just contain a completely blank header. Not sure what\n        // program makes them. But they're parseable by the rest of the code here even though they don't\n        // contain the correct magic\n        throw new Error('This does not appear to be a N64 DexDrive file');\n      }\n    }\n\n    const comments = getComments(dexDriveHeaderArrayBuffer);\n\n    // Parse the rest of the file\n\n    const mempack = N64MempackSaveData.createFromN64MempackData(mempackArrayBuffer);\n\n    // Add in the comments we found in the header\n    this.saveFiles = mempack.getSaveFiles().map((x) => ({ ...x, comment: comments[x.noteIndex] }));\n    this.mempack = N64MempackSaveData.createFromSaveFiles(this.saveFiles, randomNumberGenerator); // Re-create our memory pack image from scratch because many dexdrive files found in the wild are seen as corrupt when loaded in game\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getMempack() {\n    return this.mempack;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/IndividualSaveFilename.js",
    "content": "import Util from '../../util/util';\nimport N64Util from '../../util/N64';\n\nimport N64GameSerialCodeUtil from './Components/GameSerialCodeUtil';\n\nconst FILENAME_ENCODING = 'utf8'; // Encoding to use when creating a filename for an individual note\n\nfunction parseNoteNameAndExtension(noteNameAndExtension) {\n  // Here we are going to assume that if there's one . then it's intended to split the name from the extension (e.g. \"T2-WAREHOUSE.P\" for Tony Hawk)\n  // and if there are 0 or > 1 .'s then it's just all the filename (e.g. \"S.F. RUSH\" for San Francisco Rush)\n\n  const noteNameAndExtensionParts = noteNameAndExtension.split('.');\n\n  let noteName = noteNameAndExtension;\n  let noteNameExtension = '';\n\n  if (noteNameAndExtensionParts.length === 2) {\n    [noteName, noteNameExtension] = noteNameAndExtensionParts;\n  }\n\n  return {\n    noteName,\n    noteNameExtension,\n  };\n}\n\nexport default class N64IndividualSaveFilename {\n  static getDisplayName(saveFile) {\n    if (saveFile.noteNameExtension.length > 0) {\n      return `${saveFile.noteName}.${saveFile.noteNameExtension}`;\n    }\n\n    return saveFile.noteName;\n  }\n\n  static createFilename(saveFile) {\n    if (N64GameSerialCodeUtil.isCartSave(saveFile)) {\n      // Here we want to make a user-friendly name, meaning having the correct extension for an emulator to load\n\n      // NOTE: if we get into trouble again here with having a . in between the note name and the note name extension,\n      // we'll again need to deal with the issue of users having legacy filenames on their machines\n\n      return `${N64IndividualSaveFilename.getDisplayName(saveFile)}.${N64Util.getFileExtension(saveFile.rawData)}`; // It's always going to be .eep because that's all that can fit in a mempack image: the next size up is the size of an entire mempack, which doesn't leave room for the system information\n    }\n\n    // We need to encode all the stuff that goes into the note table into our file name.\n    // Some of these portions can contain non-ASCII characters (For example, the publisher\n    // code can be 0x0000), so encoding it as hex makes for an easy (if long) filename.\n\n    const noteNameEncoded = Buffer.from(saveFile.noteName, FILENAME_ENCODING).toString('hex');\n    const noteNameExtensionEncoded = Buffer.from(saveFile.noteNameExtension, FILENAME_ENCODING).toString('hex');\n    const gameSerialCodeEncoded = Buffer.from(saveFile.gameSerialCode, FILENAME_ENCODING).toString('hex');\n    const publisherCodeEncoded = Buffer.from(saveFile.publisherCode, FILENAME_ENCODING).toString('hex');\n\n    return `RAW-${noteNameEncoded}-${noteNameExtensionEncoded}-${gameSerialCodeEncoded}-${publisherCodeEncoded}`;\n  }\n\n  static parseFilename(filename) {\n    if (filename.startsWith('RAW-')) {\n      const filenamePortions = filename.split('-');\n\n      // We originally had a bug where the notename was encoded as \"<notename>.<notenameextension>\" which caused issues\n      // when the notename itself had a . in it, such as \"S.F. Rush\". Users may have legacy filenames on their system, and\n      // so we have to support either the old format or the new format\n\n      try {\n        if (filenamePortions.length === 4) {\n          // Old style\n\n          const noteNameAndExtension = Buffer.from(filenamePortions[1], 'hex').toString(FILENAME_ENCODING);\n          const gameSerialCode = Buffer.from(filenamePortions[2], 'hex').toString(FILENAME_ENCODING);\n          const publisherCode = Buffer.from(filenamePortions[3], 'hex').toString(FILENAME_ENCODING);\n\n          const { noteName, noteNameExtension } = parseNoteNameAndExtension(noteNameAndExtension);\n\n          return {\n            noteName,\n            noteNameExtension,\n            gameSerialCode,\n            publisherCode,\n          };\n        }\n\n        if (filenamePortions.length === 5) {\n          // New style\n\n          const noteName = Buffer.from(filenamePortions[1], 'hex').toString(FILENAME_ENCODING);\n          const noteNameExtension = Buffer.from(filenamePortions[2], 'hex').toString(FILENAME_ENCODING);\n          const gameSerialCode = Buffer.from(filenamePortions[3], 'hex').toString(FILENAME_ENCODING);\n          const publisherCode = Buffer.from(filenamePortions[4], 'hex').toString(FILENAME_ENCODING);\n\n          return {\n            noteName,\n            noteNameExtension,\n            gameSerialCode,\n            publisherCode,\n          };\n        }\n\n        throw new Error('Wrong number of parts in filename');\n      } catch (e) {\n        throw new Error('Filename not in correct format. Format should be \\'RAW-XXXX-XXXX-XXXX\\' or \\'RAW-XXXX-XXXX-XXXX-XXXX\\'');\n      }\n    } else {\n      // Otherwise, we have to assume it's a cart save. So, it could set its game/publisher code to\n      // be either Gameshark or Black Bag. The Black Bag file manager is I believe a defunct program\n      // that ran on individual computers, and would be hard for most people to get running on their\n      // modern machines. Whereas if we assign it to Gameshark, then someone could use the Gameshark\n      // hardware to load it onto a real cart, regardless of whether the file was originally from\n      // the Black Bag software.\n      //\n      // So, we'll just assign everything to Gameshark\n\n      const noteNameAndExtension = Util.removeFilenameExtension(filename).trim().toUpperCase(); // There's no lower case arabic characters in the N64 text encoding\n\n      const { noteName, noteNameExtension } = parseNoteNameAndExtension(noteNameAndExtension);\n\n      return {\n        noteName,\n        noteNameExtension,\n        gameSerialCode: N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE,\n        publisherCode: N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE,\n      };\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/N64/Mempack.js",
    "content": "/* eslint no-bitwise: ['error', { 'allow': ['&', '|', '^', '&=', '^=', '|='] }] */\n\n/*\nThe N64 mempack format is described here:\nhttps://github.com/bryc/mempak/wiki/MemPak-structure\n\nThe first 5 pages are header information.\nPage 0: ID area, containing checksums\nPage 1: \"Inode\" (index) information\nPage 2: Repeat of page 1\nPage 3, 4: Note table\n\nThe subsequent 123 pages are the actual save data\n*/\n\nimport Util from '../../util/util';\n\nimport N64Basics from './Components/Basics';\nimport N64IdArea from './Components/IdArea';\nimport N64InodeTable from './Components/InodeTable';\nimport N64NoteTable from './Components/NoteTable';\nimport N64GameSerialCodeUtil from './Components/GameSerialCodeUtil';\nimport N64IndividualSaveFilename from './IndividualSaveFilename';\n\nconst {\n  NUM_NOTES,\n  NUM_PAGES,\n  PAGE_SIZE,\n  FIRST_SAVE_DATA_PAGE,\n} = N64Basics;\n\n// The first 5 pages are special header info\nconst ID_AREA_PAGE = 0;\nconst INODE_TABLE_PAGE = 1;\nconst INODE_TABLE_BACKUP_PAGE = 2; // Page 2 is a repeat of page 1, checked in case we encounter corruption of page 1\nconst NOTE_TABLE_PAGES = [3, 4];\n\nconst MAX_DATA_SIZE = (NUM_PAGES - FIRST_SAVE_DATA_PAGE) * PAGE_SIZE;\n\n// Using various cheating devices, it's possible to copy a save stored on a cartridge onto\n// a controller pak. There are many potential cart save sizes (see http://micro-64.com/database/gamesave.shtml),\n// but only the ones below will fit onto a controller pak: the next size up (32768 bytes) doesn't fit because of the 5\n// pages taken up by system infomation.\n//\n// For some/all of these devices they apparently will skip pages at the end that are filled with padding, meaning\n// that we should pad out any cart saves that we encounter to be one of these sizes. Some emulators will take an\n// unpadded file just fine, but apparently others won't like it.\n\nconst CART_SAVE_SIZES = [\n  512,\n  2048,\n];\n\nfunction getPage(pageNumber, arrayBuffer) {\n  const offset = pageNumber * PAGE_SIZE;\n  return arrayBuffer.slice(offset, offset + PAGE_SIZE);\n}\n\nfunction concatPages(pageNumbers, arrayBuffer) {\n  const pages = pageNumbers.map((i) => getPage(i, arrayBuffer));\n  return Util.concatArrayBuffers(pages);\n}\n\n// See comments above: cart saves can be stored in a controller pak file, but the cheat\n// devices used to do so may truncate the file to eliminate portions that are all padding.\n// We'll add that padding back for better compatibility with emulators.\nfunction padCartSave(saveFile) {\n  if (!N64GameSerialCodeUtil.isCartSave(saveFile)) { /* eslint-disable-line no-use-before-define */\n    return saveFile;\n  }\n\n  for (let i = 0; i < CART_SAVE_SIZES.length; i += 1) {\n    if (CART_SAVE_SIZES[i] === saveFile.rawData.byteLength) {\n      return saveFile;\n    }\n\n    if (CART_SAVE_SIZES[i] > saveFile.rawData.byteLength) {\n      let paddedRawData = saveFile.rawData;\n\n      while (paddedRawData.byteLength < CART_SAVE_SIZES[i]) {\n        paddedRawData = Util.concatArrayBuffers([paddedRawData, N64Basics.createEmptyBlock(PAGE_SIZE)]);\n      }\n\n      return {\n        ...saveFile,\n        rawData: paddedRawData,\n      };\n    }\n  }\n\n  return saveFile;\n}\n\nexport default class N64MempackSaveData {\n  static createFromN64MempackData(mempackArrayBuffer) {\n    return new N64MempackSaveData(mempackArrayBuffer);\n  }\n\n  static createFromSaveFiles(saveFiles, randomNumberGenerator = null) {\n    // Check to make sure that there's not too many save files, or too much data, or save files the wrong length\n\n    if (saveFiles.length > NUM_NOTES) {\n      throw new Error(`Found ${saveFiles.length} notes, but max is ${NUM_NOTES}`);\n    }\n\n    const totalSize = saveFiles.reduce((accumulator, x) => accumulator + x.rawData.byteLength, 0);\n\n    if (totalSize > MAX_DATA_SIZE) {\n      throw new Error(`These files are too large to fit in a single N64 Controller Pak: total size is ${totalSize} bytes, but max is ${MAX_DATA_SIZE}`);\n    }\n\n    saveFiles.forEach((x) => {\n      if (x.rawData.byteLength === 0) {\n        throw new Error(`Save file ${x.noteNate} does not contain any data`);\n      }\n\n      if (x.rawData.byteLength % PAGE_SIZE !== 0) {\n        throw new Error(`All saves must be multiples of ${PAGE_SIZE} bytes, but save '${N64IndividualSaveFilename.getDisplayName(x)}' is ${x.rawData.byteLength} bytes`);\n      }\n    });\n\n    // Now make our header pages\n\n    const idAreaPage = N64IdArea.createIdAreaPage(randomNumberGenerator);\n    const { inodeTablePage, startingPages } = N64InodeTable.createInodeTablePage(saveFiles);\n\n    const saveFilesWithStartingPage = saveFiles.map((x, i) => ({ ...x, startingPage: startingPages[i] }));\n\n    const noteTablePage = N64NoteTable.createNoteTablePage(saveFilesWithStartingPage);\n\n    // Technically, we should split each save into separate pages, then concat all 128 pages together to get the final\n    // arraybuffer. But, we can cheat and just concat the existing saves together instead of splitting them apart first\n\n    let dataPages = Util.concatArrayBuffers(saveFiles.map((x) => x.rawData));\n\n    while (dataPages.byteLength < MAX_DATA_SIZE) {\n      dataPages = Util.concatArrayBuffers([dataPages, N64Basics.createEmptyBlock(PAGE_SIZE)]);\n    }\n\n    const arrayBuffer = Util.concatArrayBuffers([idAreaPage, inodeTablePage, inodeTablePage, noteTablePage, dataPages]);\n\n    return new N64MempackSaveData(arrayBuffer);\n  }\n\n  constructor(mempackArrayBuffer) {\n    this.arrayBuffer = mempackArrayBuffer;\n\n    // There are 5 pages of header information, then the rest are game save data\n\n    // The first page, the ID Area, is a series of checksums plus some other stuff we'll ignore\n    N64IdArea.checkIdArea(getPage(ID_AREA_PAGE, mempackArrayBuffer));\n\n    // Now, check the note table\n    const inodeArrayBuffer = getPage(INODE_TABLE_PAGE, mempackArrayBuffer);\n    const inodeBackupArrayBuffer = getPage(INODE_TABLE_BACKUP_PAGE, mempackArrayBuffer);\n    const noteTableArrayBuffer = concatPages(NOTE_TABLE_PAGES, mempackArrayBuffer);\n\n    const noteInfo = N64NoteTable.readNoteTable(inodeArrayBuffer, noteTableArrayBuffer);\n    let noteIndexes = {};\n\n    try {\n      noteIndexes = N64InodeTable.checkIndexes(inodeArrayBuffer, noteInfo.noteKeys);\n    } catch (e) {\n      // If we encounter something that appears to be corrupted in the main inode table, then\n      // try again with the backup table\n      try {\n        noteIndexes = N64InodeTable.checkIndexes(inodeBackupArrayBuffer, noteInfo.noteKeys);\n      } catch (e2) {\n        throw new Error('Both primary and backup inode tables appear to be corrupted. Error from backup table follows', { cause: e2 });\n      }\n    }\n\n    const saveFiles = noteInfo.notes.map((x) => ({\n      ...x,\n      pageNumbers: noteIndexes[x.startingPage],\n      rawData: concatPages(noteIndexes[x.startingPage], mempackArrayBuffer),\n    }));\n\n    this.saveFiles = saveFiles.map((x) => padCartSave(x));\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/NintendoSwitchOnline/Gameboy.js",
    "content": "/*\nThe Nintendo Switch Online save format for Gameboy games is the similar to its format for NES except that there's 2 hashes:\none for the ROM used and the other for the save data itself\n\nThere may or may not be RTC data present in the header\n\n0x00: Magic 1: \"SRAM\" + 0x03\n0x08: Encoded SHA-1 hash of the ROM\n0x30: Length of git revision number in bytes\n0x34: Git revision number: \"HEAD-vXXX.X\", or \"master-vXXX.X\", or \"HEAD-vXXX.X-X-XXXXXXXXX\"\n\nThe rest isn't at fixed offsets:\n\n1 byte indicating whether RTC data is present\n(optional) 0x20 bytes of RTC data\n0x28 bytes of encoded SHA-1 hash of the raw save data\nRaw save data\n\nIt appears there's at least 6 versions of the git revision number:\n- HEAD-v178.0 (the initial batch of NSO games)\n- HEAD-v184.0 (Kirby's Dreamland 2)\n- HEAD-v203.0 (Spanish versions of Pokemon Red/Blue/Yellow/Gold/Silver/Crystal)\n- HEAD-v213.0-1-g59d2e63b (Europe version of Pokemon TCG)\n- master-v196.0 (Pokemon TCG)\n- master-v199.0 (Pokemon - Crystal Version)\n*/\n\nimport SaveFilesUtil from '../../util/SaveFiles';\nimport Util from '../../util/util';\nimport HashUtil from '../../util/Hash';\n\nconst MAGIC_OFFSET = 0;\nconst MAGIC = [0x53, 0x52, 0x41, 0x4D, 0x03]; // 'SRAM';\n\nconst ROM_HASH_OFFSET = 0x08;\n\nconst HASH_ALGORITHM = 'sha1';\nconst HASH_LENGTH = 0x28; // The SHA-1 digest is converted to hex and encoded as ASCII\nconst HASH_ENCODING = 'US-ASCII';\n\nconst GIT_REVISION_NUMBER_LENGTH_OFFSET = 0x30;\nconst GIT_REVISION_NUMBER_OFFSET = 0x34;\n\n// This is likely RTC data (it's found in Pokemon Gold/Silver/Crystal and not in Pokemon Red/Blue/Yellow)\nconst NO_RTC_DATA = 0x00;\nconst HAS_RTC_DATA = 0x01;\nconst HAS_RTC_DATA_POTENTIAL_VALUES = [NO_RTC_DATA, HAS_RTC_DATA];\nconst RTC_DATA_LENGTH = 0x20;\n\nconst HEADER_FILL_VALUE = 0x00; // There are some misc 0x00 bytes after the magics\n\nfunction getFileInfo(nsoArrayBuffer) {\n  // First, get the git revision number\n\n  const nsoDataView = new DataView(nsoArrayBuffer);\n  const gitRevisionNumberLength = nsoDataView.getUint8(GIT_REVISION_NUMBER_LENGTH_OFFSET);\n  const gitRevisionNumberArrayBuffer = nsoArrayBuffer.slice(GIT_REVISION_NUMBER_OFFSET, GIT_REVISION_NUMBER_OFFSET + gitRevisionNumberLength);\n\n  // Now we need to look for potential RTC data\n\n  const hasRtcDataOffset = GIT_REVISION_NUMBER_OFFSET + gitRevisionNumberLength;\n  const hasRtcData = nsoDataView.getUint8(hasRtcDataOffset);\n\n  if (HAS_RTC_DATA_POTENTIAL_VALUES.indexOf(hasRtcData) < 0) {\n    throw new Error('This does not appear to be a Nintendo Switch Online Gameboy save file');\n  }\n\n  let rtcDataArrayBuffer = null;\n  let saveDataHashOffset = hasRtcDataOffset + 1;\n\n  if (hasRtcData === HAS_RTC_DATA) {\n    rtcDataArrayBuffer = nsoArrayBuffer.slice(hasRtcDataOffset + 1, hasRtcDataOffset + 1 + RTC_DATA_LENGTH);\n    saveDataHashOffset += RTC_DATA_LENGTH;\n  }\n\n  return {\n    gitRevisionNumberArrayBuffer,\n    rtcDataArrayBuffer,\n    saveDataHashOffset,\n    dataBeginOffset: saveDataHashOffset + HASH_LENGTH,\n  };\n}\n\nexport default class NsoGameboySaveData {\n  static getNsoFileExtension() {\n    return 'sram';\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gb';\n  }\n\n  static nsoDataRequiresRomInfo() {\n    return true;\n  }\n\n  static createWithNewSize(nsoSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(nsoSaveData.getRawArrayBuffer(), newSize);\n\n    return NsoGameboySaveData.createFromRawData(newRawSaveData, nsoSaveData.getEncodedRomHash(), nsoSaveData.getEncodedVersion(), nsoSaveData.getUnknownData(), nsoSaveData.getFileFormat());\n  }\n\n  static createFromNsoData(nsoArrayBuffer) {\n    Util.checkMagicBytes(nsoArrayBuffer, MAGIC_OFFSET, MAGIC);\n\n    const fileInfo = getFileInfo(nsoArrayBuffer);\n\n    const romHashArrayBuffer = nsoArrayBuffer.slice(ROM_HASH_OFFSET, ROM_HASH_OFFSET + HASH_LENGTH);\n\n    return new NsoGameboySaveData(nsoArrayBuffer.slice(fileInfo.dataBeginOffset), nsoArrayBuffer, romHashArrayBuffer, fileInfo.gitRevisionNumberArrayBuffer, fileInfo.rtcDataArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer, romHashArrayBuffer, gitRevisionNumberArrayBuffer, rtcDataArrayBuffer) {\n    const rtcDataLength = (rtcDataArrayBuffer !== null) ? rtcDataArrayBuffer.byteLength : 0;\n    const hasRtcDataOffset = GIT_REVISION_NUMBER_OFFSET + gitRevisionNumberArrayBuffer.byteLength;\n    const rtcDataOffset = hasRtcDataOffset + 1;\n    const saveDataHashOffset = rtcDataOffset + rtcDataLength;\n    const headerLength = saveDataHashOffset + HASH_LENGTH;\n\n    let headerArrayBuffer = Util.getFilledArrayBuffer(headerLength, HEADER_FILL_VALUE);\n\n    const headerDataView = new DataView(headerArrayBuffer);\n\n    // We can't interleave these line with lines that mess with headerArrayBuffer below, otherwise this change gets stomped\n    headerDataView.setUint8(GIT_REVISION_NUMBER_LENGTH_OFFSET, gitRevisionNumberArrayBuffer.byteLength);\n    headerDataView.setUint8(hasRtcDataOffset, (rtcDataArrayBuffer !== null) ? HAS_RTC_DATA : NO_RTC_DATA);\n\n    headerArrayBuffer = Util.setMagicBytes(headerArrayBuffer, MAGIC_OFFSET, MAGIC);\n    headerArrayBuffer = Util.setArrayBufferPortion(headerArrayBuffer, romHashArrayBuffer, ROM_HASH_OFFSET, 0, HASH_LENGTH);\n    headerArrayBuffer = Util.setArrayBufferPortion(headerArrayBuffer, gitRevisionNumberArrayBuffer, GIT_REVISION_NUMBER_OFFSET, 0, gitRevisionNumberArrayBuffer.byteLength);\n\n    if (rtcDataLength > 0) {\n      headerArrayBuffer = Util.setArrayBufferPortion(headerArrayBuffer, rtcDataArrayBuffer, rtcDataOffset, 0, rtcDataArrayBuffer.byteLength);\n    }\n\n    const encodedSaveDataHashArrayBuffer = HashUtil.getEncodedHash(rawArrayBuffer, HASH_ALGORITHM, HASH_ENCODING);\n\n    headerArrayBuffer = Util.setArrayBufferPortion(headerArrayBuffer, encodedSaveDataHashArrayBuffer, saveDataHashOffset, 0, HASH_LENGTH);\n\n    const nsoArrayBuffer = Util.concatArrayBuffers([headerArrayBuffer, rawArrayBuffer]);\n\n    return new NsoGameboySaveData(rawArrayBuffer, nsoArrayBuffer, romHashArrayBuffer, gitRevisionNumberArrayBuffer, rtcDataArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a NSO save data file\n  constructor(rawArrayBuffer, nsoArrayBuffer, romHashArrayBuffer, gitRevisionNumberArrayBuffer, rtcDataArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.nsoArrayBuffer = nsoArrayBuffer;\n    this.romHashArrayBuffer = romHashArrayBuffer;\n    this.gitRevisionNumberArrayBuffer = gitRevisionNumberArrayBuffer;\n    this.rtcDataArrayBuffer = rtcDataArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getNsoArrayBuffer() {\n    return this.nsoArrayBuffer;\n  }\n\n  getRomHashArrayBuffer() {\n    return this.romHashArrayBuffer;\n  }\n\n  getGitRevisionNumberArrayBuffer() {\n    return this.gitRevisionNumberArrayBuffer;\n  }\n\n  getRtcDataArrayBuffer() {\n    return this.rtcDataArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/NintendoSwitchOnline/GameboyAdvance.js",
    "content": "// GBA saves on NSO are just raw files\n\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class GbaNsoSaveData {\n  static createFromNsoData(nsoArrayBuffer) {\n    return new GbaNsoSaveData(nsoArrayBuffer, nsoArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new GbaNsoSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(nsoSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(nsoSaveData.getRawArrayBuffer(), newSize);\n\n    return GbaNsoSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getNsoFileExtension() {\n    return 'sram';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gba';\n  }\n\n  static nsoDataRequiresRomInfo() {\n    return false;\n  }\n\n  constructor(nsoArrayBuffer, rawArrayBuffer) {\n    this.nsoArrayBuffer = nsoArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getNsoArrayBuffer() {\n    return this.nsoArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/NintendoSwitchOnline/Genesis.js",
    "content": "// Genesis files on NSO are not byte-expanded like other emulators\n\nimport SaveFilesUtil from '../../util/SaveFiles';\nimport GenesisUtil from '../../util/Genesis';\n\nconst EMULATOR_BYTE_EXPAND_FILL_BYTE = 0x00;\n\nexport default class GenesisNsoSaveData {\n  static createFromNsoData(nsoArrayBuffer) {\n    if (GenesisUtil.isEepromSave(nsoArrayBuffer)) {\n      // If it's an EEPROM save, an emulator will want it to not be byte expanded\n      return new GenesisNsoSaveData(nsoArrayBuffer, nsoArrayBuffer);\n    }\n\n    // Now that the padding is gone, we can proceed\n    const rawArrayBuffer = GenesisUtil.byteExpand(nsoArrayBuffer, EMULATOR_BYTE_EXPAND_FILL_BYTE);\n\n    return new GenesisNsoSaveData(nsoArrayBuffer, rawArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    let nsoArrayBuffer = rawArrayBuffer;\n\n    if (GenesisUtil.isByteExpanded(rawArrayBuffer)) {\n      nsoArrayBuffer = GenesisUtil.byteCollapse(rawArrayBuffer);\n    }\n\n    return new GenesisNsoSaveData(nsoArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(nsoSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(nsoSaveData.getRawArrayBuffer(), newSize);\n\n    return GenesisNsoSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getNsoFileExtension() {\n    return 'sram';\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'genesis';\n  }\n\n  static nsoDataRequiresRomInfo() {\n    return false;\n  }\n\n  constructor(nsoArrayBuffer, rawArrayBuffer) {\n    this.nsoArrayBuffer = nsoArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getNsoArrayBuffer() {\n    return this.nsoArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/NintendoSwitchOnline/N64.js",
    "content": "// N64 saves on NSO have opposite endianness to emulator saves for SRAM and FlashRAM files. EEPROM files do not need to be endian swapped\n\nimport N64Util from '../../util/N64';\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class NsoN64SaveData {\n  static createFromNsoData(nsoArrayBuffer) {\n    const rawArrayBuffer = N64Util.needsEndianSwap(nsoArrayBuffer) ? N64Util.endianSwap(nsoArrayBuffer) : nsoArrayBuffer;\n\n    return new NsoN64SaveData(nsoArrayBuffer, rawArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    const nsoArrayBuffer = N64Util.needsEndianSwap(rawArrayBuffer) ? N64Util.endianSwap(rawArrayBuffer) : rawArrayBuffer;\n\n    return new NsoN64SaveData(nsoArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(n64FlashCartSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(n64FlashCartSaveData.getRawArrayBuffer(), newSize);\n\n    return NsoN64SaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getNsoFileExtension() {\n    return 'sram';\n  }\n\n  static getRawFileExtension(rawArrayBuffer) {\n    return N64Util.getFileExtension(rawArrayBuffer);\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'n64';\n  }\n\n  static nsoDataRequiresRomInfo() {\n    return false;\n  }\n\n  constructor(nsoArrayBuffer, rawArrayBuffer) {\n    this.nsoArrayBuffer = nsoArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getNsoArrayBuffer() {\n    return this.nsoArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/NintendoSwitchOnline/Nes.js",
    "content": "/*\nThe Nintendo Switch Online save format for NES games is the same as those on the NES Classic: the save is padded out to 32kB,\nand has a 40-byte SHA-1 digest encoded in ASCII prepended to the beginning\n*/\n\nimport PaddingUtil from '../../util/Padding';\nimport SaveFilesUtil from '../../util/SaveFiles';\nimport Util from '../../util/util';\nimport HashUtil from '../../util/Hash';\n\nconst NSO_NES_FILE_SIZE = 32768;\nconst NSO_NES_PADDING_VALUE = 0x00;\n\nconst NES_FILE_SIZE = 8192; // Although not all NES games have 8kB saves, the selection available on NSO all do\n\nconst HASH_ALGORITHM = 'sha1';\nconst HASH_LENGTH = 40; // The SHA-1 digest is converted to hex and encoded as ASCII\nconst HASH_ENCODING = 'US-ASCII';\n\nconst HASH_OFFSET = 0;\nconst DATA_BEGIN_OFFSET = HASH_OFFSET + HASH_LENGTH;\n\nfunction padArrayBuffer(inputArrayBuffer) {\n  const padding = {\n    value: NSO_NES_PADDING_VALUE,\n    count: Math.max(NSO_NES_FILE_SIZE - inputArrayBuffer.byteLength, 0),\n  };\n\n  return PaddingUtil.addPaddingToEnd(inputArrayBuffer, padding);\n}\n\nexport default class NsoNesSaveData {\n  static getNsoFileExtension() {\n    return 'sram';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'nes';\n  }\n\n  static nsoDataRequiresRomInfo() {\n    return false;\n  }\n\n  static createWithNewSize(nsoSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(nsoSaveData.getRawArrayBuffer(), newSize);\n\n    return NsoNesSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static createFromNsoData(nsoArrayBuffer) {\n    return new NsoNesSaveData(nsoArrayBuffer.slice(DATA_BEGIN_OFFSET, DATA_BEGIN_OFFSET + NES_FILE_SIZE), nsoArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    const rawArrayBufferTruncated = rawArrayBuffer.slice(0, NES_FILE_SIZE);\n    const rawArrayBufferPadded = padArrayBuffer(rawArrayBufferTruncated);\n\n    const hashEncodedArrayBuffer = HashUtil.getEncodedHash(rawArrayBufferPadded, HASH_ALGORITHM, HASH_ENCODING);\n\n    const nsoArrayBuffer = Util.concatArrayBuffers([hashEncodedArrayBuffer, rawArrayBufferPadded]);\n\n    return new NsoNesSaveData(rawArrayBuffer, nsoArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a NSO save data file\n  constructor(rawArrayBuffer, nsoArrayBuffer) {\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.nsoArrayBuffer = nsoArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getNsoArrayBuffer() {\n    return this.nsoArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/NintendoSwitchOnline/Snes.js",
    "content": "// SNES saves on NSO are just raw save files\n\nimport SaveFilesUtil from '../../util/SaveFiles';\n\nexport default class SnesNsoSaveData {\n  static createFromNsoData(nsoArrayBuffer) {\n    return new SnesNsoSaveData(nsoArrayBuffer, nsoArrayBuffer);\n  }\n\n  static createFromRawData(rawArrayBuffer) {\n    return new SnesNsoSaveData(rawArrayBuffer, rawArrayBuffer);\n  }\n\n  static createWithNewSize(nsoSaveData, newSize) {\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(nsoSaveData.getRawArrayBuffer(), newSize);\n\n    return SnesNsoSaveData.createFromRawData(newRawSaveData);\n  }\n\n  static getNsoFileExtension() {\n    return 'sram';\n  }\n\n  static getRawFileExtension() {\n    return 'srm';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'snes';\n  }\n\n  static nsoDataRequiresRomInfo() {\n    return false;\n  }\n\n  constructor(nsoArrayBuffer, rawArrayBuffer) {\n    this.nsoArrayBuffer = nsoArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getNsoArrayBuffer() {\n    return this.nsoArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/OnlineEmulators/Emulators/EmulatorBase.js",
    "content": "/*\nBase class for converting from save states for online emulators. Handles resizing multiple times without accidentally losing data\n*/\n\nimport SaveFilesUtil from '../../../util/SaveFiles';\n\nexport default class EmulatorBase {\n  static createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize, clazz) {\n    // Note that saveSize may be undefined if we're converting from a platform that doesn't require it (e.g. snes9x).\n    // So below we pass in rawArrayBuffer.byteLength as the original save size instead of relying on saveSize\n\n    const rawArrayBuffer = clazz.getRawArrayBufferFromSaveStateArrayBuffer(emulatorSaveStateArrayBuffer, saveSize);\n\n    return new clazz(emulatorSaveStateArrayBuffer, rawArrayBuffer, rawArrayBuffer.byteLength); // eslint-disable-line new-cap\n  }\n\n  static createWithNewSize(emulatorSaveStateData, newSize, clazz) {\n    // The user's emulator etc may require a different file size than the \"true\" size.\n    // We need to make sure that if the user resizes multiple times they don't lose data.\n    const originalRawArrayBuffer = clazz.getRawArrayBufferFromSaveStateArrayBuffer(emulatorSaveStateData.getEmulatorSaveStateArrayBuffer(), emulatorSaveStateData.getOriginalSaveSize());\n    const newRawSaveData = SaveFilesUtil.resizeRawSave(originalRawArrayBuffer, newSize);\n\n    return new clazz(emulatorSaveStateData.getEmulatorSaveStateArrayBuffer(), newRawSaveData, emulatorSaveStateData.getOriginalSaveSize()); // eslint-disable-line new-cap\n  }\n\n  constructor(emulatorSaveStateArrayBuffer, rawArrayBuffer, saveSize) {\n    this.emulatorSaveStateArrayBuffer = emulatorSaveStateArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n    this.originalSaveSize = saveSize;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getEmulatorSaveStateArrayBuffer() {\n    return this.emulatorSaveStateArrayBuffer;\n  }\n\n  getOriginalSaveSize() {\n    return this.originalSaveSize;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/OnlineEmulators/Emulators/Gambatte.js",
    "content": "/*\nI'm not 100% sure which emulator GB games in emulator.js use.\n\nIt may be the Gambatte emulator: https://github.com/EmulatorJS/EmulatorJS/blob/0bf944370c020f9877ca6701081a1963e160b8b0/data/src/emulator.js#L14\n\nAnd my tenuous belief that that package is relevant is because one site I looked at (www[.]retrogames[.]onl) mentions emulator.js if you dig deeply enough on the page of one of their games\n\nMagic 'sram' is at offset 0x747\nSave data size in bytes is stored at offset 0x74B\nSave data itself begins at 0x74F\n*/\n\nimport EmulatorBase from './EmulatorBase';\nimport PlatformSaveSizes from '../../PlatformSaveSizes';\nimport Util from '../../../util/util';\n\nconst LITTLE_ENDIAN = false;\n\nconst MAGIC = 'sram';\nconst MAGIC_OFFSET = 0x747;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst SAVE_SIZE_OFFSET = 0x74B;\nconst SAVE_OFFSET = 0x74F;\n\nexport default class GambatteSaveStateData extends EmulatorBase {\n  static getRawArrayBufferFromSaveStateArrayBuffer(emulatorSaveStateArrayBuffer) {\n    if (SAVE_OFFSET > emulatorSaveStateArrayBuffer.byteLength) {\n      throw new Error('This does not appear to be an Gambatte save state file: file is too short');\n    }\n\n    Util.checkMagic(emulatorSaveStateArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const emulatorSaveStateDataView = new DataView(emulatorSaveStateArrayBuffer);\n\n    const saveSize = emulatorSaveStateDataView.getUint32(SAVE_SIZE_OFFSET, LITTLE_ENDIAN);\n\n    if (PlatformSaveSizes.gb.indexOf(saveSize) < 0) {\n      throw new Error(`This does not appear to be an Gambatte save state file: ${saveSize} is not a valid Gameboy save file size`);\n    }\n\n    return emulatorSaveStateArrayBuffer.slice(SAVE_OFFSET, SAVE_OFFSET + saveSize);\n  }\n\n  static createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize) {\n    return super.createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize, GambatteSaveStateData);\n  }\n\n  static createWithNewSize(emulatorSaveStateData, newSize) {\n    return super.createWithNewSize(emulatorSaveStateData, newSize, GambatteSaveStateData);\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gb';\n  }\n\n  static fileSizeIsRequiredToConvert() {\n    return false;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/OnlineEmulators/Emulators/Gb.js",
    "content": "/*\nI have no idea which emulator GB/C games use\n*/\n\nimport EmulatorBase from './EmulatorBase';\n\nconst SRAM_OFFSET = 0x72D; // GB, GBC, and dual-compatibility games all appear to have their SRAM at this offset (despite having different file lengths for their save states)\n\nexport default class GbSaveStateData extends EmulatorBase {\n  static getRawArrayBufferFromSaveStateArrayBuffer(emulatorSaveStateArrayBuffer, saveSize) {\n    if ((SRAM_OFFSET + saveSize) > emulatorSaveStateArrayBuffer.byteLength) {\n      throw new Error('This does not appear to be a Gameboy save state file');\n    }\n\n    return emulatorSaveStateArrayBuffer.slice(SRAM_OFFSET, SRAM_OFFSET + saveSize);\n  }\n\n  static createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize) {\n    return super.createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize, GbSaveStateData);\n  }\n\n  static createWithNewSize(emulatorSaveStateData, newSize) {\n    return super.createWithNewSize(emulatorSaveStateData, newSize, GbSaveStateData);\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gb';\n  }\n\n  static fileSizeIsRequiredToConvert() {\n    return true;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/OnlineEmulators/Emulators/Snes9x.js",
    "content": "/*\nSNES9x save states appear to store the game's SRAM data after the magic \"SRA:<size>:\"\n*/\n\nimport EmulatorBase from './EmulatorBase';\nimport Util from '../../../util/util';\n\nconst MAGIC = 'SRA:'; // Magic begins with this string\nconst SIZE_END_MAGIC = ':'; // Then we have the size of the SRAM data in bytes, which is terminated with this string\nconst MAGIC_ENCODING = 'US-ASCII';\n\nexport default class Snes9xSaveStateData extends EmulatorBase {\n  static getRawArrayBufferFromSaveStateArrayBuffer(emulatorSaveStateArrayBuffer) {\n    try {\n      const magicOffset = Util.findMagic(emulatorSaveStateArrayBuffer, MAGIC, MAGIC_ENCODING);\n      const sizeBeginOffset = magicOffset + MAGIC.length;\n      const sizeEndOffset = Util.findMagic(emulatorSaveStateArrayBuffer, SIZE_END_MAGIC, MAGIC_ENCODING, sizeBeginOffset);\n\n      const magicSizeDecoder = new TextDecoder(MAGIC_ENCODING);\n      const saveSizeString = magicSizeDecoder.decode(emulatorSaveStateArrayBuffer.slice(sizeBeginOffset, sizeEndOffset));\n      const saveSize = parseInt(saveSizeString, 10);\n\n      const rawSaveBeginOffset = sizeEndOffset + SIZE_END_MAGIC.length;\n      const rawSaveEndOffset = rawSaveBeginOffset + saveSize;\n\n      return emulatorSaveStateArrayBuffer.slice(rawSaveBeginOffset, rawSaveEndOffset);\n    } catch (e) {\n      throw new Error('This does not appear to be a SNES9x save state file', e);\n    }\n  }\n\n  static createFromSaveStateData(emulatorSaveStateArrayBuffer) {\n    return super.createFromSaveStateData(emulatorSaveStateArrayBuffer, undefined, Snes9xSaveStateData);\n  }\n\n  static createWithNewSize(emulatorSaveStateData, newSize) {\n    return super.createWithNewSize(emulatorSaveStateData, newSize, Snes9xSaveStateData);\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'snes';\n  }\n\n  static fileSizeIsRequiredToConvert() {\n    return false;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/OnlineEmulators/Emulators/VBA-Next.js",
    "content": "/*\nI'm not 100% sure which emulator GBA games use.\n\nIt may be the VBA-next emulator: https://github.com/libretro/vba-next/blob/master/src/gba.cpp#L8820\n\nIt matches having the ROM internal name at the start of the file, and having the different types of save data at consistent offsets.\n\nMy tenuous belief that it's VBA-next comes from this: https://github.com/liriliri/luna/blob/master/src/retro-emulator/story.js#L20\n\nAnd my tenuous belief that that package is relevant is because the sites I looked at seem to get their emulation from retroemulator[.]com (which in turn appears to get its ROMs from playroms[.]net)\n\nIn-game save data offsets\n=========================\n\nThese found by creating the same save file in both the online emulator and a standalone emulator, then searching the online emulator file for the save data\n\n512B EEPROM: 0x91000 (the first 512B of EEPROM data are also written at 0x90DEC so that offset could be used too for 512B saves. See VBA-Next source code)\n8kB EEPROM: 0x91000\n32kB SRAM: 0x93010\n64kB Flash RAM: 0x93010\n128kB Flash RAM: 0x93010\n*/\n\nimport EmulatorBase from './EmulatorBase';\n\nconst EEPROM_OFFSET = 0x91000;\nconst SRAM_OFFSET = 0x93010;\nconst FLASH_RAM_OFFSET = 0x93010;\n\nconst SAVE_OFFSET = {\n  512: EEPROM_OFFSET,\n  8192: EEPROM_OFFSET,\n  32768: SRAM_OFFSET,\n  65536: FLASH_RAM_OFFSET,\n  131072: FLASH_RAM_OFFSET,\n};\n\nexport default class VbaNextSaveStateData extends EmulatorBase {\n  static getRawArrayBufferFromSaveStateArrayBuffer(emulatorSaveStateArrayBuffer, saveSize) {\n    if (!(saveSize in SAVE_OFFSET)) {\n      throw new Error(`${saveSize} is not a valid save size for a GBA game`);\n    }\n\n    const rawSaveOffset = SAVE_OFFSET[saveSize];\n\n    if ((rawSaveOffset + saveSize) > emulatorSaveStateArrayBuffer.byteLength) {\n      throw new Error('This does not appear to be a VBA-Next save state file');\n    }\n\n    return emulatorSaveStateArrayBuffer.slice(rawSaveOffset, rawSaveOffset + saveSize);\n  }\n\n  static createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize) {\n    return super.createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize, VbaNextSaveStateData);\n  }\n\n  static createWithNewSize(emulatorSaveStateData, newSize) {\n    return super.createWithNewSize(emulatorSaveStateData, newSize, VbaNextSaveStateData);\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gba';\n  }\n\n  static fileSizeIsRequiredToConvert() {\n    return true;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/OnlineEmulators/Emulators/mGba.js",
    "content": "/*\nI'm not 100% sure which emulator GBA games in emulator.js use.\n\nIt may be the mGBA emulator: https://github.com/EmulatorJS/EmulatorJS/blob/0bf944370c020f9877ca6701081a1963e160b8b0/data/src/emulator.js#L26\n\nAnd my tenuous belief that that package is relevant is because one site I looked at (www[.]retrogames[.]onl) mentions emulator.js if you dig deeply enough on the page of one of their games\n\nSave data size in bytes is stored at offset 0x61004\nSave data itself begins at 0x61030\n*/\n\nimport EmulatorBase from './EmulatorBase';\nimport PlatformSaveSizes from '../../PlatformSaveSizes';\n\nconst LITTLE_ENDIAN = true;\n\n// Note that there exists another version of this emulator that puts the size at 0x61014 and the save data at 0x61040\n// We may want to make a Map of SAVE_SIZE_OFFSET to SAVE_OFFSET, and probe each potential SAVE_SIZE_OFFSET to see if\n// it has a valid GBA save file size\n// See discussion at https://github.com/euan-forrester/save-file-converter/issues/380\n\nconst SAVE_SIZE_OFFSET = 0x61004;\nconst SAVE_OFFSET = 0x61030;\n\nexport default class MGbaSaveStateData extends EmulatorBase {\n  static getRawArrayBufferFromSaveStateArrayBuffer(emulatorSaveStateArrayBuffer) {\n    if (SAVE_OFFSET > emulatorSaveStateArrayBuffer.byteLength) {\n      throw new Error('This does not appear to be an mGBA save state file: file is too short');\n    }\n\n    const emulatorSaveStateDataView = new DataView(emulatorSaveStateArrayBuffer);\n\n    const saveSize = emulatorSaveStateDataView.getUint32(SAVE_SIZE_OFFSET, LITTLE_ENDIAN);\n\n    if (PlatformSaveSizes.gba.indexOf(saveSize) < 0) {\n      throw new Error(`This does not appear to be an mGBA save state file: ${saveSize} is not a valid GBA save file size`);\n    }\n\n    return emulatorSaveStateArrayBuffer.slice(SAVE_OFFSET, SAVE_OFFSET + saveSize);\n  }\n\n  static createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize) {\n    return super.createFromSaveStateData(emulatorSaveStateArrayBuffer, saveSize, MGbaSaveStateData);\n  }\n\n  static createWithNewSize(emulatorSaveStateData, newSize) {\n    return super.createWithNewSize(emulatorSaveStateData, newSize, MGbaSaveStateData);\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static adjustOutputSizesPlatform() {\n    return 'gba';\n  }\n\n  static fileSizeIsRequiredToConvert() {\n    return false;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/OnlineEmulators/OnlineEmulatorWrapper.js",
    "content": "// At their core, many online emulator sites appear to use mostly the same underlying emulators, which appear to be\n// supplied to them by a couple of different sources such as neptunejs[.]xyz or retroemulator[.]com\n//\n// The big difference is that some sites will only allow the user to download/upload a single save state\n// while other sites will manage a set of save states and allow the user to download a zip file containing all of them.\n//\n// Some of the sites that support these zip files will include a screen shot file along with each save state file.\n// So we want to filter those out\n\nimport JSZip from 'jszip';\n\nimport Util from '../../util/util';\nimport PlatformSaveSizes from '../PlatformSaveSizes';\n\nimport Snes9xSaveStateData from './Emulators/Snes9x';\nimport GbSaveStateData from './Emulators/Gb';\nimport GambatteSaveStateData from './Emulators/Gambatte';\nimport VbaNextSaveStateData from './Emulators/VBA-Next';\nimport MGbaSaveStateData from './Emulators/mGba';\n\nconst IMAGE_FILE_TYPES = ['.png', '.jpg', '.jpeg', '.tif', '.tiff', '.gif', '.bmp'];\n\nconst GB_SAVE_STATE_TYPES = [\n  // Gambatte save states have a magic string that we can test for, and the other doesn't, so check from Gambatte first\n  GambatteSaveStateData,\n  GbSaveStateData,\n];\n\nconst GBA_SAVE_STATE_TYPES = [\n  // We're just testing based on file size, so go from the largest file to the smallest\n  VbaNextSaveStateData,\n  MGbaSaveStateData,\n];\n\nasync function getSaveStatesFromZip(zipContents) {\n  const compressedSaveStateFiles = zipContents.filter((relativePath, file) => (IMAGE_FILE_TYPES.indexOf(Util.getExtension(file.name)) < 0));\n\n  const saveStateData = await Promise.all(compressedSaveStateFiles.map((file) => file.async('arraybuffer')));\n\n  return compressedSaveStateFiles.map((file, i) => ({ name: file.name, arrayBuffer: saveStateData[i] }));\n}\n\nfunction getSaveStateFromSingleFile(arrayBuffer, filename) {\n  return [{ name: filename, arrayBuffer }];\n}\n\nasync function getSaveStates(arrayBuffer, filename) {\n  // We need to determine whether we've been given a compressed file containing save states,\n  // or just given a save state directly\n\n  const zip = new JSZip();\n\n  let saveStates = [];\n\n  try {\n    const zipContents = await zip.loadAsync(arrayBuffer, { checkCRC32: true });\n    saveStates = await getSaveStatesFromZip(zipContents);\n  } catch (e) {\n    // According to wikipedia, the correct way to determine whether a file is a zip file is to look\n    // for an end of central directory record. There's also a byte signature at the start of the file,\n    // but apparently this is optional and not always present\n    // https://en.wikipedia.org/wiki/ZIP_(file_format)#Structure\n    if (e.message.startsWith('Can\\'t find end of central directory')) {\n      saveStates = getSaveStateFromSingleFile(arrayBuffer, filename);\n    } else {\n      throw e;\n    }\n  }\n\n  return saveStates;\n}\n\nfunction getSaveStateType(saveStateTypes, arrayBuffer, smallestSaveSize) {\n  const saveStateType = saveStateTypes.find((clazz) => {\n    try {\n      clazz.createFromSaveStateData(arrayBuffer, smallestSaveSize); // Smallest size because if we pick a bigger one we might get a false positive for one of the classes if the save state file is for a smaller sized save state type but with a bigger internal save file\n      return true;\n    } catch (e) {\n      return false;\n    }\n  });\n\n  if (saveStateType === undefined) {\n    throw new Error('Unrecogized save state');\n  }\n\n  return saveStateType;\n}\n\nfunction getClass(platform, saveStateArrayBuffer) {\n  switch (platform) {\n    case 'snes':\n      return Snes9xSaveStateData;\n\n    case 'gba':\n      return getSaveStateType(GBA_SAVE_STATE_TYPES, saveStateArrayBuffer, PlatformSaveSizes.gba[0]);\n\n    case 'gb':\n      return getSaveStateType(GB_SAVE_STATE_TYPES, saveStateArrayBuffer, PlatformSaveSizes.gb[0]);\n\n    default:\n      throw new Error(`Unrecognized platform type: '${platform}'`);\n  }\n}\n\nexport default class OnlineEmulatorWrapper {\n  static async createFromEmulatorData(emulatorSaveStateArrayBuffer, emulatorSaveStateFilename, platform, saveSize = null) {\n    const saveStates = await getSaveStates(emulatorSaveStateArrayBuffer, emulatorSaveStateFilename);\n\n    // Now that we have our save state data, turn it into raw in-game saves\n\n    if (saveStates.length === 0) {\n      return new OnlineEmulatorWrapper([], platform, undefined);\n    }\n\n    const clazz = getClass(platform, saveStates[0].arrayBuffer);\n    const files = saveStates.map((saveState) => ({\n      name: saveState.name,\n      emulatorSaveStateData: clazz.createFromSaveStateData(saveState.arrayBuffer, saveSize),\n    }));\n\n    return new OnlineEmulatorWrapper(files, platform, clazz);\n  }\n\n  static getRawFileExtension() {\n    return 'sav';\n  }\n\n  static createWithNewSize(onlineEmulatorWrapperData, newSize) {\n    const files = onlineEmulatorWrapperData.getFiles().map((file) => ({\n      ...file,\n      emulatorSaveStateData: onlineEmulatorWrapperData.getClass().createWithNewSize(file.emulatorSaveStateData, newSize),\n    }));\n\n    return new OnlineEmulatorWrapper(files, onlineEmulatorWrapperData.getPlatform(), onlineEmulatorWrapperData.getClass());\n  }\n\n  static async fileSizeIsRequiredToConvert(emulatorSaveStateArrayBuffer, platform) {\n    const saveStates = await getSaveStates(emulatorSaveStateArrayBuffer, 'dummy');\n\n    if (saveStates.length === 0) {\n      return false;\n    }\n\n    const clazz = getClass(platform, saveStates[0].arrayBuffer);\n\n    return clazz.fileSizeIsRequiredToConvert();\n  }\n\n  constructor(files, platform, clazz) {\n    this.files = files;\n    this.platform = platform;\n    this.clazz = clazz;\n  }\n\n  adjustOutputSizesPlatform() {\n    return this.platform;\n  }\n\n  getFiles() {\n    return this.files;\n  }\n\n  getPlatform() {\n    return this.platform;\n  }\n\n  getClass() {\n    return this.clazz;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PS1/Components/Basics.js",
    "content": "export default class Ps1Basics {\n  static NUM_RESERVED_BLOCKS = 1; // The header contains directory information\n\n  static NUM_DATA_BLOCKS = 15; // The card has one block that contains the header, then 15 blocks for save data\n\n  static NUM_TOTAL_BLOCKS = Ps1Basics.NUM_RESERVED_BLOCKS + Ps1Basics.NUM_DATA_BLOCKS;\n\n  static BLOCK_SIZE = 8192; // Each block is this many bytes\n\n  static FRAME_SIZE = 128; // The header block contains a set of \"frames\" which are each this many bytes\n\n  static TOTAL_SIZE = Ps1Basics.NUM_TOTAL_BLOCKS * Ps1Basics.BLOCK_SIZE;\n\n  static LITTLE_ENDIAN = true;\n\n  static MAGIC_ENCODING = 'US-ASCII';\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PS1/Components/DirectoryBlock.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"&\", \"^\"] }] */\n\nimport Ps1Basics from './Basics';\n\nimport Util from '../../../util/util';\n\nconst {\n  LITTLE_ENDIAN,\n  BLOCK_SIZE,\n  NUM_DATA_BLOCKS,\n  NUM_TOTAL_BLOCKS,\n  FRAME_SIZE,\n  MAGIC_ENCODING,\n} = Ps1Basics;\n\n// Header block\n\nconst HEADER_MAGIC = 'MC';\nconst MAGIC_OFFSET = 0;\n\n// The header contains several mini-blocks called \"directory frames\", each of which has info about a block of data\n\nconst DIRECTORY_FRAME_AVAILABLE_OFFSET = 0x00;\nconst DIRECTORY_FRAME_NEXT_BLOCK_OFFSET = 0x08;\nconst DIRECTORY_FRAME_NO_NEXT_BLOCK = 0xFFFF;\nconst DIRECTORY_FRAME_FILENAME_OFFSET = 0x0A;\nconst DIRECTORY_FRAME_FILENAME_LENGTH = 20;\nconst DIRECTORY_FRAME_FILENAME_ENCODING = 'US-ASCII';\nconst DIRECTORY_FRAME_FILE_SIZE_OFFSET = 0x04;\n\n// These flags are described in the 'available blocks table' here: https://www.psdevwiki.com/ps3/PS1_Savedata#PS1_Single_Save_.3F_.28.PSV.29\nconst DIRECTORY_FRAME_UNUSED_BLOCK = 0xA0;\nconst DIRECTORY_FRAME_FIRST_LINK_BLOCK = 0x51;\nconst DIRECTORY_FRAME_MIDDLE_LINK_BLOCK = 0x52;\nconst DIRECTORY_FRAME_LAST_LINK_BLOCK = 0x53;\nconst DIRECTORY_FRAME_UNUSABLE_BLOCK = 0xFF;\n\nfunction getDirectoryFrame(headerArrayBuffer, blockNum) {\n  const offset = FRAME_SIZE + (blockNum * FRAME_SIZE); // The first frame contains HEADER_MAGIC, so block 0 is at frame 1\n  return headerArrayBuffer.slice(offset, offset + FRAME_SIZE);\n}\n\nfunction xorAllBytes(arrayBuffer) {\n  const array = new Uint8Array(arrayBuffer);\n\n  return array.reduce((acc, n) => acc ^ n, 0);\n}\n\nfunction createDirectoryFrame() {\n  return Util.getFilledArrayBuffer(FRAME_SIZE, 0x00);\n}\n\nfunction createDirectoryFrameMagic() {\n  const arrayBuffer = Util.setMagic(createDirectoryFrame(), MAGIC_OFFSET, HEADER_MAGIC, MAGIC_ENCODING);\n  const dataView = new DataView(arrayBuffer);\n\n  dataView.setUint8(FRAME_SIZE - 1, xorAllBytes(arrayBuffer));\n\n  return arrayBuffer;\n}\n\nfunction createDirectoryFrameEmpty() {\n  const arrayBuffer = createDirectoryFrame();\n  const dataView = new DataView(arrayBuffer);\n\n  dataView.setUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET, DIRECTORY_FRAME_UNUSED_BLOCK);\n  dataView.setUint16(DIRECTORY_FRAME_NEXT_BLOCK_OFFSET, DIRECTORY_FRAME_NO_NEXT_BLOCK, LITTLE_ENDIAN);\n\n  dataView.setUint8(FRAME_SIZE - 1, xorAllBytes(arrayBuffer));\n\n  return arrayBuffer;\n}\n\nfunction createDirectoryFrameUnused() {\n  const arrayBuffer = createDirectoryFrame();\n  const dataView = new DataView(arrayBuffer);\n\n  dataView.setUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET + 0, DIRECTORY_FRAME_UNUSABLE_BLOCK);\n  dataView.setUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET + 1, DIRECTORY_FRAME_UNUSABLE_BLOCK);\n  dataView.setUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET + 2, DIRECTORY_FRAME_UNUSABLE_BLOCK);\n  dataView.setUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET + 3, DIRECTORY_FRAME_UNUSABLE_BLOCK);\n\n  dataView.setUint16(DIRECTORY_FRAME_NEXT_BLOCK_OFFSET, DIRECTORY_FRAME_NO_NEXT_BLOCK, LITTLE_ENDIAN);\n\n  return arrayBuffer;\n}\n\nfunction encodeFilename(filename, filenameTextEncoder) {\n  return filenameTextEncoder.encode(filename).slice(0, DIRECTORY_FRAME_FILENAME_LENGTH);\n}\n\n// The filename begins with the country code:\n// https://www.psdevwiki.com/ps3/PS1_Savedata#Virtual_Memory_Card_PS1_.28.VM1.29\nfunction getRegionName(filename) {\n  const firstChar = filename.charAt(0);\n\n  if (firstChar === 'B') {\n    const secondChar = filename.charAt(1);\n\n    if (secondChar === 'I') {\n      return 'Japan';\n    }\n\n    if (secondChar === 'A') {\n      return 'North America';\n    }\n\n    if (secondChar === 'E') {\n      return 'Europe';\n    }\n  }\n\n  return 'Unknown region';\n}\n\nfunction createDirectoryFramesForSave(saveFile, blockNumber, filenameTextEncoder) {\n  const numBlocks = saveFile.rawData.byteLength / BLOCK_SIZE;\n\n  let needEndingBlock = false;\n  let numMiddleBlocks = 0;\n\n  if (numBlocks >= 2) {\n    needEndingBlock = true;\n    numMiddleBlocks = numBlocks - 2;\n  }\n\n  const directoryFrames = [];\n\n  // First, do the directory frame for the starting block\n\n  let currentBlockNumber = blockNumber;\n\n  {\n    const arrayBuffer = createDirectoryFrame();\n    const array = new Uint8Array(arrayBuffer);\n    const dataView = new DataView(arrayBuffer);\n\n    const encodedFilename = encodeFilename(saveFile.filename, filenameTextEncoder);\n\n    dataView.setUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET, DIRECTORY_FRAME_FIRST_LINK_BLOCK);\n    dataView.setUint32(DIRECTORY_FRAME_FILE_SIZE_OFFSET, saveFile.rawData.byteLength, LITTLE_ENDIAN);\n    dataView.setUint16(DIRECTORY_FRAME_NEXT_BLOCK_OFFSET, (numBlocks > 1) ? (currentBlockNumber + 1) : DIRECTORY_FRAME_NO_NEXT_BLOCK, LITTLE_ENDIAN);\n\n    array.set(encodedFilename, DIRECTORY_FRAME_FILENAME_OFFSET);\n\n    dataView.setUint8(FRAME_SIZE - 1, xorAllBytes(arrayBuffer));\n\n    directoryFrames.push(arrayBuffer);\n  }\n\n  // Then do the directory frames for any middle blocks\n\n  for (let i = 0; i < numMiddleBlocks; i += 1) {\n    currentBlockNumber += 1;\n\n    const arrayBuffer = createDirectoryFrame();\n    const dataView = new DataView(arrayBuffer);\n\n    dataView.setUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET, DIRECTORY_FRAME_MIDDLE_LINK_BLOCK);\n    dataView.setUint16(DIRECTORY_FRAME_NEXT_BLOCK_OFFSET, currentBlockNumber + 1, LITTLE_ENDIAN);\n    dataView.setUint8(FRAME_SIZE - 1, xorAllBytes(arrayBuffer));\n\n    directoryFrames.push(arrayBuffer);\n  }\n\n  // Then the directory frame for the ending block if needed\n\n  if (needEndingBlock) {\n    const arrayBuffer = createDirectoryFrame();\n    const dataView = new DataView(arrayBuffer);\n\n    dataView.setUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET, DIRECTORY_FRAME_LAST_LINK_BLOCK);\n    dataView.setUint16(DIRECTORY_FRAME_NEXT_BLOCK_OFFSET, DIRECTORY_FRAME_NO_NEXT_BLOCK, LITTLE_ENDIAN);\n    dataView.setUint8(FRAME_SIZE - 1, xorAllBytes(arrayBuffer));\n\n    directoryFrames.push(arrayBuffer);\n  }\n\n  // All done!\n\n  return directoryFrames;\n}\n\nexport default class Ps1DirectoryBlock {\n  static DIRECTORY_FRAME_AVAILABLE_OFFSET = DIRECTORY_FRAME_AVAILABLE_OFFSET;\n\n  static DIRECTORY_FRAME_NEXT_BLOCK_OFFSET = DIRECTORY_FRAME_NEXT_BLOCK_OFFSET;\n\n  static getDirectoryFrame(headerArrayBuffer, blockNum) {\n    return getDirectoryFrame(headerArrayBuffer, blockNum);\n  }\n\n  static encodeFilename(filename, filenameTextEncoder) {\n    return encodeFilename(filename, filenameTextEncoder);\n  }\n\n  static createHeaderBlock(saveFiles) {\n    const directoryFrames = [];\n\n    const filenameTextEncoder = new TextEncoder(DIRECTORY_FRAME_FILENAME_ENCODING);\n\n    directoryFrames.push(createDirectoryFrameMagic());\n\n    saveFiles.forEach((saveFile) => {\n      const directoryFramesForSaveFile = createDirectoryFramesForSave(saveFile, directoryFrames.length - 1, filenameTextEncoder);\n\n      directoryFrames.push(...directoryFramesForSaveFile);\n    });\n\n    // Fill in any remaining space as empty directory frames + save blocks\n\n    while (directoryFrames.length < NUM_TOTAL_BLOCKS) { // NUM_TOTAL_BLOCKS rather than NUM_DATA_BLOCKS because we have the magic frame on there first, which corresponds to the header block\n      directoryFrames.push(createDirectoryFrameEmpty());\n    }\n\n    // Then the rest of the header block is unused directory frames\n\n    while (directoryFrames.length < (BLOCK_SIZE / FRAME_SIZE)) {\n      directoryFrames.push(createDirectoryFrameUnused());\n    }\n\n    // Concat our directory frames together into our header block\n\n    return Util.concatArrayBuffers(directoryFrames);\n  }\n\n  static readDirectoryBlock(headerArrayBuffer) {\n    Util.checkMagic(headerArrayBuffer, MAGIC_OFFSET, HEADER_MAGIC, MAGIC_ENCODING);\n\n    const filenameTextDecoder = new TextDecoder(DIRECTORY_FRAME_FILENAME_ENCODING);\n\n    const saveFiles = [];\n\n    // Go through all the directory frames, and for each block that contains data then get the raw save data and decode its description\n\n    for (let i = 0; i < NUM_DATA_BLOCKS; i += 1) {\n      let directoryFrame = getDirectoryFrame(headerArrayBuffer, i);\n      let directoryFrameDataView = new DataView(directoryFrame);\n\n      const available = directoryFrameDataView.getUint8(DIRECTORY_FRAME_AVAILABLE_OFFSET);\n\n      if (((available & 0xF0) === DIRECTORY_FRAME_UNUSED_BLOCK) || (available === DIRECTORY_FRAME_UNUSABLE_BLOCK)) {\n        // Note that some files have blocks with their 'available' byte set like 0xA1, 0xA2, etc., which\n        // indicates both that the block is available and it's a link block that's part of a save > 1 block in size.\n        // So I'm assumeing that the high bits take precidence here and the block is actually available\n        continue; // eslint-disable-line no-continue\n      }\n\n      if (available === DIRECTORY_FRAME_FIRST_LINK_BLOCK) {\n        // This block begins a save, which may be comprised of several blocks\n\n        const filename = Util.trimNull(filenameTextDecoder.decode(directoryFrame.slice(DIRECTORY_FRAME_FILENAME_OFFSET, DIRECTORY_FRAME_FILENAME_OFFSET + DIRECTORY_FRAME_FILENAME_LENGTH)));\n        const regionName = getRegionName(filename);\n        const rawDataSize = directoryFrameDataView.getUint32(DIRECTORY_FRAME_FILE_SIZE_OFFSET, LITTLE_ENDIAN);\n        const dataBlockNumbers = [i];\n\n        // See if there are other blocks that comprise this save\n\n        let nextBlockNumber = directoryFrameDataView.getUint16(DIRECTORY_FRAME_NEXT_BLOCK_OFFSET, LITTLE_ENDIAN);\n\n        while (nextBlockNumber !== DIRECTORY_FRAME_NO_NEXT_BLOCK) {\n          dataBlockNumbers.push(nextBlockNumber);\n\n          directoryFrame = getDirectoryFrame(headerArrayBuffer, nextBlockNumber);\n          directoryFrameDataView = new DataView(directoryFrame);\n\n          nextBlockNumber = directoryFrameDataView.getUint16(DIRECTORY_FRAME_NEXT_BLOCK_OFFSET, LITTLE_ENDIAN);\n        }\n\n        saveFiles.push({\n          startingBlock: i,\n          filename,\n          regionName,\n          dataBlockNumbers,\n          rawDataSize,\n        });\n      }\n    }\n\n    return saveFiles;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PS1/Components/SaveBlocks.js",
    "content": "import Ps1Basics from './Basics';\n\nimport Util from '../../../util/util';\n\nconst {\n  BLOCK_SIZE,\n  NUM_DATA_BLOCKS,\n  MAGIC_ENCODING,\n} = Ps1Basics;\n\nconst SAVE_BLOCK_MAGIC = 'SC';\nconst MAGIC_OFFSET = 0;\n\nconst SAVE_BLOCK_DESCRIPTION_OFFSET = 0x04;\nconst SAVE_BLOCK_DESCRIPTION_LENGTH = 64;\nconst SAVE_BLOCK_DESCRIPTION_ENCODING = 'shift-jis';\n\nfunction getBlock(dataBlocksArrayBuffer, blockNum) {\n  const offset = BLOCK_SIZE * blockNum;\n  return dataBlocksArrayBuffer.slice(offset, offset + BLOCK_SIZE);\n}\n\nfunction createSaveBlockEmpty() {\n  return Util.getFilledArrayBuffer(BLOCK_SIZE, 0x00);\n}\n\nfunction convertTextToHalfWidth(s) {\n  // The description stored in the save data is in full-width characters but we'd rather display normal half-width ones\n  // https://stackoverflow.com/a/58515363\n  return s.replace(/[\\uff01-\\uff5e]/g, (ch) => String.fromCharCode(ch.charCodeAt(0) - 0xfee0)).replace(/\\u3000/g, '\\u0020');\n}\n\nexport default class Ps1SaveBlocks {\n  static checkMagic(rawData) {\n    Util.checkMagic(rawData, MAGIC_OFFSET, SAVE_BLOCK_MAGIC, MAGIC_ENCODING);\n  }\n\n  static readSaveBlocks(saveFile, dataBlocksArrayBuffer) {\n    const fileDescriptionTextDecoder = new TextDecoder(SAVE_BLOCK_DESCRIPTION_ENCODING);\n\n    const dataBlocks = saveFile.dataBlockNumbers.map((dataBlockNumber) => getBlock(dataBlocksArrayBuffer, dataBlockNumber));\n\n    Util.checkMagic(dataBlocks[0], MAGIC_OFFSET, SAVE_BLOCK_MAGIC, MAGIC_ENCODING);\n\n    const description = convertTextToHalfWidth(\n      Util.trimNull(\n        fileDescriptionTextDecoder.decode(\n          dataBlocks[0].slice(SAVE_BLOCK_DESCRIPTION_OFFSET, SAVE_BLOCK_DESCRIPTION_OFFSET + SAVE_BLOCK_DESCRIPTION_LENGTH),\n        ),\n      ),\n    );\n\n    // Check that we actually got as many bytes as the file was supposed to have\n\n    const rawData = Util.concatArrayBuffers(dataBlocks);\n\n    if (rawData.byteLength !== saveFile.rawDataSize) {\n      throw new Error(`Save file appears to be corrupted: expected file ${description} to be ${saveFile.rawDataSize} bytes, but was actually ${rawData.byteLength} bytes`);\n    }\n\n    return {\n      ...saveFile,\n      description,\n      rawData,\n    };\n  }\n\n  static createSaveBlocks(saveFiles) {\n    // Divide up the save file itself into blocks\n\n    const saveBlocks = [];\n\n    saveFiles.forEach((saveFile) => {\n      const numBlocks = saveFile.rawData.byteLength / BLOCK_SIZE;\n\n      for (let i = 0; i < numBlocks; i += 1) {\n        saveBlocks.push(saveFile.rawData.slice(i * BLOCK_SIZE, (i + 1) * BLOCK_SIZE));\n      }\n    });\n\n    while (saveBlocks.length < NUM_DATA_BLOCKS) {\n      saveBlocks.push(createSaveBlockEmpty());\n    }\n\n    return saveBlocks;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PS1/Components/SonyUtil.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"^\"] }] */\n\n// Class for Sony-specific stuff, such as calculating the signature of a save file\n\nimport createHash from 'create-hash';\nimport CryptoAes from '../../../util/crypto-aes';\nimport Util from '../../../util/util';\n\nconst ENCRYPTION_ALGORITHM = 'aes-128-ecb';\nconst ENCRYPTION_ALGORITHM_BLOCK_LENGTH = 0x10; // A block in AES is always 128 bits regardless of the key size\nconst ENCRYPTION_KEY = Buffer.from('AB5ABC9FC1F49DE6A051DBAEFA518859', 'hex'); // https://github.com/dots-tb/vita-mcr2vmp/blob/master/src/main.c#L15\nconst ENCRYPTION_IV = Buffer.alloc(0); // ECB doesn't use an IV, despite the code we're copying this from specifying one: https://github.com/nodejs/node/issues/10263\nconst ENCRYPTION_IV_PRETEND = Buffer.from('B30FFEEDB7DC5EB7133DA60D1B6B2CDC', 'hex'); // However, this series of bytes is used for a different purpose in our 'signature' algorithm below\nconst ENCRYPTION_KEY_LENGTH = ENCRYPTION_KEY.length;\nconst HASH_ALGORITHM = 'sha1';\nconst SALT_LENGTH = 0x40;\n\n// It seems that the salt seed can be initialized to anything. vita-mcr2vmp initializes to to all zeros.\n// save-editor.com initializes it to a sequence of incrementing values (0, 1, 2, 3, etc)\n// After I used a save initially created by save-editor.com on my PSP for some time, I observed that the salt seed was replaced by a different\n// sequence of incrementing values, starting at some other number. Perhaps they all get incremented every time the save is updated\n// by the hardware?\n//\n// I'm not sure, but let's just play along and initialize ours to incrementing values as well.\nconst SALT_SEED_INIT = Buffer.from('000102030405060708090A0B0C0D0E0F10111213', 'hex');\n\n// Based on https://github.com/dots-tb/vita-mcr2vmp/blob/master/src/aes.c#L491\nfunction xorWithIv(arrayBuffer, startingOffset, ivBuffer) {\n  const outputArrayBuffer = new ArrayBuffer(arrayBuffer.byteLength);\n  const outputArray = new Uint8Array(outputArrayBuffer);\n\n  const inputArray = new Uint8Array(arrayBuffer);\n  const ivArray = new Uint8Array(ivBuffer);\n\n  outputArray.set(inputArray);\n\n  for (let i = 0; i < ENCRYPTION_ALGORITHM_BLOCK_LENGTH; i += 1) {\n    outputArray[i + startingOffset] = inputArray[i + startingOffset] ^ ivArray[i];\n  }\n\n  return outputArrayBuffer;\n}\n\n// Based on https://github.com/dots-tb/vita-mcr2vmp/blob/master/src/main.c#L25\nfunction xorWithByte(arrayBuffer, xorValue, length) {\n  const outputArrayBuffer = new ArrayBuffer(arrayBuffer.byteLength);\n  const outputArray = new Uint8Array(outputArrayBuffer);\n\n  const inputArray = new Uint8Array(arrayBuffer);\n\n  for (let i = 0; i < length; i += 1) {\n    outputArray[i] = inputArray[i] ^ xorValue;\n  }\n\n  return outputArrayBuffer;\n}\n\nexport default class SonyUtil {\n  static SALT_SEED_INIT = SALT_SEED_INIT;\n\n  // Note that our arrayBuffer is for the entire PSP file, including the header which must in turn include the salt seed\n  // The signature in the header is zero'ed out before the signature is calculated, but everything else must be there\n  static calculateSignature(arrayBuffer, saltSeed, saltSeedLength, signatureOffset, signatureLength) {\n    // First, we calculate our salt\n    // Implmentation copied from: https://github.com/dots-tb/vita-mcr2vmp/blob/master/src/main.c#L105\n\n    let salt = new ArrayBuffer(SALT_LENGTH);\n\n    let workBuffer = new ArrayBuffer(ENCRYPTION_KEY_LENGTH); // In the code we're copying from, only this many bytes are actually used from this buffer, until the very end when it's repurposed to receive the final sha1 digest\n\n    workBuffer = Util.setArrayBufferPortion(workBuffer, saltSeed, 0, 0, ENCRYPTION_KEY_LENGTH);\n    workBuffer = CryptoAes.decrypt(workBuffer, ENCRYPTION_ALGORITHM, ENCRYPTION_KEY, ENCRYPTION_IV);\n    salt = Util.setArrayBufferPortion(salt, workBuffer, 0, 0, ENCRYPTION_KEY_LENGTH);\n\n    workBuffer = Util.setArrayBufferPortion(workBuffer, saltSeed, 0, 0, ENCRYPTION_KEY_LENGTH);\n    workBuffer = CryptoAes.encrypt(workBuffer, ENCRYPTION_ALGORITHM, ENCRYPTION_KEY, ENCRYPTION_IV);\n    salt = Util.setArrayBufferPortion(salt, workBuffer, ENCRYPTION_KEY_LENGTH, 0, ENCRYPTION_KEY_LENGTH);\n\n    salt = xorWithIv(salt, 0, ENCRYPTION_IV_PRETEND); // The only place our IV is actually used: as a random series of bytes\n\n    workBuffer = Util.fillArrayBuffer(workBuffer, 0xFF);\n    workBuffer = Util.setArrayBufferPortion(workBuffer, saltSeed, 0, ENCRYPTION_KEY_LENGTH, saltSeedLength - ENCRYPTION_KEY_LENGTH);\n    salt = xorWithIv(salt, ENCRYPTION_KEY_LENGTH, workBuffer);\n\n    salt = Util.fillArrayBufferPortion(salt, saltSeedLength, SALT_LENGTH - saltSeedLength, 0);\n    salt = xorWithByte(salt, 0x36, SALT_LENGTH);\n\n    // Then we calculate our hash\n    // Implementation copied from: https://github.com/dots-tb/vita-mcr2vmp/blob/master/src/main.c#L124\n\n    const inputArrayBufferWithoutHash = Util.fillArrayBufferPortion(arrayBuffer, signatureOffset, signatureLength, 0);\n\n    const hash1 = createHash(HASH_ALGORITHM);\n\n    hash1.update(Buffer.from(salt));\n    hash1.update(Buffer.from(inputArrayBufferWithoutHash));\n\n    const hash1Output = hash1.digest();\n\n    const hash2 = createHash(HASH_ALGORITHM);\n\n    salt = xorWithByte(salt, 0x6A, SALT_LENGTH);\n\n    hash2.update(Buffer.from(salt));\n    hash2.update(hash1Output);\n\n    return hash2.digest();\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PS1/DexDrive.js",
    "content": "/*\nThe DexDrive data format is:\n- 3904 byte header:\n  - Magic\n  - Copy of the 'available' flags from the memcard header\n  - Copy of the linked blocks from the memcard header\n  - A comment for each block\n- Normal PS1 memory card data\n*/\n\nimport Ps1MemcardSaveData from './Memcard';\nimport Ps1DirectoryBlock from './Components/DirectoryBlock';\nimport Ps1Basics from './Components/Basics';\nimport Util from '../../util/util';\n\nconst {\n  NUM_DATA_BLOCKS,\n  TOTAL_SIZE,\n  LITTLE_ENDIAN,\n} = Ps1Basics;\n\n// DexDrive header\n\nconst HEADER_LENGTH = 3904;\n\nconst HEADER_MAGIC = '123-456-STD';\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst AVAILABLE_BLOCKS_OFFSET = 22;\nconst LINK_BLOCKS_OFFSET = 38;\n\n// MemcardRex uses the system default encoding for the comments (https://github.com/ShendoXT/memcardrex/blob/master/MemcardRex/ps1card.cs#L175), which is usually utf8.\n// I would guess that an old device like an actual DexDrive may instead use US-ASCII though.\n// But the actual devices don't really exist anymore and most/all of these files that exist today would be written out by MemcardRex?\nconst COMMENT_ENCODING = 'utf8';\nconst FIRST_COMMENT_OFFSET = 64;\nconst COMMENT_LENGTH = 256;\n\nfunction getCommentStartOffset(i) {\n  return FIRST_COMMENT_OFFSET + (i * COMMENT_LENGTH);\n}\n\n// https://github.com/ShendoXT/memcardrex/blob/master/MemcardRex/ps1card.cs#L689\nfunction getComments(headerArrayBuffer) {\n  const comments = [];\n  const textDecoder = new TextDecoder(COMMENT_ENCODING);\n\n  for (let i = 0; i < NUM_DATA_BLOCKS; i += 1) {\n    const commentStartOffset = getCommentStartOffset(i);\n    const commentArrayBuffer = headerArrayBuffer.slice(commentStartOffset, commentStartOffset + COMMENT_LENGTH);\n\n    comments.push(Util.trimNull(textDecoder.decode(commentArrayBuffer)).trim());\n  }\n\n  return comments;\n}\n\nexport default class Ps1DexDriveSaveData {\n  static createFromDexDriveData(dexDriveArrayBuffer) {\n    return new Ps1DexDriveSaveData(dexDriveArrayBuffer);\n  }\n\n  static createFromMemoryCardData(memcardArrayBuffer, comment) {\n    const memcardSaveData = Ps1MemcardSaveData.createFromPs1MemcardData(memcardArrayBuffer);\n\n    const memcardSaveDataFilesWithComments = memcardSaveData.getSaveFiles().map((file) => ({ ...file, comment }));\n\n    return Ps1DexDriveSaveData.createFromSaveFiles(memcardSaveDataFilesWithComments);\n  }\n\n  static createFromSaveFiles(saveFiles) {\n    // The DexDrive image is the DexDrive header then the regular memcard data\n\n    const memcardSaveData = Ps1MemcardSaveData.createFromSaveFiles(saveFiles);\n\n    const headerArrayBuffer = new ArrayBuffer(HEADER_LENGTH);\n    const headerArray = new Uint8Array(headerArrayBuffer);\n\n    const magicTextEncoder = new TextEncoder(MAGIC_ENCODING);\n    const commentTextEncoder = new TextEncoder(COMMENT_ENCODING);\n\n    // Make an array of our comments, arranged by the starting block of each save\n\n    const comments = Array.from({ length: NUM_DATA_BLOCKS }, () => null);\n\n    const memcardSaveDataFilesWithComments = memcardSaveData.getSaveFiles().map((file, i) => ({ ...file, comment: saveFiles[i].comment })); // Our list of save files from the memcard data is in the same order as the files were passed in\n\n    memcardSaveDataFilesWithComments.forEach((file) => { comments[file.startingBlock] = file.comment; });\n\n    // Based on https://github.com/ShendoXT/memcardrex/blob/master/MemcardRex/ps1card.cs#L145\n\n    headerArray.fill(0);\n\n    headerArray.set(magicTextEncoder.encode(HEADER_MAGIC), 0);\n    headerArray[18] = 0x1;\n    headerArray[20] = 0x1;\n    headerArray[21] = 0x4D; // M\n\n    for (let i = 0; i < NUM_DATA_BLOCKS; i += 1) {\n      const directoryFrame = memcardSaveData.getDirectoryFrame(i);\n      const directoryDataView = new DataView(directoryFrame);\n\n      const availableFlags = directoryDataView.getUint8(Ps1DirectoryBlock.DIRECTORY_FRAME_AVAILABLE_OFFSET);\n      const nextLinkedBlock = directoryDataView.getUint16(Ps1DirectoryBlock.DIRECTORY_FRAME_NEXT_BLOCK_OFFSET, LITTLE_ENDIAN);\n\n      headerArray[AVAILABLE_BLOCKS_OFFSET + i] = availableFlags;\n      headerArray[LINK_BLOCKS_OFFSET + i] = nextLinkedBlock;\n\n      // In theory with the link blocks we should do more work. With this implementation, we're just copying over whatever is in the link block, but in\n      // a real DexDrive file we'd want to set it to 0xFF if the available flags indicate that the block is available or unusable. This is because when data\n      // is erased the link block can still be set to something even though the block is marked as available.\n      //\n      // However, in our case, because we're making the memcard image from scratch, there's no possibility of this.\n\n      if (comments[i] !== null) {\n        const encodedComment = commentTextEncoder.encode(comments[i]).slice(0, COMMENT_LENGTH);\n\n        headerArray.set(encodedComment, getCommentStartOffset(i));\n      }\n    }\n\n    // Now that we've created our DexDrive header, we can create our final memory image. We'll parse it again\n    // to pull out the file descriptions\n\n    const finalArrayBuffer = Util.concatArrayBuffers([headerArrayBuffer, memcardSaveData.getArrayBuffer()]);\n\n    return Ps1DexDriveSaveData.createFromDexDriveData(finalArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a DexDrive save data file\n  constructor(arrayBuffer) {\n    this.arrayBuffer = arrayBuffer;\n\n    // Parse the DexDrive-specific header: magic and comments\n\n    let dexDriveHeaderArrayBuffer = arrayBuffer.slice(0, HEADER_LENGTH);\n    let memcardArrayBuffer = arrayBuffer.slice(HEADER_LENGTH); // The remainder of the file is the actual contents of the memory card\n\n    try {\n      Util.checkMagic(dexDriveHeaderArrayBuffer, 0, HEADER_MAGIC, MAGIC_ENCODING);\n    } catch (e) {\n      if (arrayBuffer.byteLength === TOTAL_SIZE) {\n        // Some files, found on gamefaqs primarily, are labeled as being dexdrive but are actually\n        // raw memcard images. This is likely due to gamefaqs' policy of only allowing \"legitimate\" saves\n        // and not those that could have come from an emulator.\n        dexDriveHeaderArrayBuffer = Util.getFilledArrayBuffer(HEADER_LENGTH, 0x00);\n        memcardArrayBuffer = arrayBuffer;\n      } else if (arrayBuffer.byteLength !== (HEADER_LENGTH + TOTAL_SIZE)) {\n        // For some files found on the Internet they just contain a completely blank header. Not sure what\n        // program makes them. But they're parseable by the rest of the code here even though they don't\n        // contain the correct magic\n\n        throw new Error('This does not appear to be a PS1 DexDrive file');\n      }\n    }\n\n    // Note that the DexDrive header also contains the Available flag for each block (beginning at offset 22), copied from the system header,\n    // and the link order for each block (beginning at offset 38), also copied from the system header.\n    // https://github.com/ShendoXT/memcardrex/blob/master/MemcardRex/ps1card.cs#L171\n\n    const comments = getComments(dexDriveHeaderArrayBuffer);\n\n    // Parse the rest of the file\n\n    this.memoryCard = Ps1MemcardSaveData.createFromPs1MemcardData(memcardArrayBuffer);\n\n    // Add in the comments we found in the header\n    this.saveFiles = this.memoryCard.getSaveFiles().map((x) => ({ ...x, comment: comments[x.startingBlock] }));\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getMemoryCard() {\n    return this.memoryCard;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PS1/Memcard.js",
    "content": "/*\nThe PS1 memcard format is described here:\nhttps://www.psdevwiki.com/ps3/PS1_Savedata#Virtual_Memory_Card_PS1_.28.VM1.29\n*/\n\nimport Ps1Basics from './Components/Basics';\nimport Ps1DirectoryBlock from './Components/DirectoryBlock';\nimport Ps1SaveBlocks from './Components/SaveBlocks';\n\nimport Util from '../../util/util';\n\nconst {\n  BLOCK_SIZE,\n  NUM_DATA_BLOCKS,\n  NUM_TOTAL_BLOCKS,\n} = Ps1Basics;\n\nfunction checkFile(file) {\n  Ps1SaveBlocks.checkMagic(file.rawData);\n\n  if (file.rawData.byteLength <= 0) {\n    throw new Error(`File ${file.filename} does not contain any data`);\n  }\n\n  if ((file.rawData.byteLength % BLOCK_SIZE) !== 0) {\n    throw new Error(`File ${file.filename} size must be a multiple of ${BLOCK_SIZE} bytes`);\n  }\n}\n\nexport default class Ps1MemcardSaveData {\n  static encodeFilename(filename, filenameTextEncoder) {\n    return Ps1DirectoryBlock.encodeFilename(filename, filenameTextEncoder);\n  }\n\n  static createFromPs1MemcardData(memcardArrayBuffer) {\n    return new Ps1MemcardSaveData(memcardArrayBuffer);\n  }\n\n  static createFromSaveFiles(saveFiles) {\n    // Make sure that each file has the correct magic, is a correct size, and the total size isn't bigger than a single memcard\n\n    saveFiles.forEach((f) => checkFile(f));\n\n    const totalSize = saveFiles.reduce((total, f) => total + f.rawData.byteLength, 0);\n    if (totalSize > (NUM_DATA_BLOCKS * BLOCK_SIZE)) {\n      throw new Error(`Total size of files is ${totalSize} bytes (${totalSize / BLOCK_SIZE} blocks) but max size is ${NUM_DATA_BLOCKS * BLOCK_SIZE} bytes (${NUM_DATA_BLOCKS} blocks)`);\n    }\n\n    // Create our directory frames + save blocks\n\n    const headerBlock = Ps1DirectoryBlock.createHeaderBlock(saveFiles);\n    const saveBlocks = Ps1SaveBlocks.createSaveBlocks(saveFiles);\n\n    // Concat all of our blocks together to form our memcard image\n\n    const arrayBuffer = Util.concatArrayBuffers([headerBlock, ...saveBlocks]);\n\n    // Now go back and re-parse the data we've created to get the description etc for each file\n\n    return new Ps1MemcardSaveData(arrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a PS1 memcard\n  constructor(arrayBuffer) {\n    this.arrayBuffer = arrayBuffer;\n\n    const headerArrayBuffer = arrayBuffer.slice(0, BLOCK_SIZE); // The first block describes the layout of the card, and is hidden from the user\n    const dataBlocksArrayBuffer = arrayBuffer.slice(BLOCK_SIZE, BLOCK_SIZE * NUM_TOTAL_BLOCKS); // The remaining blocks contain the actual save data\n\n    const saveFilesFromDirectory = Ps1DirectoryBlock.readDirectoryBlock(headerArrayBuffer);\n\n    this.saveFiles = saveFilesFromDirectory.map((saveFile) => Ps1SaveBlocks.readSaveBlocks(saveFile, dataBlocksArrayBuffer));\n  }\n\n  getDirectoryFrame(i) {\n    const headerArrayBuffer = this.arrayBuffer.slice(0, BLOCK_SIZE);\n    return Ps1DirectoryBlock.getDirectoryFrame(headerArrayBuffer, i);\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PS1/Ps3.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"^\"] }] */\n\n/*\nPS3 files are a bit different from the PSP/DexDrive files. The PS3 just imports/exports individual save files, so there's\nno representation of a whole memory card (there is one internally in the PS3, which is just a raw PS1 memory card,\nbut that's not user-facing unless the console is hacked)\n\nThe PS3 individual save files consist of a header then the regular PS1 save data. A description of the format can be\nfound here: https://psdevwiki.com/ps3/PS1_Savedata#PS1_Single_Save_.3F_.28.PSV.29\n\n*/\n\nimport Ps1Basics from './Components/Basics';\nimport Ps1MemcardSaveData from './Memcard';\nimport SonyUtil from './Components/SonyUtil';\nimport Util from '../../util/util';\n\nconst {\n  LITTLE_ENDIAN,\n  FRAME_SIZE,\n} = Ps1Basics;\n\n// PS3 header\n\nconst HEADER_LENGTH = 0x84;\n\nconst HEADER_MAGIC = '\\x00VSP\\x00\\x00\\x00\\x00';\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst SALT_SEED_OFFSET = 0x08;\nconst SALT_SEED_LENGTH = 0x14;\n\nconst SIGNATURE_OFFSET = 0x1C;\nconst SIGNATURE_LENGTH = 0x14;\n\nconst PLATFORM_INDICATOR_1_OFFSET = 0x38;\nconst PLATFORM_INDICATOR_2_OFFSET = 0x3C;\n\nconst PLATFORM_INDICATOR_1_PS1 = 0x14;\n// const PLATFORM_INDICATOR_1_PS2 = 0x2C;\nconst PLATFORM_INDICATOR_2_PS1 = 0x1;\n// const PLATFORM_INDICATOR_2_PS2 = 0x2;\n\nconst SAVE_SIZE_OFFSET = 0x40; // Size of the PS1/2 data in the save (so, excluding the PS3 header)\nconst SAVE_START_BYTE_OFFSET = 0x44; // How many bytes after the start of the file that the actual PS1/2 save starts\nconst SAVE_HEADER_SIZE_OFFSET = 0x48; // How big the initial \"SC\" header is within the save data\nconst SAVE_HEADER_SIZE_PS1 = FRAME_SIZE * 4;\n\nconst FILENAME_PRODUCT_CODE_OFFSET = 0x64;\nconst FILENAME_PRODUCT_CODE_LENGTH = 0x0C;\nconst FILENAME_DESCRIPTION_OFFSET = 0x70;\nconst FILENAME_DESCRIPTION_LENGTH = 0x08;\nconst FILENAME_ENCODING = 'US-ASCII';\n\n// Filename of a PS1 save in the style of uLaunchElf\nfunction getPs1IndividualFilename(ps3HeaderArrayBuffer, filenameTextDecoder) {\n  const offset = FILENAME_PRODUCT_CODE_OFFSET;\n  const length = FILENAME_PRODUCT_CODE_LENGTH + FILENAME_DESCRIPTION_LENGTH;\n\n  return Util.trimNull(filenameTextDecoder.decode(ps3HeaderArrayBuffer.slice(offset, offset + length)));\n}\n\n// Filename of a PS1 save in the style of a PS3:\n// It's the product code concatted with the description encoded as hex bytes\n// https://psdevwiki.com/ps3/PS1_Savedata#Filename_Format\nfunction getPs3IndividualFilename(ps3HeaderArrayBuffer, filenameTextDecoder) {\n  const productCode = Util.trimNull(\n    filenameTextDecoder.decode(\n      ps3HeaderArrayBuffer.slice(FILENAME_PRODUCT_CODE_OFFSET, FILENAME_PRODUCT_CODE_OFFSET + FILENAME_PRODUCT_CODE_LENGTH),\n    ),\n  );\n  const descriptionArrayBuffer = ps3HeaderArrayBuffer.slice(FILENAME_DESCRIPTION_OFFSET, FILENAME_DESCRIPTION_OFFSET + FILENAME_DESCRIPTION_LENGTH);\n  const descriptionArray = Util.getNullTerminatedArray(new Uint8Array(descriptionArrayBuffer), 0);\n  const descriptionEncoded = Util.uint8ArrayToHex(descriptionArray);\n\n  return `${productCode}${descriptionEncoded}.PSV`;\n}\n\nfunction createPs3SaveFile(ps1SaveFile) {\n  // First create the header\n\n  const ps3HeaderArrayBuffer = new ArrayBuffer(HEADER_LENGTH);\n  const ps3HeaderArray = new Uint8Array(ps3HeaderArrayBuffer);\n  const ps3HeaderDataView = new DataView(ps3HeaderArrayBuffer);\n\n  const magicTextEncoder = new TextEncoder(MAGIC_ENCODING);\n  const filenameTextEncoder = new TextEncoder(FILENAME_ENCODING);\n\n  const encodedFilename = Ps1MemcardSaveData.encodeFilename(ps1SaveFile.filename, filenameTextEncoder);\n\n  ps3HeaderArray.fill(0);\n\n  ps3HeaderArray.set(magicTextEncoder.encode(HEADER_MAGIC), 0);\n  ps3HeaderArray.set(new Uint8Array(SonyUtil.SALT_SEED_INIT), SALT_SEED_OFFSET);\n  ps3HeaderArray.set(encodedFilename, FILENAME_PRODUCT_CODE_OFFSET);\n\n  ps3HeaderDataView.setUint32(PLATFORM_INDICATOR_1_OFFSET, PLATFORM_INDICATOR_1_PS1, LITTLE_ENDIAN);\n  ps3HeaderDataView.setUint32(PLATFORM_INDICATOR_2_OFFSET, PLATFORM_INDICATOR_2_PS1, LITTLE_ENDIAN);\n  ps3HeaderDataView.setUint32(SAVE_SIZE_OFFSET, ps1SaveFile.rawData.byteLength, LITTLE_ENDIAN);\n  ps3HeaderDataView.setUint32(SAVE_START_BYTE_OFFSET, HEADER_LENGTH, LITTLE_ENDIAN);\n  ps3HeaderDataView.setUint32(SAVE_HEADER_SIZE_OFFSET, SAVE_HEADER_SIZE_PS1, LITTLE_ENDIAN);\n\n  // These are listed as \"unknown\" on the ps3 dev wiki: https://psdevwiki.com/ps3/PS1_Savedata#PS1_Single_Save_.3F_.28.PSV.29\n  // And in memcardrex they're filled in with the examples from the wiki: https://github.com/ShendoXT/memcardrex/blob/master/MemcardRex/ps1card.cs#L333\n  // So we'll follow along with memcardrex\n  ps3HeaderDataView.setUint32(0x5C, 0x2000, LITTLE_ENDIAN);\n  ps3HeaderDataView.setUint32(0x60, 0x9003, LITTLE_ENDIAN);\n\n  // Now we can calculate a signature\n\n  const combinedArrayBuffer = Util.concatArrayBuffers([ps3HeaderArrayBuffer, ps1SaveFile.rawData]);\n\n  const signature = SonyUtil.calculateSignature(combinedArrayBuffer, SonyUtil.SALT_SEED_INIT, SALT_SEED_LENGTH, SIGNATURE_OFFSET, SIGNATURE_LENGTH);\n\n  const ps3SaveDataArrayBuffer = Util.setArrayBufferPortion(combinedArrayBuffer, signature, SIGNATURE_OFFSET, 0, SIGNATURE_LENGTH);\n\n  // We're all done!\n\n  const filenameTextDecoder = new TextDecoder(FILENAME_ENCODING);\n\n  return {\n    startingBlock: ps1SaveFile.startingBlock,\n    filename: getPs3IndividualFilename(ps3HeaderArrayBuffer, filenameTextDecoder),\n    description: ps1SaveFile.description,\n    rawData: ps3SaveDataArrayBuffer,\n  };\n}\n\nexport default class Ps3SaveData {\n  static createFromPs3SaveFiles(ps3SaveFiles) {\n    // The PS3 image is the PS3 header then the regular memcard data\n\n    const filenameTextDecoder = new TextDecoder(FILENAME_ENCODING);\n\n    const ps1SaveFiles = ps3SaveFiles.map((ps3SaveFile) => {\n      // Parse the PS3-specific header\n\n      const ps1SaveDataArrayBuffer = ps3SaveFile.rawData.slice(HEADER_LENGTH);\n      const ps3HeaderArrayBuffer = ps3SaveFile.rawData.slice(0, HEADER_LENGTH);\n      const ps3HeaderDataView = new DataView(ps3HeaderArrayBuffer);\n\n      Util.checkMagic(ps3HeaderArrayBuffer, 0, HEADER_MAGIC, MAGIC_ENCODING);\n\n      // Check the signature\n\n      const saltSeed = ps3HeaderArrayBuffer.slice(SALT_SEED_OFFSET, SALT_SEED_OFFSET + SALT_SEED_LENGTH);\n      const signatureCalculated = SonyUtil.calculateSignature(ps3SaveFile.rawData, saltSeed, SALT_SEED_LENGTH, SIGNATURE_OFFSET, SIGNATURE_LENGTH);\n      const signatureFound = Buffer.from(ps3HeaderArrayBuffer.slice(SIGNATURE_OFFSET, SIGNATURE_OFFSET + SIGNATURE_LENGTH));\n\n      if (signatureFound.compare(signatureCalculated) !== 0) {\n        throw new Error(`Save appears to be corrupted: expected signature ${signatureFound.toString('hex')} but calculated signature ${signatureCalculated.toString('hex')}`);\n      }\n\n      // Check the platform\n\n      const platformIndicator1 = ps3HeaderDataView.getUint32(PLATFORM_INDICATOR_1_OFFSET, LITTLE_ENDIAN);\n      const platformIndicator2 = ps3HeaderDataView.getUint32(PLATFORM_INDICATOR_2_OFFSET, LITTLE_ENDIAN);\n\n      if ((platformIndicator1 !== PLATFORM_INDICATOR_1_PS1) || (platformIndicator2 !== PLATFORM_INDICATOR_2_PS1)) {\n        throw new Error('This does not appear to be a PS1 save file');\n      }\n\n      // Check the size etc\n\n      const saveSize = ps3HeaderDataView.getUint32(SAVE_SIZE_OFFSET, LITTLE_ENDIAN);\n      const saveStartByte = ps3HeaderDataView.getUint32(SAVE_START_BYTE_OFFSET, LITTLE_ENDIAN);\n      const saveHeaderSize = ps3HeaderDataView.getUint32(SAVE_HEADER_SIZE_OFFSET, LITTLE_ENDIAN);\n\n      if (saveSize !== ps1SaveDataArrayBuffer.byteLength) {\n        throw new Error(`Size mismatch: size is specified as ${saveSize} bytes in the header but actual save size is ${ps1SaveDataArrayBuffer.byteLength} bytes`);\n      }\n\n      if (saveStartByte !== HEADER_LENGTH) {\n        throw new Error('Save appears to be corrupted: save start byte does not match header size');\n      }\n\n      if (saveHeaderSize !== SAVE_HEADER_SIZE_PS1) {\n        throw new Error(`Save appears to be corrupted: save header size appears incorrect. Got ${saveHeaderSize}`);\n      }\n\n      // Everything checks out\n      //\n      // Note that because we're creating this from PS1 save files, the new PS3 files that are created from this\n      // will have a different salt seed and thus signature than the original ones. In theory, we should be outputting\n      // the original PS3 saves again, but in practice who would want to convert a PS3 save to a PS3 save? So it shouldn't matter.\n\n      return {\n        startingBlock: null, // Not needed to be set\n        filename: getPs1IndividualFilename(ps3HeaderArrayBuffer, filenameTextDecoder),\n        description: null, // Not needed to be set\n        rawData: ps1SaveDataArrayBuffer,\n      };\n    });\n\n    const memcardSaveData = Ps1MemcardSaveData.createFromSaveFiles(ps1SaveFiles);\n\n    return new Ps3SaveData(memcardSaveData.getArrayBuffer());\n  }\n\n  static createFromPs1SaveFiles(ps1SaveFiles) {\n    const memcardSaveData = Ps1MemcardSaveData.createFromSaveFiles(ps1SaveFiles);\n\n    return new Ps3SaveData(memcardSaveData.getArrayBuffer());\n  }\n\n  // This constructor creates a new object from a binary representation of a PS1 save data file\n  constructor(arrayBuffer) {\n    this.memoryCard = Ps1MemcardSaveData.createFromPs1MemcardData(arrayBuffer);\n\n    this.saveFiles = this.memoryCard.getSaveFiles();\n\n    this.ps3SaveFiles = this.saveFiles.map((ps1SaveFile) => createPs3SaveFile(ps1SaveFile));\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getPs3SaveFiles() {\n    return this.ps3SaveFiles;\n  }\n\n  getMemoryCard() {\n    return this.memoryCard;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PS1/Psp.js",
    "content": "/*\nThe PSP data format for PS1 Classics is:\n- 128 byte header that contains a seed and a signature\n- Normal PS1 memory card data\n\nThe format is described here: https://www.psdevwiki.com/ps3/PS1_Savedata#Virtual_Memory_Card_PSP_.28.VMP.29\n\nNote that the description of the signature in that link is incorrect. The signature is generated using a convoluted series\nof encryption and hashes with some other random operations thrown in for good measure. The implementation below is\nbased on https://github.com/dots-tb/vita-mcr2vmp\n*/\n\n// Also, rather than importing the node crypto module, which is huge, we're going to use\n// just a portion of it as implemented in https://github.com/crypto-browserify/createHash\n\nimport Ps1MemcardSaveData from './Memcard';\nimport SonyUtil from './Components/SonyUtil';\nimport Util from '../../util/util';\n\n// PSP header\n\nconst HEADER_LENGTH = 0x80;\nconst HEADER_MAGIC = [0, 0x50, 0x4D, 0x56, HEADER_LENGTH, 0, 0, 0, 0, 0, 0, 0]; // 'PMV' + the header length. The 0x80 byte is problematic for decoding into US-ASCII (or other charsets), so just do this one as an array\n\nconst SALT_SEED_OFFSET = 0x0C;\nconst SALT_SEED_LENGTH = 0x14;\n\nconst SIGNATURE_OFFSET = 0x20;\nconst SIGNATURE_LENGTH = 0x14;\n\nexport default class PspSaveData {\n  static createFromPspData(pspArrayBuffer) {\n    return new PspSaveData(pspArrayBuffer);\n  }\n\n  static createFromMemoryCardData(memcardArrayBuffer) {\n    // The PSP image is the PSP header then the regular memcard data\n\n    // First, construct the basic header from the magic and the initial salt seed\n\n    const headerArrayBuffer = new ArrayBuffer(HEADER_LENGTH);\n    const headerArray = new Uint8Array(headerArrayBuffer);\n    const memcardSaveData = Ps1MemcardSaveData.createFromPs1MemcardData(memcardArrayBuffer);\n\n    headerArray.set(HEADER_MAGIC, 0);\n\n    const saltSeedArray = new Uint8Array(SonyUtil.SALT_SEED_INIT);\n\n    headerArray.set(saltSeedArray, SALT_SEED_OFFSET);\n\n    // Then concat that with the rest of the memcard data\n\n    const combinedArrayBuffer = Util.concatArrayBuffers([headerArrayBuffer, memcardSaveData.getArrayBuffer()]);\n\n    // Now we can calculate our signature\n\n    const saltSeed = Util.bufferToArrayBuffer(SonyUtil.SALT_SEED_INIT);\n    const signatureCalculated = SonyUtil.calculateSignature(combinedArrayBuffer, saltSeed, SALT_SEED_LENGTH, SIGNATURE_OFFSET, SIGNATURE_LENGTH);\n\n    // Inject the signature and we're done! We'll parse it again\n    // to pull out the file descriptions\n\n    const finalArrayBuffer = Util.setArrayBufferPortion(combinedArrayBuffer, signatureCalculated, SIGNATURE_OFFSET, 0, SIGNATURE_LENGTH);\n\n    return PspSaveData.createFromPspData(finalArrayBuffer);\n  }\n\n  static createFromSaveFiles(saveFiles) {\n    const memcardSaveData = Ps1MemcardSaveData.createFromSaveFiles(saveFiles);\n\n    return PspSaveData.createFromMemoryCardData(memcardSaveData.getArrayBuffer());\n  }\n\n  // This constructor creates a new object from a binary representation of a PSP PS1 save data file\n  constructor(arrayBuffer) {\n    this.arrayBuffer = arrayBuffer;\n\n    // Parse the PSP-specific header\n\n    const pspHeaderArrayBuffer = arrayBuffer.slice(0, HEADER_LENGTH);\n\n    Util.checkMagicBytes(pspHeaderArrayBuffer, 0, HEADER_MAGIC);\n\n    const saltSeed = pspHeaderArrayBuffer.slice(SALT_SEED_OFFSET, SALT_SEED_OFFSET + SALT_SEED_LENGTH);\n    const signatureCalculated = SonyUtil.calculateSignature(arrayBuffer, saltSeed, SALT_SEED_LENGTH, SIGNATURE_OFFSET, SIGNATURE_LENGTH);\n\n    // Check the signature we generated against the one we found\n\n    const signatureFound = Buffer.from(pspHeaderArrayBuffer.slice(SIGNATURE_OFFSET, SIGNATURE_OFFSET + SIGNATURE_LENGTH));\n\n    if (signatureFound.compare(signatureCalculated) !== 0) {\n      throw new Error(`Save appears to be corrupted: expected signature ${signatureFound.toString('hex')} but calculated signature ${signatureCalculated.toString('hex')}`);\n    }\n\n    // Parse the rest of the file\n    const memcardArrayBuffer = arrayBuffer.slice(HEADER_LENGTH); // The remainder of the file is the actual contents of the memory card\n\n    this.memoryCard = Ps1MemcardSaveData.createFromPs1MemcardData(memcardArrayBuffer);\n\n    this.saveFiles = this.memoryCard.getSaveFiles();\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getMemoryCard() {\n    return this.memoryCard;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PSP/Executable.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport PspEncryptionUtil from './PspEncryptionUtil';\nimport Util from '../../util/util';\nimport CompressionGzip from '../../util/CompressionGzip';\n\n// The header structure of this file is described here: https://github.com/hrydgard/ppsspp/blob/master/Core/ELF/PrxDecrypter.h#L26\n\nconst LITTLE_ENDIAN = true;\n\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst ENCRYPTED_MAGIC_OFFSET = 0;\nconst UNENCRYPTED_MAGIC_OFFSET = 0;\nconst ENCRYPTED_MAGIC = '~PSP';\nconst ELF_MAGIC = '\\x7FELF';\nconst ELF_MAGIC_OFFSET = 0x150;\n\nconst COMPRESSION_ATTRIBUTES_OFFSET = 0x06;\nconst ELF_SIZE_OFFSET = 0x28;\nconst PSP_SIZE_OFFSET = 0x2C;\n\nconst COMPRESSION_ATTRIBUTES_IS_GZIP = 0x01;\n\nexport default class PspExecutable {\n  // This is based on __KernelLoadELFFromPtr() from https://github.com/hrydgard/ppsspp/blob/2a372caef9acbc7ff20bcca3c25b2ab92294f283/Core/HLE/sceKernelModule.cpp#L1250\n  static createFromEncryptedData(encryptedExecutableArrayBuffer) {\n    // First get some information from our header\n\n    Util.checkMagic(encryptedExecutableArrayBuffer, ENCRYPTED_MAGIC_OFFSET, ENCRYPTED_MAGIC, MAGIC_ENCODING);\n\n    const headerDataView = new DataView(encryptedExecutableArrayBuffer);\n\n    const compressionAttributes = headerDataView.getUint16(COMPRESSION_ATTRIBUTES_OFFSET, LITTLE_ENDIAN);\n    const elfSize = headerDataView.getUint32(ELF_SIZE_OFFSET, LITTLE_ENDIAN);\n    const pspSize = headerDataView.getUint32(PSP_SIZE_OFFSET, LITTLE_ENDIAN);\n\n    const isGzipped = ((compressionAttributes & COMPRESSION_ATTRIBUTES_IS_GZIP) !== 0);\n    const maxElfSize = Math.max(elfSize, pspSize);\n\n    // Call our function to decrypt the data\n\n    let unencryptedExecutableArrayBuffer = Util.getFilledArrayBuffer(maxElfSize, 0x00);\n\n    const unencryptedExecutablePtr = PspEncryptionUtil.bufferToPtr(unencryptedExecutableArrayBuffer);\n    const encryptedExecutablePtr = PspEncryptionUtil.bufferToPtr(encryptedExecutableArrayBuffer);\n\n    let executableSize = PspEncryptionUtil.decryptExecutable(encryptedExecutablePtr, unencryptedExecutablePtr, pspSize);\n\n    // Apparently there can be an ELF hiding inside\n    // Taken from https://github.com/hrydgard/ppsspp/blob/2a372caef9acbc7ff20bcca3c25b2ab92294f283/Core/HLE/sceKernelModule.cpp#L1320\n    if (executableSize <= 0) {\n      Util.checkMagic(encryptedExecutableArrayBuffer, ELF_MAGIC_OFFSET, ELF_MAGIC, MAGIC_ENCODING);\n      executableSize = pspSize - ELF_MAGIC_OFFSET;\n      unencryptedExecutableArrayBuffer = encryptedExecutableArrayBuffer.slice(ELF_MAGIC_OFFSET, ELF_MAGIC_OFFSET + executableSize);\n    } else {\n      unencryptedExecutableArrayBuffer = PspEncryptionUtil.ptrToArrayBuffer(unencryptedExecutablePtr, pspSize);\n    }\n\n    PspEncryptionUtil.free(encryptedExecutablePtr);\n    PspEncryptionUtil.free(unencryptedExecutablePtr);\n\n    // See if we need to decompress our unencrypted data\n\n    if (isGzipped) {\n      unencryptedExecutableArrayBuffer = CompressionGzip.decompress(unencryptedExecutableArrayBuffer);\n    }\n\n    // Final check that we've got an ELF file\n\n    Util.checkMagic(unencryptedExecutableArrayBuffer, UNENCRYPTED_MAGIC_OFFSET, ELF_MAGIC, MAGIC_ENCODING);\n\n    const executableInfo = {\n      compressionAttributes,\n      elfSize,\n      pspSize,\n    };\n\n    return new PspExecutable(encryptedExecutableArrayBuffer, unencryptedExecutableArrayBuffer, executableInfo);\n  }\n\n  // This constructor creates a new object from the encrypted and unencrypted binary representations of a PSP executable\n  constructor(encryptedArrayBuffer, unencryptedArrayBuffer, executableInfo) {\n    this.encryptedArrayBuffer = encryptedArrayBuffer;\n    this.unencryptedArrayBuffer = unencryptedArrayBuffer;\n    this.executableInfo = executableInfo;\n  }\n\n  getUnencryptedArrayBuffer() {\n    return this.unencryptedArrayBuffer;\n  }\n\n  getEncryptedArrayBuffer() {\n    return this.encryptedArrayBuffer;\n  }\n\n  getExecutableInfo() {\n    return this.executableInfo;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PSP/ParamSfo.js",
    "content": "// Based on https://github.com/hrydgard/ppsspp/blob/master/Core/ELF/ParamSFO.cpp\n\n// The overall format is:\n// - Header\n// - N index table entries\n// - Key table (all the keys, one after another)\n// - Value table (all the values, one after another)\n\n// Some interesting info regarding the 'REGION' key/value pair, which always seems to be set to 32768: https://github.com/hrydgard/ppsspp/issues/12639\n\nimport Util from '../../util/util';\n\nconst LITTLE_ENDIAN = true;\n\nconst MAGIC = '\\x00PSF';\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst EXPECTED_VERSION = 0x00000101; // v1.1\n\n// Header information -- all offsets from the start of the file\nconst MAGIC_OFFSET = 0;\nconst VERSION_OFFSET = 4;\nconst KEY_TABLE_START_OFFSET = 8;\nconst VALUE_TABLE_START_OFFSET = 12;\nconst NUM_INDEX_TABLE_ENTRIES_OFFSET = 16;\nconst FIRST_INDEX_TABLE_ENTRY_OFFSET = 20;\n\n// Index table entry -- all offsets from the start of that entry\nconst INDEX_TABLE_KEY_OFFSET = 0;\nconst INDEX_TABLE_VALUE_FORMAT_OFFSET = 2;\nconst INDEX_TABLE_VALUE_LENGTH_OFFSET = 4;\nconst INDEX_TABLE_VALUE_MAX_LENGTH_OFFSET = 8;\nconst INDEX_TABLE_VALUE_OFFSET = 12;\nconst INDEX_TABLE_ENTRY_SIZE = 16;\n\nconst VALUE_FORMAT_UINT32 = 0x0404;\nconst VALUE_FORMAT_UTF8_STRING = 0x0204;\nconst VALUE_FORMAT_SPECIAL_UTF8_STRING = 0x0004;\n\nconst KEY_ENCODING = 'US-ASCII';\nconst VALUE_ENCODING_UTF8 = 'UTF-8';\n\nfunction getErrorMessage(fileVersion) {\n  if (fileVersion === EXPECTED_VERSION) {\n    return 'Encountered error parsing PARAM.SFO. File was expected version.';\n  }\n\n  return `Encountered error parsing PARAM.SFO. Found file version 0x${fileVersion.toString(16)}, but expected file version 0x${EXPECTED_VERSION.toString(16)}`;\n}\n\nexport default class PspParamSfo {\n  constructor(arrayBuffer) {\n    const fileSize = arrayBuffer.byteLength;\n\n    Util.checkMagic(arrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const fileDataView = new DataView(arrayBuffer);\n    const fileUint8Array = new Uint8Array(arrayBuffer);\n\n    const fileVersion = fileDataView.getUint32(VERSION_OFFSET, LITTLE_ENDIAN);\n    const keyTableStart = fileDataView.getUint32(KEY_TABLE_START_OFFSET, LITTLE_ENDIAN);\n    const valueTableStart = fileDataView.getUint32(VALUE_TABLE_START_OFFSET, LITTLE_ENDIAN);\n    const numIndexTableEntries = fileDataView.getUint32(NUM_INDEX_TABLE_ENTRIES_OFFSET, LITTLE_ENDIAN);\n\n    if ((keyTableStart > fileSize) || (valueTableStart > fileSize)) {\n      throw new Error(getErrorMessage(fileVersion));\n    }\n\n    this.keyValuePairs = {};\n\n    for (let i = 0; i < numIndexTableEntries; i += 1) {\n      // We're iterating through an array of these index table entries in memory, so make\n      // a slice of our original arraybuffer to make everything a little easier to read\n      const indexTableEntryOffset = FIRST_INDEX_TABLE_ENTRY_OFFSET + (i * INDEX_TABLE_ENTRY_SIZE);\n      const indexTableEntryArrayBuffer = arrayBuffer.slice(indexTableEntryOffset, indexTableEntryOffset + INDEX_TABLE_ENTRY_SIZE);\n      const indexTableEntryDataView = new DataView(indexTableEntryArrayBuffer);\n\n      const keyOffset = keyTableStart + indexTableEntryDataView.getUint16(INDEX_TABLE_KEY_OFFSET, LITTLE_ENDIAN);\n      const valueOffset = valueTableStart + indexTableEntryDataView.getUint32(INDEX_TABLE_VALUE_OFFSET, LITTLE_ENDIAN);\n\n      if ((keyOffset > fileSize) || (valueOffset > fileSize)) {\n        throw new Error(getErrorMessage(fileVersion));\n      }\n\n      const key = Util.readNullTerminatedString(fileUint8Array, keyOffset, KEY_ENCODING);\n      let value = null;\n\n      const valueFormat = indexTableEntryDataView.getUint16(INDEX_TABLE_VALUE_FORMAT_OFFSET, LITTLE_ENDIAN);\n      const valueLength = indexTableEntryDataView.getUint32(INDEX_TABLE_VALUE_LENGTH_OFFSET, LITTLE_ENDIAN);\n      const valueMaxLength = indexTableEntryDataView.getUint32(INDEX_TABLE_VALUE_MAX_LENGTH_OFFSET, LITTLE_ENDIAN);\n\n      switch (valueFormat) {\n        case VALUE_FORMAT_UINT32: {\n          value = fileDataView.getUint32(valueOffset, LITTLE_ENDIAN);\n          break;\n        }\n\n        case VALUE_FORMAT_UTF8_STRING: {\n          value = Util.readNullTerminatedString(fileUint8Array, valueOffset, VALUE_ENCODING_UTF8, valueMaxLength);\n          break;\n        }\n\n        case VALUE_FORMAT_SPECIAL_UTF8_STRING: {\n          value = fileUint8Array.slice(valueOffset, valueOffset + valueLength); // I'm not sure what this is for, but PPSSPP stores it as a copy of the raw data: https://github.com/hrydgard/ppsspp/blob/309dcb295268af657ee186dc57d825512ad8091c/Core/ELF/ParamSFO.cpp#L260\n          break;\n        }\n\n        default: {\n          break;\n        }\n      }\n\n      if (value !== null) {\n        this.keyValuePairs[key] = value;\n      }\n    }\n  }\n\n  getValue(key) {\n    return this.keyValuePairs[key];\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PSP/PspEncryptionUtil.js",
    "content": "/* eslint-disable no-underscore-dangle */\n\nimport createModule from '@/save-formats/PSP/psp-encryption/psp-encryption';\nimport pspEncryptionWasm from './psp-encryption/psp-encryption.wasm';\n\nasync function getModuleInstance() {\n  // We want to use this formulation when in tests to get the file from our local machine in the src/ dir\n\n  // Our tests run within jsdom, which mimics a browser environment\n  // But the wasm stuff expects node\n  const isTest = typeof navigator === 'object' && (navigator.userAgent.includes('Node.js') || navigator.userAgent.includes('jsdom')); // https://github.com/jsdom/jsdom/issues/1537\n\n  let moduleOverrides = {};\n\n  if (isTest) {\n    // Hacks to bypass checks after ENVIRONMENT_IS_NODE in psp-encryption.js\n    process.release = {\n      name: 'node',\n    };\n    process.versions = {\n      node: 'v22.13.1',\n    };\n\n    moduleOverrides = {\n      locateFile: (s) => `src/save-formats/PSP/psp-encryption/${s}`,\n    };\n  } else {\n    // WASM integration with webpack 5 based on: https://gist.github.com/surma/b2705b6cca29357ebea1c9e6e15684cc\n    moduleOverrides = {\n      locateFile: (s) => {\n        if (s.endsWith('.wasm')) {\n          return pspEncryptionWasm;\n        }\n        return s;\n      },\n    };\n  }\n\n  return createModule(moduleOverrides);\n}\n\nexport default class PspEncryptionUtil {\n  static async init(deterministicSeed = null) {\n    PspEncryptionUtil.moduleInstance = await getModuleInstance();\n\n    if (deterministicSeed === null) {\n      PspEncryptionUtil.moduleInstance._kirk_init();\n    } else {\n      PspEncryptionUtil.moduleInstance._kirk_init_deterministic(deterministicSeed);\n    }\n\n    PspEncryptionUtil.decryptSaveData = PspEncryptionUtil.moduleInstance.cwrap('decrypt_save_buffer', 'number', ['number', 'number', 'number']);\n    PspEncryptionUtil.encryptSaveData = PspEncryptionUtil.moduleInstance.cwrap('encrypt_save_buffer', 'number', ['number', 'number', 'number', 'number', 'number', 'string', 'number']);\n    PspEncryptionUtil.decryptExecutable = PspEncryptionUtil.moduleInstance.cwrap('decrypt_executable', 'number', ['number', 'number', 'number']);\n  }\n\n  static bufferToPtr(buffer) {\n    const array = new Uint8Array(buffer);\n\n    const ptr = PspEncryptionUtil.moduleInstance._malloc(array.length);\n\n    for (let i = 0; i < array.length; i += 1) {\n      PspEncryptionUtil.moduleInstance.setValue(ptr + i, array[i], 'i8');\n    }\n\n    return ptr;\n  }\n\n  static ptrToArrayBuffer(ptr, length) {\n    const arrayBuffer = new ArrayBuffer(length);\n    const array = new Uint8Array(arrayBuffer);\n\n    for (let i = 0; i < length; i += 1) {\n      array[i] = PspEncryptionUtil.moduleInstance.getValue(ptr + i, 'i8');\n    }\n\n    return arrayBuffer;\n  }\n\n  static intToPtr(n) {\n    const ptr = PspEncryptionUtil.moduleInstance._malloc(4);\n\n    PspEncryptionUtil.moduleInstance.setValue(ptr, n, 'i32');\n\n    return ptr;\n  }\n\n  static ptrToInt(ptr) {\n    return PspEncryptionUtil.moduleInstance.getValue(ptr, 'i32');\n  }\n\n  static free(ptr) {\n    PspEncryptionUtil.moduleInstance._free(ptr);\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PSP/Savefile.js",
    "content": "import PspEncryptionUtil from './PspEncryptionUtil';\n\n// const INCORRECT_FORMAT_ERROR_MESSAGE = 'This does not appear to be a PSP save file';\n\nexport default class PspSaveData {\n  static createFromEncryptedData(encryptedArrayBuffer, gameKey) {\n    let dataLength = encryptedArrayBuffer.byteLength;\n\n    const encryptedArrayPtr = PspEncryptionUtil.bufferToPtr(encryptedArrayBuffer);\n    const gameKeyPtr = PspEncryptionUtil.bufferToPtr(gameKey);\n\n    const dataLengthPtr = PspEncryptionUtil.intToPtr(dataLength);\n\n    const result = PspEncryptionUtil.decryptSaveData(encryptedArrayPtr, dataLengthPtr, gameKeyPtr);\n\n    if (result !== 0) {\n      throw new Error(`Encountered error ${result} trying to decrypt save data`);\n    }\n\n    dataLength = PspEncryptionUtil.ptrToInt(dataLengthPtr);\n\n    const unencryptedArrayBuffer = PspEncryptionUtil.ptrToArrayBuffer(encryptedArrayPtr, dataLength);\n\n    PspEncryptionUtil.free(dataLengthPtr);\n    PspEncryptionUtil.free(gameKeyPtr);\n    PspEncryptionUtil.free(encryptedArrayPtr);\n\n    return new PspSaveData(encryptedArrayBuffer, unencryptedArrayBuffer, null);\n  }\n\n  static createFromUnencryptedData(unencryptedArrayBuffer, encryptedFilename, paramSfoArrayBuffer, gameKey) {\n    let dataLength = unencryptedArrayBuffer.byteLength;\n\n    const unencryptedArrayPtr = PspEncryptionUtil.bufferToPtr(unencryptedArrayBuffer);\n    const encryptedArrayPtrPtr = PspEncryptionUtil.intToPtr(0);\n    const paramSfoArrayPtr = PspEncryptionUtil.bufferToPtr(paramSfoArrayBuffer);\n    const gameKeyPtr = PspEncryptionUtil.bufferToPtr(gameKey);\n\n    const dataLengthPtr = PspEncryptionUtil.intToPtr(dataLength);\n    const paramSfoLength = paramSfoArrayBuffer.byteLength;\n\n    const result = PspEncryptionUtil.encryptSaveData(unencryptedArrayPtr, encryptedArrayPtrPtr, dataLengthPtr, paramSfoArrayPtr, paramSfoLength, encryptedFilename, gameKeyPtr);\n\n    if (result !== 0) {\n      throw new Error(`Encountered error ${result} trying to decrypt save data`);\n    }\n\n    const encryptedArrayPtr = PspEncryptionUtil.ptrToInt(encryptedArrayPtrPtr);\n\n    dataLength = PspEncryptionUtil.ptrToInt(dataLengthPtr);\n\n    const encryptedArrayBuffer = PspEncryptionUtil.ptrToArrayBuffer(encryptedArrayPtr, dataLength);\n    const newParamSfoArrayBuffer = PspEncryptionUtil.ptrToArrayBuffer(paramSfoArrayPtr, paramSfoLength);\n\n    PspEncryptionUtil.free(dataLengthPtr);\n    PspEncryptionUtil.free(encryptedArrayPtrPtr);\n    PspEncryptionUtil.free(encryptedArrayPtr); // This was allocated in C++ but must be free'd here\n    PspEncryptionUtil.free(gameKeyPtr);\n    PspEncryptionUtil.free(paramSfoArrayPtr);\n    PspEncryptionUtil.free(unencryptedArrayPtr);\n\n    return new PspSaveData(encryptedArrayBuffer, unencryptedArrayBuffer, newParamSfoArrayBuffer);\n  }\n\n  // This constructor creates a new object from the encrypted and unencrypted binary representations of a PSP save data file\n  constructor(encryptedArrayBuffer, unencryptedArrayBuffer, paramSfoArrayBuffer) {\n    this.encryptedArrayBuffer = encryptedArrayBuffer;\n    this.unencryptedArrayBuffer = unencryptedArrayBuffer;\n    this.paramSfoArrayBuffer = paramSfoArrayBuffer;\n  }\n\n  getUnencryptedArrayBuffer() {\n    return this.unencryptedArrayBuffer;\n  }\n\n  getEncryptedArrayBuffer() {\n    return this.encryptedArrayBuffer;\n  }\n\n  getParamSfoArrayBuffer() {\n    return this.paramSfoArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/PSP/psp-encryption/psp-encryption.js",
    "content": "var createModule = (() => {\n  var _scriptName = import.meta.url;\n  \n  return (\nasync function(moduleArg = {}) {\n  var moduleRtn;\n\nvar Module=moduleArg;var readyPromiseResolve,readyPromiseReject;var readyPromise=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject});var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!=\"undefined\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&typeof process.versions==\"object\"&&typeof process.versions.node==\"string\"&&process.type!=\"renderer\";if(ENVIRONMENT_IS_NODE){const{createRequire}=await import(\"module\");var require=createRequire(\"/\")}var moduleOverrides=Object.assign({},Module);var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");var nodePath=require(\"path\");if(!import.meta.url.startsWith(\"data:\")){scriptDirectory=nodePath.dirname(require(\"url\").fileURLToPath(import.meta.url))+\"/\"}readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:\"utf8\");return ret};if(!Module[\"thisProgram\"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,\"/\")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!=\"undefined\"&&document.currentScript){scriptDirectory=document.currentScript.src}if(_scriptName){scriptDirectory=_scriptName}if(scriptDirectory.startsWith(\"blob:\")){scriptDirectory=\"\"}else{scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,\"\").lastIndexOf(\"/\")+1)}{readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{}var out=Module[\"print\"]||console.log.bind(console);var err=Module[\"printErr\"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"];var wasmBinary=Module[\"wasmBinary\"];var wasmMemory;var ABORT=false;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;var dataURIPrefix=\"data:application/octet-stream;base64,\";var isDataURI=filename=>filename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith(\"file://\");function updateMemoryViews(){var b=wasmMemory.buffer;Module[\"HEAP8\"]=HEAP8=new Int8Array(b);Module[\"HEAP16\"]=HEAP16=new Int16Array(b);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(b);Module[\"HEAPU16\"]=HEAPU16=new Uint16Array(b);Module[\"HEAP32\"]=HEAP32=new Int32Array(b);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(b);Module[\"HEAPF32\"]=HEAPF32=new Float32Array(b);Module[\"HEAPF64\"]=HEAPF64=new Float64Array(b);Module[\"HEAP64\"]=HEAP64=new BigInt64Array(b);Module[\"HEAPU64\"]=HEAPU64=new BigUint64Array(b)}var __ATPRERUN__=[];var __ATINIT__=[];var __ATPOSTRUN__=[];function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(__ATPRERUN__)}function initRuntime(){runtimeInitialized=true;callRuntimeCallbacks(__ATINIT__)}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(__ATPOSTRUN__)}function addOnPreRun(cb){__ATPRERUN__.unshift(cb)}function addOnInit(cb){__ATINIT__.unshift(cb)}function addOnPostRun(cb){__ATPOSTRUN__.unshift(cb)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module[\"monitorRunDependencies\"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module[\"monitorRunDependencies\"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module[\"onAbort\"]?.(what);what=\"Aborted(\"+what+\")\";err(what);ABORT=true;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject(e);throw e}var wasmBinaryFile;function findWasmBinary(){if(Module[\"locateFile\"]){var f=\"psp-encryption.wasm\";if(!isDataURI(f)){return locateFile(f)}return f}return new URL(\"psp-encryption.wasm\",import.meta.url).href}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports[\"c\"];updateMemoryViews();addOnInit(wasmExports[\"d\"]);removeRunDependency(\"wasm-instantiate\");return wasmExports}addRunDependency(\"wasm-instantiate\");function receiveInstantiationResult(result){return receiveInstance(result[\"instance\"])}var info=getWasmImports();if(Module[\"instantiateWasm\"]){try{return Module[\"instantiateWasm\"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);readyPromiseReject(e)}}wasmBinaryFile??=findWasmBinary();try{var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}catch(e){readyPromiseReject(e);return Promise.reject(e)}}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};function getValue(ptr,type=\"i8\"){if(type.endsWith(\"*\"))type=\"*\";switch(type){case\"i1\":return HEAP8[ptr];case\"i8\":return HEAP8[ptr];case\"i16\":return HEAP16[ptr>>1];case\"i32\":return HEAP32[ptr>>2];case\"i64\":return HEAP64[ptr>>3];case\"float\":return HEAPF32[ptr>>2];case\"double\":return HEAPF64[ptr>>3];case\"*\":return HEAPU32[ptr>>2];default:abort(`invalid type for getValue: ${type}`)}}var noExitRuntime=Module[\"noExitRuntime\"]||true;function setValue(ptr,value,type=\"i8\"){if(type.endsWith(\"*\"))type=\"*\";switch(type){case\"i1\":HEAP8[ptr]=value;break;case\"i8\":HEAP8[ptr]=value;break;case\"i16\":HEAP16[ptr>>1]=value;break;case\"i32\":HEAP32[ptr>>2]=value;break;case\"i64\":HEAP64[ptr>>3]=BigInt(value);break;case\"float\":HEAPF32[ptr>>2]=value;break;case\"double\":HEAPF64[ptr>>3]=value;break;case\"*\":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var _emscripten_date_now=()=>Date.now();var abortOnCannotGrowMemory=requestedSize=>{abort(\"OOM\")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var getCFunc=ident=>{var func=Module[\"_\"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i<str.length;++i){var c=str.charCodeAt(i);if(c<=127){len++}else if(c<=2047){len+=2}else if(c>=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i<str.length;++i){var u=str.charCodeAt(i);if(u>=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx<endPtr){var u0=heapOrArray[idx++];if(!(u0&128)){str+=String.fromCharCode(u0);continue}var u1=heapOrArray[idx++]&63;if((u0&224)==192){str+=String.fromCharCode((u0&31)<<6|u1);continue}var u2=heapOrArray[idx++]&63;if((u0&240)==224){u0=(u0&15)<<12|u1<<6|u2}else{u0=(u0&7)<<18|u1<<12|u2<<6|heapOrArray[idx++]&63}if(u0<65536){str+=String.fromCharCode(u0)}else{var ch=u0-65536;str+=String.fromCharCode(55296|ch>>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\";var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i<args.length;i++){var converter=toC[argTypes[i]];if(converter){if(stack===0)stack=stackSave();cArgs[i]=converter(args[i])}else{cArgs[i]=args[i]}}}var ret=func(...cArgs);function onDone(ret){if(stack!==0)stackRestore(stack);return convertReturnValue(ret)}ret=onDone(ret);return ret};var cwrap=(ident,returnType,argTypes,opts)=>{var numericArgs=!argTypes||argTypes.every(type=>type===\"number\"||type===\"boolean\");var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};var wasmImports={b:_emscripten_date_now,a:_emscripten_resize_heap};var wasmExports=await createWasm();var ___wasm_call_ctors=wasmExports[\"d\"];var _malloc=Module[\"_malloc\"]=wasmExports[\"e\"];var _free=Module[\"_free\"]=wasmExports[\"f\"];var _kirk_init_deterministic=Module[\"_kirk_init_deterministic\"]=wasmExports[\"g\"];var _kirk_init=Module[\"_kirk_init\"]=wasmExports[\"h\"];var _decrypt_executable=Module[\"_decrypt_executable\"]=wasmExports[\"j\"];var _decrypt_save_buffer=Module[\"_decrypt_save_buffer\"]=wasmExports[\"k\"];var _encrypt_save_buffer=Module[\"_encrypt_save_buffer\"]=wasmExports[\"l\"];var __emscripten_stack_restore=wasmExports[\"m\"];var __emscripten_stack_alloc=wasmExports[\"n\"];var _emscripten_stack_get_current=wasmExports[\"o\"];Module[\"ccall\"]=ccall;Module[\"cwrap\"]=cwrap;Module[\"setValue\"]=setValue;Module[\"getValue\"]=getValue;function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve(Module);Module[\"onRuntimeInitialized\"]?.();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(()=>{setTimeout(()=>Module[\"setStatus\"](\"\"),1);doRun()},1)}else{doRun()}}if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].pop()()}}run();moduleRtn=readyPromise;\n\n\n  return moduleRtn;\n}\n);\n})();\nexport default createModule;\n"
  },
  {
    "path": "frontend/src/save-formats/PlatformSaveSizes.js",
    "content": "// All values are in bytes\n// Not guaranteed to be correct: may have missing/estra values! Most of this is guesses\n\nconst PLATFORM_SAVE_SIZES = {\n  nes: [\n    512,\n    1024,\n    2048,\n    4096,\n    8192,\n    16384,\n    32768, // The usual max size of files that the MiSTer NES core will generate\n    65536,\n    131072, // The MiSTer NES core and N64 Everdrive NES core will sometimes generate files this big, so maybe some games require them?\n  ],\n  snes: [\n    512,\n    1024,\n    2048,\n    4096,\n    8192,\n    16384,\n    32768,\n    65536,\n    131072,\n  ],\n  n64: [\n    // From http://micro-64.com/database/gamesave.shtml\n    512,\n    2048,\n    32768,\n    131072,\n    786432, // Dezaemon 3D\n  ],\n  gb: [\n    512,\n    1024,\n    2048,\n    4096,\n    8192,\n    16384,\n    32768,\n    65536,\n  ],\n  gba: [\n    512,\n    8192,\n    32768,\n    65536,\n    131072,\n  ],\n  gamegear: [\n    512,\n    1024,\n    2048,\n    4096,\n    8192,\n    16384,\n    32768,\n    65536,\n  ],\n  sms: [\n    512,\n    1024,\n    2048,\n    4096,\n    8192,\n    16384,\n    32768,\n    65536,\n  ],\n  genesis: [\n    64, // On the Mega SD, Wonder Boy in Monster World only uses this much data (although it's padded out to be much larger)\n    128, // Wonder Boy in Monster World (uses EEPROM to save). Files created by the GenesisPlus emulator and Mega Everdrive Pro are this big\n    256,\n    512,\n    1024,\n    2048,\n    4096,\n    8192,\n    16384,\n    32768,\n    65536, // Genesis files on the MiSTer are all padded out to be 64k, so maybe that's the max size?\n    131072, // But if we byte-expand that largest file inappropriately we end up with sometyhing this big, and we shouldn't show blank in the output size dropdown\n  ],\n  segacd: [\n    // From https://segaretro.org/CD_BackUp_RAM_Cart\n    // The internal backup RAM is fixed at 8kB, the external (cart) backup RAM can be any size\n    8192,\n    16384,\n    32768,\n    65536,\n    131072,\n    262144,\n    524288,\n  ],\n  gamecube: [\n    // From https://github.com/dolphin-emu/dolphin/blob/53b54406bd546b507822a3bd30311aa0cd96ee71/Source/Core/Core/HW/GCMemcard/GCMemcard.cpp#L95\n    // Offical sizes are listed here: https://en.wikipedia.org/wiki/GameCube#Hardware\n    524288, // 4 megabits (59 blocks)\n    1048576, // 8 megabits (123 blocks)\n    2097152, // 16 megabits (251 blocks)\n    4194304, // 32 megabits (507 blocks)\n    8388608, // 64 megabits (1019 blocks)\n    16777216, // 128 megabits (2043 blocks)\n  ],\n};\n\n// These are for memory card images and not cartridges\nconst OMIT_FROM_ALL_SIZES = [\n  'segacd',\n  'gamecube',\n];\n\nconst ALL_SIZES_KEYS = Object.keys(PLATFORM_SAVE_SIZES).filter((key) => !OMIT_FROM_ALL_SIZES.includes(key));\n\nconst ALL_SIZES = ALL_SIZES_KEYS.reduce((accumulator, currentPlatform) => { accumulator.push(...PLATFORM_SAVE_SIZES[currentPlatform]); return accumulator; }, []);\nconst ALL_SIZES_NO_DUPLICATES_SORTED = [...new Set(ALL_SIZES)].sort((a, b) => a - b);\n\nPLATFORM_SAVE_SIZES.all = ALL_SIZES_NO_DUPLICATES_SORTED;\n\nexport default PLATFORM_SAVE_SIZES;\n"
  },
  {
    "path": "frontend/src/save-formats/Retron5/Retron5.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"&\", \">>>\"] }] */\n\n/*\nThe Retron5 data format is:\n\ntypedef struct\n{\n   uint32_t magic;\n   uint16_t fmtVer;\n   uint16_t flags;\n   uint32_t origSize;\n   uint32_t packed_size;\n   uint32_t data_offset;\n   uint32_t crc32;\n   uint8_t data[0];\n} t_retronDataHdr;\n*/\n\nimport crc32 from 'crc-32';\nimport Util from '../../util/util';\nimport MathUtil from '../../util/Math';\nimport PaddingUtil from '../../util/Padding';\nimport CompressionZlibUtil from '../../util/CompressionZlib';\n\nconst LITTLE_ENDIAN = true;\n\nconst MAGIC = 'RTN5';\nconst MAGIC_ENCODING = 'US-ASCII';\nconst FORMAT_VERSION = 1;\nconst FLAG_ZLIB_PACKED = 0x01;\n\nconst MAGIC_OFFSET = 0;\nconst FORMAT_VERSION_OFFSET = 4;\nconst FLAGS_OFFSET = 6;\nconst ORIGINAL_SIZE_OFFSET = 8;\nconst PACKED_SIZE_OFFSET = 12;\nconst DATA_OFFSET_OFFSET = 16;\nconst CRC32_OFFSET = 20;\n\nconst HEADER_SIZE = 24;\n\nexport default class Retron5SaveData {\n  static createFromRetron5Data(retron5ArrayBuffer) {\n    const dataView = new DataView(retron5ArrayBuffer);\n\n    // First make sure that the stuff in the header all makes sense\n\n    Util.checkMagic(retron5ArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const formatVersion = dataView.getUint16(FORMAT_VERSION_OFFSET, LITTLE_ENDIAN);\n    const flags = dataView.getUint16(FLAGS_OFFSET, LITTLE_ENDIAN);\n    const originalSize = dataView.getUint32(ORIGINAL_SIZE_OFFSET, LITTLE_ENDIAN);\n    const packedSize = dataView.getUint32(PACKED_SIZE_OFFSET, LITTLE_ENDIAN);\n    const dataOffset = dataView.getUint32(DATA_OFFSET_OFFSET, LITTLE_ENDIAN);\n    const checksumRead = dataView.getUint32(CRC32_OFFSET, LITTLE_ENDIAN);\n\n    if (formatVersion > FORMAT_VERSION) {\n      throw new Error('Sorry this tool does not support this format of Retron5 save files');\n    }\n\n    if (dataOffset !== HEADER_SIZE) {\n      throw new Error('Sorry this file appears to be corrupted');\n    }\n\n    const dataSize = retron5ArrayBuffer.byteLength - HEADER_SIZE;\n    if (packedSize !== dataSize) {\n      throw new Error('Sorry this file appears to be corrupted');\n    }\n\n    // Now decompress the saved data and check its size and CRC32\n\n    let rawArrayBuffer = new Uint8Array(retron5ArrayBuffer.slice(dataOffset));\n    if ((flags & FLAG_ZLIB_PACKED) !== 0) {\n      rawArrayBuffer = CompressionZlibUtil.decompress(rawArrayBuffer);\n    }\n\n    if (rawArrayBuffer.byteLength !== originalSize) {\n      throw new Error('Sorry this file appears to be corrupted');\n    }\n\n    const checksumCalculated = crc32.buf(rawArrayBuffer) >>> 0; // '>>> 0' interprets the result as an unsigned integer: https://stackoverflow.com/questions/1822350/what-is-the-javascript-operator-and-how-do-you-use-it\n\n    if (checksumCalculated !== checksumRead) {\n      throw new Error('Sorry this file appears to be corrupted');\n    }\n\n    // Lastly check for extra padding at the beginning\n    //\n    // So far one user has provided a file which decompressed to 0x22000 bytes and the first 0x20000 bytes were\n    // just all 0x00. Slicing out the final 0x2000 bytes resulted in a file that loads correctly in an emulator.\n\n    if (!MathUtil.isPowerOf2(rawArrayBuffer.byteLength)) {\n      const padding = PaddingUtil.getPadFromStartValueAndCount(rawArrayBuffer);\n\n      // Note that this will catch padding values of 0x00 or 0xFF, but we've only seen 1 file in the wild and it\n      // had a padding value of 0x00. Not sure if we should restrict this to only check for that.\n\n      if (padding.count > 0) {\n        rawArrayBuffer = PaddingUtil.removePaddingFromStart(rawArrayBuffer, padding.count);\n      }\n    }\n\n    // Everything looks good\n\n    return new Retron5SaveData(retron5ArrayBuffer, rawArrayBuffer);\n  }\n\n  static createFromEmulatorData(rawArrayBuffer) {\n    const originalChecksum = crc32.buf(new Uint8Array(rawArrayBuffer)) >>> 0; // '>>> 0' interprets the result as an unsigned integer: https://stackoverflow.com/questions/1822350/what-is-the-javascript-operator-and-how-do-you-use-it\n\n    const packedArrayBuffer = CompressionZlibUtil.compress(rawArrayBuffer);\n\n    let headerArrayBuffer = new ArrayBuffer(HEADER_SIZE); // Need to have an ArrayBuffer with a size as a multiple of 4 to have a Uint32View into it, so need to have a separate one for the header\n\n    headerArrayBuffer = Util.setMagic(headerArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const headerDataView = new DataView(headerArrayBuffer);\n\n    headerDataView.setUint16(FORMAT_VERSION_OFFSET, FORMAT_VERSION, LITTLE_ENDIAN);\n    headerDataView.setUint16(FLAGS_OFFSET, FLAG_ZLIB_PACKED, LITTLE_ENDIAN);\n    headerDataView.setUint32(ORIGINAL_SIZE_OFFSET, rawArrayBuffer.byteLength, LITTLE_ENDIAN);\n    headerDataView.setUint32(PACKED_SIZE_OFFSET, packedArrayBuffer.byteLength, LITTLE_ENDIAN);\n    headerDataView.setUint32(DATA_OFFSET_OFFSET, HEADER_SIZE, LITTLE_ENDIAN);\n    headerDataView.setUint32(CRC32_OFFSET, originalChecksum, LITTLE_ENDIAN);\n\n    const retron5ArrayBuffer = Util.concatArrayBuffers([headerArrayBuffer, packedArrayBuffer]);\n\n    return new Retron5SaveData(retron5ArrayBuffer, rawArrayBuffer);\n  }\n\n  constructor(retron5ArrayBuffer, rawArrayBuffer) {\n    this.retron5ArrayBuffer = retron5ArrayBuffer;\n    this.rawArrayBuffer = rawArrayBuffer;\n  }\n\n  getRawArrayBuffer() {\n    return this.rawArrayBuffer;\n  }\n\n  getRetron5ArrayBuffer() {\n    return this.retron5ArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaCd/Crc16.js",
    "content": "/* eslint-disable no-bitwise */\n\n// The Sega CD format uses a 16-bit CRC that I can't seem to find a JS implementation of.\n// The reference code calls it \"CCITT\" but I tried a couple of repos that offer similarly-named\n// CRC-16 algorithms and none of them matched. So it just seemed easier to copy the code from\n// the reference implementation\n\nconst CRC_TABLE_SIZE = 256;\n\n// https://github.com/superctr/buram/blob/master/buram.c#L183\nconst crcTable = new Array(CRC_TABLE_SIZE).fill(0);\n\nfor (let i = 0; i < CRC_TABLE_SIZE; i += 1) {\n  let d = i << 8;\n\n  for (let j = 0; j < 8; j += 1) {\n    d = (d << 1) ^ (((d & 0x8000) !== 0) ? 0x1021 : 0);\n  }\n\n  crcTable[i] = d;\n}\n\n// https://github.com/superctr/buram/blob/master/buram.c#L197\nexport default function (arrayBuffer) { // eslint-disable-line func-names\n  let out = 0;\n  const uint8Array = new Uint8Array(arrayBuffer);\n  const length = arrayBuffer.byteLength;\n\n  for (let i = 0; i < length; i += 1) {\n    out = ((out << 8) ^ crcTable[uint8Array[i] ^ (out >> 8)]) & 0xFFFF;\n  }\n\n  return out >>> 0; // Convert to unsigned\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaCd/ReedSolomon.js",
    "content": "/* eslint-disable no-bitwise */\n\n// The Sega CD format uses a version of Reed Solomon that I can't seem to find a JS implementation of.\n// All of the existing implementations seem to be based on the same original Java implementation,\n// which was able to parse the data from a real Sega CD when told there was 1 parity byte but not 2.\n// I gave up trying and went with the reference implementation from https://github.com/superctr/buram\n\n// reedSolomonType can either be 6 or 8\n\nimport Util from '../../util/util';\n\nconst GENERATOR_POLYNOMIAL_REED_SOLOMON_8 = [87, 166, 113, 75, 198, 25, 167, 114, 76, 199, 26, 1]; // https://github.com/superctr/buram/blob/master/buram.c#L586\nconst GENERATOR_POLYNOMIAL_REED_SOLOMON_6 = [20, 58, 56, 18, 26, 6, 59, 57, 19, 27, 7, 1]; // https://github.com/superctr/buram/blob/master/buram.c#L587\n\nconst GALOIS_FIELD_TABLE_SIZE = 256;\n\nconst DATA_SIZE = 6;\nconst PARITY_OFFSETS = [DATA_SIZE, DATA_SIZE + 1];\nconst PARITY_SIZE = PARITY_OFFSETS.length;\nconst TOTAL_SIZE = DATA_SIZE + PARITY_SIZE;\n\n// https://github.com/superctr/buram/blob/master/buram.c#L85\nfunction initReedSolomon(poly, bitsPerSymbol, generatorPolynomial) {\n  const symbolsPerBlock = (1 << bitsPerSymbol) - 1;\n\n  const galoisFieldIndexOf = new Array(GALOIS_FIELD_TABLE_SIZE).fill(0);\n  const galoisFieldAlphaTo = new Array(GALOIS_FIELD_TABLE_SIZE).fill(0);\n\n  let sr = 1;\n\n  for (let i = 1; i <= symbolsPerBlock; i += 1) {\n    galoisFieldIndexOf[sr] = (i & 0xFF);\n    galoisFieldAlphaTo[i] = (sr & 0xFF);\n\n    sr = (sr << 1) & 0xFFFFFFFF;\n\n    if ((sr & (1 << bitsPerSymbol)) !== 0) {\n      sr ^= poly;\n    }\n\n    sr &= symbolsPerBlock;\n  }\n\n  return {\n    bitsPerSymbol,\n    symbolsPerBlock,\n    generatorPolynomial,\n    galoisFieldIndexOf,\n    galoisFieldAlphaTo,\n  };\n}\n\n// https://github.com/superctr/buram/blob/master/buram.c#L584\nconst REED_SOLOMON = {\n  8: initReedSolomon(0x1D, 8, GENERATOR_POLYNOMIAL_REED_SOLOMON_8),\n  6: initReedSolomon(3, 6, GENERATOR_POLYNOMIAL_REED_SOLOMON_6),\n};\n\nfunction checkInputDataSize(inputArrayBuffer) {\n  if (inputArrayBuffer.byteLength !== TOTAL_SIZE) {\n    throw new Error(`This Reed-Solomon implementation can only support an input size of ${TOTAL_SIZE} but was given a size of ${inputArrayBuffer.byteLength}`);\n  }\n}\n\n// Add with modulo\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L111\nfunction addMod(reedSolomon, i, d) {\n  const newD = (d + reedSolomon.generatorPolynomial[i]) % reedSolomon.symbolsPerBlock;\n\n  return reedSolomon.galoisFieldAlphaTo[newD + 1];\n}\n\nexport default class ReedSolomon {\n  // Based on https://github.com/superctr/buram/blob/master/buram.c#L122\n  static encode(inputArrayBuffer, reedSolomonType) {\n    checkInputDataSize(inputArrayBuffer);\n    const reedSolomon = REED_SOLOMON[reedSolomonType];\n\n    const outputArrayBuffer = Util.copyArrayBuffer(inputArrayBuffer);\n    const outputUint8Array = new Uint8Array(outputArrayBuffer);\n\n    outputUint8Array[PARITY_OFFSETS[0]] = 0;\n    outputUint8Array[PARITY_OFFSETS[1]] = 0;\n\n    for (let i = 0; i < DATA_SIZE; i += 1) {\n      let d = outputUint8Array[i];\n\n      if (d !== 0) {\n        d = reedSolomon.galoisFieldIndexOf[d] - 1;\n\n        outputUint8Array[PARITY_OFFSETS[0]] ^= addMod(reedSolomon, i, d);\n        outputUint8Array[PARITY_OFFSETS[1]] ^= addMod(reedSolomon, i + DATA_SIZE, d);\n      }\n    }\n\n    return outputArrayBuffer;\n  }\n\n  // Based on https://github.com/superctr/buram/blob/master/buram.c#L144\n  static decode(inputArrayBuffer, reedSolomonType) {\n    checkInputDataSize(inputArrayBuffer);\n    const reedSolomon = REED_SOLOMON[reedSolomonType];\n\n    const outputArrayBuffer = Util.copyArrayBuffer(inputArrayBuffer);\n    const outputUint8Array = new Uint8Array(outputArrayBuffer);\n\n    let errorMask = 0;\n    let errorLocation = 0;\n\n    // Calculate error location (syndrome)\n    for (let i = 0; i < TOTAL_SIZE; i += 1) {\n      let d = outputUint8Array[i];\n      errorMask = (errorMask ^ d) & 0xFF;\n\n      if (d !== 0) {\n        d = (reedSolomon.galoisFieldIndexOf[d] + DATA_SIZE - i) % reedSolomon.symbolsPerBlock;\n        errorLocation = (errorLocation ^ reedSolomon.galoisFieldAlphaTo[d + 1]) & 0xFF;\n      }\n    }\n\n    // Correct a single error\n    if (errorMask !== 0) {\n      const d = (reedSolomon.symbolsPerBlock + reedSolomon.galoisFieldIndexOf[errorLocation] - reedSolomon.galoisFieldIndexOf[errorMask]) % reedSolomon.symbolsPerBlock;\n\n      if (d < TOTAL_SIZE) {\n        outputUint8Array[TOTAL_SIZE - 1 - d] ^= errorMask;\n      } else {\n        throw new Error(`Unable to correct error found in data. d: ${d}, errorLocation: ${errorLocation}, errorMask: 0x${errorMask.toString(16)}, symbolsPerBlock: ${reedSolomon.symbolsPerBlock}`);\n      }\n    }\n\n    return outputArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaCd/SegaCd.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThis is based on https://github.com/superctr/buram/\n\nAll manipulation of Sega CD saves is done via the BIOS, and emulators etc just make BIOS calls and don't manipulate the data directly.\nIt appears that the BIOS was reverse-engineered to create the above repo.\n\nThe file is broken up into blocks of 64 bytes each. There is considerable redundancy and error correction throughout the data.\n\nThe first block is reserved. The repo above doesn't alter any data in this block, but the BIOS does. I don't know what it contains.\n\nThe last block is reserved for directory information: volume name, number of free blocks, number of save files, etc. The latter 2 values are written 4 times each.\n\nThere is potentially an additional block reserved for a future directory entry (see below)\n\nBlocks may have error correction encoding applied to them. If applied, it takes the 64 byte block and uses only the first 48 bytes.\nThose 48 bytes actually contain 36 bytes of data, plus error-correction parity information. The 36 bytes of data are actually 32 bytes\nof data plus 2 16-bit CRCs to verify the integrety of the data. Thus, when error correction is applied to a block, 64 bytes actually holds 32 bytes of data.\n\nEach of the 2 CRCs is the bitwise-NOT of the other. The CRC algorithm appears to be custom: I couldn't find a match in the library I tried.\n\nFrom the perspective of the parity information, each 64 byte block is regarded as made up of 8-byte subblocks. Each subblock contains 6 bytes of data\nand 2 bytes of parity information. The parity bytes are calculated by what appears to be a custom implementation of Reed-Solomon encoding. I was unable\nto make an off-the-shelf Reed-Solomon library properly process the data.\n\nThe parity bytes are interleaved (twice) with the actual data. Each set of parity bytes allows for 1 byte to be corrected, and so I think the object\nhere is to allow for a 1-bit error in any byte of data. I didn't understand why there is both 6-bit and 8-bit Reed-Solomon encoding applied to the data.\n\nThe data for the contents of the files themselves is written in blocks from the start of the file (starting from block 1). It's just a concatenation of all of\nthe data from all of the files. File data may be encoded for error-correction or it may not be.\n\nThe file metadata (directory entries) is stored in half-blocks starting at the second-last block of the file and moving upwards towards the start of the file.\nThus, the two sets of data will eventually meet in the middle of the file. Each directory entry is 16 bytes of data long, and directory entries are encoded for\nerror-correction. Thus, 2 directory entries can fit in each block, and the entire block is used whether there are 1 or 2 entires in it (because the\ndata is interleaved)\n\nDirectory entries contain the filename, starting block number, length, and whether error correction encoding is applied to the file data.\n\nThere is always a half-block available for the next directory entry. If the number of saves is odd, this data will be stored in the same block\nas the last entry and no extra blocks are reserved. However if the number of saves is even then an additional block is reserved for that\nfuture directory entry. This includes when the file is empty.\n*/\n\nimport calcCrc16 from './Crc16'; // eslint-disable-line\nimport PlatformSaveSizes from '../PlatformSaveSizes';\nimport SegaCdUtil from '../../util/SegaCd';\nimport Util from '../../util/util';\nimport reedSolomon from './ReedSolomon';\n\nconst LITTLE_ENDIAN = false;\n\nconst DIRECTORY_SIZE = 0x40;\n\nconst DIRECTORY_FORMAT_OFFSET = 0x20;\nconst DIRECTORY_VOLUME_OFFSET = 0x00;\n\nconst DIRECTORY_ENTRY_SIZE_ENCODED = 0x20; // Half a block\nconst DIRECTORY_ENTRY_SIZE_PLAINTEXT = DIRECTORY_ENTRY_SIZE_ENCODED / 2; // Encoding doubles the size\nconst DIRECTORY_ENTRY_FILENAME_OFFSET = 0;\nconst DIRECTORY_ENTRY_FILENAME_LENGTH = 11;\nconst DIRECTORY_ENTRY_FILE_DATA_IS_ENCODED_OFFSET = 11;\nconst DIRECTORY_ENTRY_FILE_DATA_START_BLOCK_OFFSET = 12;\nconst DIRECTORY_ENTRY_FILE_SIZE_OFFSET = 14;\n\nconst BLOCK_SIZE = 0x40;\nconst SUB_BLOCK_SIZE = 0x08; // A block is made up of sub-blocks, which are interleaved and encoded with Reed-Solomon\nconst NUM_SUB_BLOCKS = BLOCK_SIZE / SUB_BLOCK_SIZE;\n\n// When deinterleaved, a block becomes 36 bytes of data where the first 2 and last 2 bytes are CRC information\nconst BLOCK_DATA_BEGIN_OFFSET = 2;\nconst BLOCK_DATA_SIZE = 32;\nconst BLOCK_CRC_1_OFFSET = 0;\nconst BLOCK_CRC_2_OFFSET = BLOCK_DATA_BEGIN_OFFSET + BLOCK_DATA_SIZE;\nconst BLOCK_TOTAL_CRC_SIZE = 4; // 2 x 16 bit CRCs\n\nconst REED_SOLOMON_6_LAST_DATA_BYTE = [0x2d, 0x2e, 0x2f, 0x08, 0x11, 0x1a, 0x23, 0x2c];\n\nconst TEXT_ENCODING = 'US-ASCII';\nconst VOLUME_LENGTH = 11;\nconst FORMAT_LENGTH = 11;\nconst MEDIA_ID_LENGTH = 16;\n\nfunction sanitizeText(rawText) {\n  return rawText.replace(/(?!([A-Z]|[0-9]|\\*))./g, '_'); // Anything other than A-Z, 0-9, or * is replaced with a _\n}\n\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L886\nfunction decodeText(arrayBuffer, offset, length) {\n  const textDecoder = new TextDecoder(TEXT_ENCODING);\n  const rawText = textDecoder.decode(arrayBuffer.slice(offset, offset + length));\n  const text = sanitizeText(rawText);\n\n  return text.replace(/_*$/g, ''); // Remove trailing _'s. This will remove all trailing _'s, so that the string '_____' -> ''. The implementation linked above will turn it into '_' (leaving a single underscore), which I'm not actually sure is more correct\n}\n\nfunction encodeText(text, length) {\n  const textEncoder = new TextEncoder(TEXT_ENCODING);\n  const sanitizedText = sanitizeText(text.toUpperCase()).padEnd(length, '_');\n\n  return textEncoder.encode(sanitizedText).slice(0, length);\n}\n\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L228\n// Deinterleave 36 bytes of data from 48 bytes\nfunction deinterleaveData(inputBlockArrayBuffer) {\n  const inputBlockUint8Array = new Uint8Array(inputBlockArrayBuffer);\n  let inputCurrentOffset = 0;\n\n  const outputArrayBuffer = new ArrayBuffer((BLOCK_SIZE / 2) + BLOCK_TOTAL_CRC_SIZE);\n  const outputUint8Array = new Uint8Array(outputArrayBuffer);\n  let outputCurrentOffset = 0;\n\n  for (let i = 0; i < 12; i += 1) {\n    let sr = inputBlockUint8Array[inputCurrentOffset];\n    inputCurrentOffset += 1;\n\n    sr <<= 6;\n\n    sr = (sr & 0xFF00) | inputBlockUint8Array[inputCurrentOffset];\n    inputCurrentOffset += 1;\n\n    outputUint8Array[outputCurrentOffset] = (sr >> 6);\n    outputCurrentOffset += 1;\n\n    sr <<= 6;\n\n    sr = (sr & 0xFF00) | inputBlockUint8Array[inputCurrentOffset];\n    inputCurrentOffset += 1;\n\n    outputUint8Array[outputCurrentOffset] = (sr >> 4);\n    outputCurrentOffset += 1;\n\n    sr <<= 6;\n\n    sr = (sr & 0xFF00) | inputBlockUint8Array[inputCurrentOffset];\n    inputCurrentOffset += 1;\n\n    outputUint8Array[outputCurrentOffset] = (sr >> 2);\n    outputCurrentOffset += 1;\n  }\n\n  return outputArrayBuffer;\n}\n\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L208\n// Interleave 36 bytes of data into 48 bytes\nfunction interleaveData(inputBlockArrayBuffer) {\n  const inputBlockUint8Array = new Uint8Array(inputBlockArrayBuffer);\n  let inputCurrentOffset = 0;\n\n  const outputArrayBuffer = new ArrayBuffer(BLOCK_SIZE);\n  const outputUint8Array = new Uint8Array(outputArrayBuffer);\n  let outputCurrentOffset = 0;\n\n  for (let i = 0; i < 12; i += 1) {\n    let sr = inputBlockUint8Array[inputCurrentOffset];\n    inputCurrentOffset += 1;\n\n    outputUint8Array[outputCurrentOffset] = sr;\n    outputCurrentOffset += 1;\n\n    sr <<= 8;\n\n    sr |= inputBlockUint8Array[inputCurrentOffset];\n    inputCurrentOffset += 1;\n\n    outputUint8Array[outputCurrentOffset] = (sr >> 2);\n    outputCurrentOffset += 1;\n\n    sr <<= 8;\n\n    sr |= inputBlockUint8Array[inputCurrentOffset];\n    inputCurrentOffset += 1;\n\n    outputUint8Array[outputCurrentOffset] = (sr >> 4);\n    outputCurrentOffset += 1;\n\n    outputUint8Array[outputCurrentOffset] = (sr << 2);\n    outputCurrentOffset += 1;\n  }\n\n  return outputArrayBuffer;\n}\n\n// Interleave the 8-bit Reed-Solomon code\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L313\nfunction interleaveReedSolomon8(subBlockIndex, deinterleavedSubBlockArrayBuffer, blockArrayBuffer) {\n  const outputBlock = Util.copyArrayBuffer(blockArrayBuffer);\n  const outputUint8Array = new Uint8Array(outputBlock);\n\n  const inputUint8Array = new Uint8Array(deinterleavedSubBlockArrayBuffer);\n\n  for (let i = 0; i < SUB_BLOCK_SIZE; i += 1) {\n    let temp = inputUint8Array[i];\n\n    for (let j = 0; j < SUB_BLOCK_SIZE; j += 1) {\n      const outputIndex = subBlockIndex + (j * SUB_BLOCK_SIZE);\n      outputUint8Array[outputIndex] = (((outputUint8Array[outputIndex] << 1) & 0xFF) | (temp >> 7));\n      temp = (temp << 1) & 0xFF;\n    }\n  }\n\n  return outputBlock;\n}\n\n// Deinterleave the 8-bit Reed-Solomon code so that parity bits are at the bottom\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L329\nfunction deinterleaveReedSolomon8(subBlockIndex, blockArrayBuffer) {\n  const outputSubBlock = Util.getFilledArrayBuffer(SUB_BLOCK_SIZE, 0);\n  const outputUint8Array = new Uint8Array(outputSubBlock);\n\n  const blockUint8Array = new Uint8Array(blockArrayBuffer);\n\n  for (let i = 0; i < SUB_BLOCK_SIZE; i += 1) {\n    let temp = blockUint8Array[subBlockIndex + (i * SUB_BLOCK_SIZE)];\n\n    for (let j = 0; j < SUB_BLOCK_SIZE; j += 1) {\n      outputUint8Array[j] = (((outputUint8Array[j] << 1) & 0xFF) | (temp >> 7));\n      temp = (temp << 1) & 0xFF;\n    }\n  }\n\n  return outputSubBlock;\n}\n\n// Interleave the 6-bit Reed-Solomon code\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L267\nfunction interleaveReedSolomon6(subBlockIndex, deinterleavedSubBlockArrayBuffer, blockArrayBuffer) {\n  const outputBlock = Util.copyArrayBuffer(blockArrayBuffer);\n  const outputUint8Array = new Uint8Array(outputBlock);\n\n  const inputUint8Array = new Uint8Array(deinterleavedSubBlockArrayBuffer);\n\n  for (let i = 0; i < 5; i += 1) {\n    outputUint8Array[subBlockIndex + (i * 9)] = inputUint8Array[i] << 2;\n  }\n\n  outputUint8Array[REED_SOLOMON_6_LAST_DATA_BYTE[subBlockIndex]] = inputUint8Array[5] << 2;\n  outputUint8Array[0x30 + subBlockIndex] = inputUint8Array[6] << 2;\n  outputUint8Array[0x38 + subBlockIndex] = inputUint8Array[7] << 2;\n\n  return outputBlock;\n}\n\n// Deinterleave the 6-bit Reed-Solomon code so that parity bits are at the bottom\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L280\nfunction deinterleaveReedSolomon6(subBlockIndex, blockArrayBuffer) {\n  const outputSubBlock = Util.getFilledArrayBuffer(SUB_BLOCK_SIZE, 0);\n  const outputUint8Array = new Uint8Array(outputSubBlock);\n\n  const blockUint8Array = new Uint8Array(blockArrayBuffer);\n\n  for (let i = 0; i < 5; i += 1) {\n    outputUint8Array[i] = blockUint8Array[subBlockIndex + (i * 9)] >> 2;\n  }\n\n  outputUint8Array[5] = blockUint8Array[REED_SOLOMON_6_LAST_DATA_BYTE[subBlockIndex]] >> 2;\n  outputUint8Array[6] = blockUint8Array[0x30 + subBlockIndex] >> 2;\n  outputUint8Array[7] = blockUint8Array[0x38 + subBlockIndex] >> 2;\n\n  return outputSubBlock;\n}\n\n// Perform error correction on the block\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L377\nfunction getErrorCorrectedData(blockArrayBuffer) {\n  let correctedBlockArrayBuffer = Util.copyArrayBuffer(blockArrayBuffer);\n\n  for (let subBlockIndex = 0; subBlockIndex < NUM_SUB_BLOCKS; subBlockIndex += 1) {\n    const deinterleavedSubBlock = deinterleaveReedSolomon8(subBlockIndex, correctedBlockArrayBuffer);\n    const errorCorrectedSubBlock = reedSolomon.decode(deinterleavedSubBlock, 8);\n    correctedBlockArrayBuffer = interleaveReedSolomon8(subBlockIndex, errorCorrectedSubBlock, correctedBlockArrayBuffer);\n  }\n\n  for (let subBlockIndex = 0; subBlockIndex < NUM_SUB_BLOCKS; subBlockIndex += 1) {\n    const deinterleavedSubBlock = deinterleaveReedSolomon6(subBlockIndex, correctedBlockArrayBuffer);\n    const errorCorrectedSubBlock = reedSolomon.decode(deinterleavedSubBlock, 6);\n    correctedBlockArrayBuffer = interleaveReedSolomon6(subBlockIndex, errorCorrectedSubBlock, correctedBlockArrayBuffer);\n  }\n\n  return correctedBlockArrayBuffer;\n}\n\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L345\nfunction addErrorCorrectionData(blockArrayBuffer) {\n  let correctedBlockArrayBuffer = Util.copyArrayBuffer(blockArrayBuffer);\n\n  for (let subBlockIndex = 0; subBlockIndex < NUM_SUB_BLOCKS; subBlockIndex += 1) {\n    const deinterleavedSubBlock = deinterleaveReedSolomon6(subBlockIndex, correctedBlockArrayBuffer);\n    const errorCorrectedSubBlock = reedSolomon.encode(deinterleavedSubBlock, 6);\n    correctedBlockArrayBuffer = interleaveReedSolomon6(subBlockIndex, errorCorrectedSubBlock, correctedBlockArrayBuffer);\n  }\n\n  for (let subBlockIndex = 0; subBlockIndex < NUM_SUB_BLOCKS; subBlockIndex += 1) {\n    const deinterleavedSubBlock = deinterleaveReedSolomon8(subBlockIndex, correctedBlockArrayBuffer);\n    const errorCorrectedSubBlock = reedSolomon.encode(deinterleavedSubBlock, 8);\n    correctedBlockArrayBuffer = interleaveReedSolomon8(subBlockIndex, errorCorrectedSubBlock, correctedBlockArrayBuffer);\n  }\n\n  return correctedBlockArrayBuffer;\n}\n\n// Check if the deinterleaved block is corrupted or not. The 2 check CRCs appear to be for redundancy\nfunction checkCrc(deinterleavedBlockArrayBuffer) {\n  const dataView = new DataView(deinterleavedBlockArrayBuffer);\n\n  const checkCrc1 = dataView.getUint16(BLOCK_CRC_1_OFFSET, LITTLE_ENDIAN);\n  const checkCrc2 = 0xFFFF & (~(dataView.getUint16(BLOCK_CRC_2_OFFSET, LITTLE_ENDIAN)) >>> 0); // Convert to unsigned and cut off anything beyond the low 16 bits\n\n  const crc = calcCrc16(deinterleavedBlockArrayBuffer.slice(BLOCK_DATA_BEGIN_OFFSET, BLOCK_DATA_BEGIN_OFFSET + BLOCK_DATA_SIZE));\n\n  if ((crc !== checkCrc1) && (crc !== checkCrc2)) {\n    throw new Error(`Data appears to be corrupt: calculated CRC 0x${crc.toString(16)} rather than 0x${checkCrc1.toString(16)} or 0x${checkCrc2.toString(16)}`);\n  }\n}\n\n// This is based on https://github.com/superctr/buram/blob/master/buram.c#L433\n// (but without the optimization of cacheing the last accessed buffer)\n// and https://github.com/superctr/buram/blob/master/buram.c#L377\n//\n// Note that it works differently than the reference implemnentation by first checking the CRC\n// and only if that fails then trying to use error-correction on the data.\n//\n// It was that way in the reference implementation because apparently that's how it works\n// in the BIOS: https://github.com/superctr/buram/issues/1\nfunction decodeBlock(arrayBuffer, offset) {\n  const alignedOffset = offset & -(BLOCK_SIZE);\n\n  const block = arrayBuffer.slice(alignedOffset, alignedOffset + BLOCK_SIZE);\n\n  let outputArrayBuffer = deinterleaveData(block);\n\n  try {\n    checkCrc(outputArrayBuffer);\n  } catch (e) {\n    const correctedBlock = getErrorCorrectedData(block);\n    outputArrayBuffer = deinterleaveData(correctedBlock);\n    checkCrc(outputArrayBuffer); // If this one doesn't work, then throw an error to our caller\n  }\n\n  return outputArrayBuffer.slice(BLOCK_DATA_BEGIN_OFFSET + ((offset ^ alignedOffset) >> 1), BLOCK_DATA_BEGIN_OFFSET + BLOCK_DATA_SIZE);\n}\n\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L449 (again with no optimization\n// of cacheing the last accessed block)\nfunction encodeBlock(destinationArrayBuffer, sourceArrayBuffer, destinationOffset) {\n  if (sourceArrayBuffer.byteLength !== (BLOCK_SIZE / 2)) {\n    throw new Error(`Unable to encode block of length ${sourceArrayBuffer.byteLength} bytes, block must be ${BLOCK_SIZE / 2} bytes`);\n  }\n\n  // Calculate the CRC and make an ArrayBuffer with the data and CRCs in the correct place\n\n  const crc = calcCrc16(sourceArrayBuffer);\n\n  let writeArrayBuffer = new ArrayBuffer(sourceArrayBuffer.byteLength + BLOCK_TOTAL_CRC_SIZE);\n  const writeDataView = new DataView(writeArrayBuffer);\n\n  writeDataView.setUint16(BLOCK_CRC_1_OFFSET, crc, LITTLE_ENDIAN);\n  writeDataView.setUint16(BLOCK_CRC_2_OFFSET, ~crc >>> 0, LITTLE_ENDIAN);\n\n  writeArrayBuffer = Util.setArrayBufferPortion(writeArrayBuffer, sourceArrayBuffer, BLOCK_CRC_1_OFFSET + 2, 0, sourceArrayBuffer.byteLength);\n\n  // Now interleave the data and write it to the destination\n\n  const interleavedArrayBuffer = interleaveData(writeArrayBuffer);\n  const errorCorrectionDataArrayBuffer = addErrorCorrectionData(interleavedArrayBuffer);\n\n  return Util.setArrayBufferPortion(destinationArrayBuffer, errorCorrectionDataArrayBuffer, destinationOffset, 0, errorCorrectionDataArrayBuffer.byteLength);\n}\n\n// This is based on https://github.com/superctr/buram/blob/master/buram.c#L820\n// which is called by https://github.com/superctr/buram/blob/master/buram.c#L1013\nfunction readSaveFiles(arrayBuffer, numSaveFiles) {\n  const saveFiles = [];\n\n  const directoryOffset = arrayBuffer.byteLength - DIRECTORY_SIZE;\n  let currentOffsetInDirectory = directoryOffset - DIRECTORY_ENTRY_SIZE_ENCODED;\n\n  for (let i = 0; i < numSaveFiles; i += 1) {\n    const decodedBuffer = decodeBlock(arrayBuffer, currentOffsetInDirectory);\n    const decodedBufferDataView = new DataView(decodedBuffer);\n\n    const dataIsEncoded = (decodedBufferDataView.getUint8(DIRECTORY_ENTRY_FILE_DATA_IS_ENCODED_OFFSET) !== 0);\n    const startBlockNumber = decodedBufferDataView.getUint16(DIRECTORY_ENTRY_FILE_DATA_START_BLOCK_OFFSET, LITTLE_ENDIAN);\n    const fileSizeBlocks = decodedBufferDataView.getUint16(DIRECTORY_ENTRY_FILE_SIZE_OFFSET, LITTLE_ENDIAN);\n\n    let fileData = null;\n\n    const fileDataStartOffset = startBlockNumber * BLOCK_SIZE;\n\n    if (dataIsEncoded) {\n      const fileDataDecodedBlocks = [];\n      let currentOffsetInFile = fileDataStartOffset;\n\n      for (let blockNum = 0; blockNum < fileSizeBlocks; blockNum += 1) {\n        fileDataDecodedBlocks.push(decodeBlock(arrayBuffer, currentOffsetInFile));\n        currentOffsetInFile += BLOCK_SIZE;\n      }\n\n      fileData = Util.concatArrayBuffers(fileDataDecodedBlocks);\n    } else {\n      fileData = arrayBuffer.slice(fileDataStartOffset, fileDataStartOffset + (fileSizeBlocks * BLOCK_SIZE));\n    }\n\n    saveFiles.push({\n      filename: decodeText(decodedBuffer, DIRECTORY_ENTRY_FILENAME_OFFSET, DIRECTORY_ENTRY_FILENAME_LENGTH),\n      dataIsEncoded,\n      startBlockNumber,\n      fileSizeBlocks,\n      fileData,\n    });\n\n    currentOffsetInDirectory -= DIRECTORY_ENTRY_SIZE_ENCODED;\n  }\n\n  return saveFiles;\n}\n\nfunction getRequiredBlocks(saveFile) {\n  const fileSizeBytes = saveFile.fileData.byteLength;\n  const fileSizeRequiredBytes = saveFile.dataIsEncoded ? fileSizeBytes * 2 : fileSizeBytes; // When encoding the data we can only store 32 bytes of data in every 64 byte block\n\n  return Math.ceil(fileSizeRequiredBytes / BLOCK_SIZE);\n}\n\nfunction getEmptyDirectoryEntry() {\n  // Apparently the BIOS uses uninitialized memory when creating a new block, and the result is that\n  // in the topmost directory entry only, when there are an odd number of saves, our output\n  // will not match that of the BIOS. It does match that of our reference implementation, and\n  // the BIOS is able to read and write our files.\n  // https://github.com/superctr/buram/issues/1\n\n  return Util.getFilledArrayBuffer(DIRECTORY_ENTRY_SIZE_PLAINTEXT, 0);\n}\n\nfunction getDirectoryEntry(saveFile, startingBlock) {\n  const directoryEntry = new ArrayBuffer(DIRECTORY_ENTRY_SIZE_PLAINTEXT);\n  const directoryEntryDataView = new DataView(directoryEntry);\n  const directoryEntryUint8Array = new Uint8Array(directoryEntry);\n\n  const encodedFilename = encodeText(saveFile.filename, DIRECTORY_ENTRY_FILENAME_LENGTH);\n  const fileSizeRequiredBlocks = getRequiredBlocks(saveFile);\n\n  directoryEntryUint8Array.set(encodedFilename, DIRECTORY_ENTRY_FILENAME_OFFSET);\n  directoryEntryDataView.setUint8(DIRECTORY_ENTRY_FILE_DATA_IS_ENCODED_OFFSET, saveFile.dataIsEncoded ? 0xFF : 0x00); // https://github.com/superctr/buram/blob/master/buram.c#L1129\n  directoryEntryDataView.setUint16(DIRECTORY_ENTRY_FILE_DATA_START_BLOCK_OFFSET, startingBlock, LITTLE_ENDIAN);\n  directoryEntryDataView.setUint16(DIRECTORY_ENTRY_FILE_SIZE_OFFSET, fileSizeRequiredBlocks, LITTLE_ENDIAN);\n\n  return directoryEntry;\n}\n\n// Based on https://github.com/superctr/buram/blob/master/buram.c#L766\nfunction writeSaveFile(saveFile, startingBlock, segaCdArrayBuffer) {\n  const fileSizeRequiredBlocks = getRequiredBlocks(saveFile);\n\n  if (saveFile.dataIsEncoded) {\n    const paddedInputArrayBuffer = Util.padArrayBuffer(saveFile.fileData, fileSizeRequiredBlocks * BLOCK_SIZE, 0x00);\n    let outputArrayBuffer = Util.copyArrayBuffer(segaCdArrayBuffer);\n\n    for (let i = 0; i < fileSizeRequiredBlocks; i += 1) {\n      const sourceBlockOffset = i * (BLOCK_SIZE / 2);\n      const destinationBlockOffset = (startingBlock + i) * BLOCK_SIZE;\n\n      outputArrayBuffer = encodeBlock(outputArrayBuffer, paddedInputArrayBuffer.slice(sourceBlockOffset, sourceBlockOffset + (BLOCK_SIZE / 2)), destinationBlockOffset);\n    }\n\n    return outputArrayBuffer;\n  }\n\n  return Util.setArrayBufferPortion(segaCdArrayBuffer, saveFile.fileData, startingBlock * BLOCK_SIZE, 0, saveFile.fileData.byteLength);\n}\n\nfunction getVolumeInfo(segaCdArrayBuffer) {\n  return {\n    numFreeBlocks: SegaCdUtil.getNumFreeBlocks(segaCdArrayBuffer),\n    format: decodeText(segaCdArrayBuffer, segaCdArrayBuffer.byteLength - DIRECTORY_SIZE + DIRECTORY_FORMAT_OFFSET, FORMAT_LENGTH),\n    volume: decodeText(segaCdArrayBuffer, segaCdArrayBuffer.byteLength - DIRECTORY_SIZE + DIRECTORY_VOLUME_OFFSET, VOLUME_LENGTH),\n    mediaId: decodeText(segaCdArrayBuffer, segaCdArrayBuffer.byteLength - MEDIA_ID_LENGTH, MEDIA_ID_LENGTH),\n  };\n}\n\nexport default class SegaCdSaveData {\n  static createWithNewSize(segaCdSaveData, newSize) {\n    const newRawSaveData = SegaCdUtil.resize(segaCdSaveData.getArrayBuffer(), newSize);\n\n    return SegaCdSaveData.createFromSegaCdData(newRawSaveData);\n  }\n\n  static createFromSegaCdData(arrayBuffer) {\n    const segaCdArrayBuffer = SegaCdUtil.truncateToActualSize(arrayBuffer);\n\n    const numSaveFiles = SegaCdUtil.getNumFiles(segaCdArrayBuffer);\n    let saveFiles = readSaveFiles(segaCdArrayBuffer, numSaveFiles);\n\n    // Some emulators concat their internal memory save with their ram cart save.\n    // We may wish to build a better UI around this to make it clear where\n    // the saves are coming from, but for now as a first pass just parse both parts\n    // and concat the arrays of save files together so the user can see everything\n    //\n    // Unsure how common this is: found one save while looking that was in this format\n\n    if (segaCdArrayBuffer.byteLength < arrayBuffer.byteLength) {\n      const arrayBuffer2 = arrayBuffer.slice(segaCdArrayBuffer.byteLength);\n\n      if (SegaCdUtil.isCorrectlyFormatted(arrayBuffer2)) {\n        const segaCdArrayBuffer2 = SegaCdUtil.truncateToActualSize(arrayBuffer2);\n\n        const numSaveFiles2 = SegaCdUtil.getNumFiles(segaCdArrayBuffer2);\n        const saveFiles2 = readSaveFiles(segaCdArrayBuffer2, numSaveFiles2);\n\n        saveFiles = saveFiles.concat(saveFiles2);\n\n        // Make the size of the new save be the next-larger size of the biggest\n        // of the 2 saves we're combining. This should ensure that we're able to store all\n        // of the files in both parts. User will get a cryptic error message about file\n        // being in the wrong format in the unlikely event that they don't fit. But this\n        // will be a seldom-used feature and a fix will add even more complexity.\n\n        const firstSizeIndex = PlatformSaveSizes.segacd.indexOf(segaCdArrayBuffer.byteLength);\n        const secondSizeIndex = PlatformSaveSizes.segacd.indexOf(segaCdArrayBuffer2.byteLength);\n\n        const sizeIndexToUse = Math.min(Math.max(firstSizeIndex, secondSizeIndex) + 1, PlatformSaveSizes.segacd.length - 1);\n\n        return SegaCdSaveData.createFromSaveFiles(saveFiles, PlatformSaveSizes.segacd[sizeIndexToUse]);\n      }\n    }\n\n    return new SegaCdSaveData(segaCdArrayBuffer, saveFiles);\n  }\n\n  static createFromSaveFiles(saveFiles, size) {\n    // Setup and make sure we have enough space for the files\n\n    let segaCdArrayBuffer = SegaCdUtil.makeEmptySave(size);\n    const initialFreeBlocks = SegaCdUtil.getTotalAvailableBlocks(segaCdArrayBuffer); // If we call SegaCdUtil.getNumFreeBlocks() it will subtract one because of the extra block that's reserved for the first file's directory entry\n\n    const requiredBlocksForSaves = saveFiles.reduce((accumulatedBlocks, saveFile) => accumulatedBlocks + getRequiredBlocks(saveFile), 0);\n    const requiredBlocksForDirectoryEntries = Math.ceil(saveFiles.length / 2);\n    const requiredReservedBlocks = ((saveFiles.length % 2) === 0) ? 1 : 0; // We can store 2 directory entries in a block. We always need room for the next future directory entry. So, if there are an odd number of save files we can store the next one in our last block. But if there are an even number of save files we need to reserve the next block\n\n    const requiredBlocks = requiredBlocksForSaves + requiredBlocksForDirectoryEntries + requiredReservedBlocks;\n\n    if (requiredBlocks > initialFreeBlocks) {\n      throw new Error(`The specified save files require a total of ${requiredBlocks} blocks of free space, but Sega CD save data of ${size} bytes only has ${initialFreeBlocks} free blocks`);\n    }\n\n    // Write the files\n\n    let currentBlock = 1; // Block 0 is reserved\n    const saveFilesOutput = [];\n    const directoryEntries = [];\n\n    saveFiles.forEach((saveFile) => {\n      const fileSizeBlocks = getRequiredBlocks(saveFile);\n\n      directoryEntries.push(getDirectoryEntry(saveFile, currentBlock));\n\n      segaCdArrayBuffer = writeSaveFile(saveFile, currentBlock, segaCdArrayBuffer);\n\n      saveFilesOutput.push({\n        ...saveFile,\n        startBlockNumber: currentBlock,\n        fileSizeBlocks,\n      });\n\n      currentBlock += fileSizeBlocks;\n    });\n\n    // Combine our directory entries into half-blocks that can be encoded as full blocks\n\n    if ((directoryEntries.length % 2) === 1) {\n      directoryEntries.push(getEmptyDirectoryEntry());\n    }\n\n    const combinedDirectoryEntries = [];\n\n    for (let i = 0; i < (directoryEntries.length / 2); i += 1) {\n      combinedDirectoryEntries.push(Util.concatArrayBuffers([directoryEntries[(i * 2) + 1], directoryEntries[i * 2]])); // Directory entires are written in reverse order: they're read from the bottom up\n    }\n\n    combinedDirectoryEntries.forEach((combinedDirectoryEntry, index) => {\n      const offset = segaCdArrayBuffer.byteLength - DIRECTORY_SIZE - (BLOCK_SIZE * (index + 1));\n\n      segaCdArrayBuffer = encodeBlock(segaCdArrayBuffer, combinedDirectoryEntry, offset);\n    });\n\n    // Finish up\n\n    const numFreeBlocks = initialFreeBlocks - requiredBlocks;\n\n    SegaCdUtil.setNumFreeBlocks(segaCdArrayBuffer, numFreeBlocks);\n    SegaCdUtil.setNumFiles(segaCdArrayBuffer, saveFiles.length);\n\n    return new SegaCdSaveData(segaCdArrayBuffer, saveFilesOutput);\n  }\n\n  // This constructor creates a new object from a binary representation of Sega CD save data\n  constructor(arrayBuffer, saveFiles) {\n    this.arrayBuffer = arrayBuffer;\n    this.saveFiles = saveFiles;\n    this.volumeInfo = getVolumeInfo(arrayBuffer);\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getNumFreeBlocks() {\n    return this.volumeInfo.numFreeBlocks;\n  }\n\n  getFormat() {\n    return this.volumeInfo.format;\n  }\n\n  getVolume() {\n    return this.volumeInfo.volume;\n  }\n\n  getMediaId() {\n    return this.volumeInfo.mediaId;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaError.js",
    "content": "export default class SegaError extends Error {\n  constructor(internalSaveError = null, ramCartError = null) {\n    super();\n    this.internalSaveError = internalSaveError;\n    this.ramCartError = ramCartError;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Emulators/Emulators.js",
    "content": "/*\nThere are various emulators for the Saturn, some of which use slightly different save file formats.\nSince everywhere on the site we tell people that \"emulator/raw\" format is the lingua franca, we need to\nbe able to read/write any emulator format for the Saturn transparently\n*/\n\nimport MednafenSegaSaturnSaveData from './mednafen';\nimport YabauseSegaSaturnSaveData from './yabause';\nimport YabaSanshiroSegaSaturnSaveData from './yabasanshiro';\n\nconst EMULATOR_CLASSES = [\n  MednafenSegaSaturnSaveData,\n  YabauseSegaSaturnSaveData,\n  YabaSanshiroSegaSaturnSaveData,\n];\n\nexport default class EmulatorSegaSaturnSaveData {\n  static createWithNewSize(segaSaturnSaveData, newSize) {\n    for (let i = 0; i < EMULATOR_CLASSES.length; i += 1) {\n      try {\n        return EMULATOR_CLASSES[i].createWithNewSize(segaSaturnSaveData, newSize);\n      } catch (e) {\n        // Try the next one\n      }\n    }\n\n    throw new Error('This file does not appear to contain Sega Saturn emulator save data');\n  }\n\n  static createFromSegaSaturnData(arrayBuffer) {\n    for (let i = 0; i < EMULATOR_CLASSES.length; i += 1) {\n      try {\n        return EMULATOR_CLASSES[i].createFromSegaSaturnData(arrayBuffer);\n      } catch (e) {\n        // Try the next one\n      }\n    }\n\n    throw new Error('This file does not appear to contain Sega Saturn emulator save data');\n  }\n\n  static createFromSaveFiles(saveFiles, blockSize) {\n    for (let i = 0; i < EMULATOR_CLASSES.length; i += 1) {\n      try {\n        return EMULATOR_CLASSES[i].createFromSaveFiles(saveFiles, blockSize);\n      } catch (e) {\n        // Try the next one\n      }\n    }\n\n    throw new Error('This file does not appear to contain Sega Saturn emulator save data');\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Emulators/mednafen.js",
    "content": "/*\nThe popular emulator mednafen reads/writes raw Saturn BIOS files, but compresses the cartridge saves using gzip\n\nNote that it is able to load uncompressed cartridge saves as well: it will just compress them when you exit the emulator.\n\nAlso, our compressed files are very slightly different from the ones that it creates (different by 1 bit in my test case),\nprobably because of different compression settings. But the emulator is able to load them fine as well.\n*/\n\nimport SegaSaturnSaveData from '../SegaSaturn';\n\nimport CompressionGzip from '../../../util/CompressionGzip';\n\nexport default class MednafenSegaSaturnSaveData {\n  static createWithNewSize(/* segaSaturnSaveData, newSize */) {\n    /*\n    const newRawSaveData = SegaSaturnUtil.resize(segaSaturnSaveData.getArrayBuffer(), newSize);\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(newRawSaveData);\n    */\n  }\n\n  static createFromSegaSaturnData(arrayBuffer) {\n    // Cartridge saves from mednafen are compressed using gzip, but internal saves are not\n    let uncompressedArrayBuffer = null;\n\n    try {\n      uncompressedArrayBuffer = CompressionGzip.decompress(arrayBuffer);\n    } catch (e) {\n      uncompressedArrayBuffer = arrayBuffer;\n    }\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(uncompressedArrayBuffer);\n  }\n\n  static createFromSaveFiles(saveFiles, blockSize) {\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, blockSize);\n\n    if (blockSize === SegaSaturnSaveData.CARTRIDGE_BLOCK_SIZE) {\n      return new SegaSaturnSaveData(\n        CompressionGzip.compress(segaSaturnSaveData.getArrayBuffer()),\n        segaSaturnSaveData.getSaveFiles(),\n        segaSaturnSaveData.getVolumeInfo(),\n      );\n    }\n\n    return segaSaturnSaveData;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Emulators/yabasanshiro.js",
    "content": "/*\nThe emulator yaba sanshiro reads/writes raw Saturn BIOS files which are byte-expanded.\nThey're also a nonstandard length (0x800000 bytes, byte-expanded -- so 0x400000 regular) that's much longer than\nregular BIOS files (0x8000 bytes) or regular backup cart files (0x80000 bytes)\n\nIt appears that at this time, this emulator doesn't emulate the backup cartridge for saves.\n*/\n\nimport SegaSaturnSaveData from '../SegaSaturn';\n\nimport GenesisUtil from '../../../util/Genesis';\n\nconst PADDING_VALUE = 0xFF;\n\nconst BLOCK_SIZE = 0x40;\nconst FILE_SIZE = 0x800000; // The final, byte-expanded, file size\n\nexport default class YabaSanshiroSegaSaturnSaveData {\n  static createWithNewSize(/* segaSaturnSaveData, newSize */) {\n    /*\n    const newRawSaveData = SegaSaturnUtil.resize(segaSaturnSaveData.getArrayBuffer(), newSize);\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(newRawSaveData);\n    */\n  }\n\n  static createFromSegaSaturnData(arrayBuffer) {\n    // Saves from yaba sanshiro are byte-expanded\n\n    if (!GenesisUtil.isByteExpanded(arrayBuffer)) {\n      throw new Error('This does not appear to be a yaba sanshiro save file');\n    }\n\n    const byteCollapsedArrayBuffer = GenesisUtil.byteCollapse(arrayBuffer);\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(byteCollapsedArrayBuffer, BLOCK_SIZE);\n  }\n\n  static createFromSaveFiles(saveFiles) {\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, BLOCK_SIZE, FILE_SIZE / 2);\n\n    return new SegaSaturnSaveData(\n      GenesisUtil.byteExpand(segaSaturnSaveData.getArrayBuffer(), PADDING_VALUE),\n      segaSaturnSaveData.getSaveFiles(),\n      segaSaturnSaveData.getVolumeInfo(),\n    );\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Emulators/yabause.js",
    "content": "/*\nThe older emulator yabause reads/writes raw Saturn BIOS files which are byte-expanded\n\nI'm unsure of what cartridge saves look like from this emulator because I haven't seen an example yet\n*/\n\nimport SegaSaturnSaveData from '../SegaSaturn';\n\nimport GenesisUtil from '../../../util/Genesis';\n\nconst PADDING_VALUE = 0xFF;\n\nexport default class YabauseSegaSaturnSaveData {\n  static createWithNewSize(/* segaSaturnSaveData, newSize */) {\n    /*\n    const newRawSaveData = SegaSaturnUtil.resize(segaSaturnSaveData.getArrayBuffer(), newSize);\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(newRawSaveData);\n    */\n  }\n\n  static createFromSegaSaturnData(arrayBuffer) {\n    // Saves from yabause are byte-expanded\n\n    if (!GenesisUtil.isByteExpanded(arrayBuffer)) {\n      throw new Error('This does not appear to be a yabause save file');\n    }\n\n    const byteCollapsedArrayBuffer = GenesisUtil.byteCollapse(arrayBuffer);\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(byteCollapsedArrayBuffer);\n  }\n\n  static createFromSaveFiles(saveFiles, blockSize) {\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, blockSize);\n\n    return new SegaSaturnSaveData(\n      GenesisUtil.byteExpand(segaSaturnSaveData.getArrayBuffer(), PADDING_VALUE),\n      segaSaturnSaveData.getSaveFiles(),\n      segaSaturnSaveData.getVolumeInfo(),\n    );\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/IndividualSaves/Bup.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThe standard format for individual saves on the Saturn appears to be the .BUP format. It contains all the stuff found in the header\nfor each save in the files created by the Saturn's BIOS, plus some other extra stuff.\n\nThe format is described here: https://github.com/slinga-homebrew/Save-Game-BUP-Scripts/blob/main/bup_header.h#L94\nAnd here is some code that populates all of the fields: https://github.com/slinga-homebrew/Save-Game-BUP-Scripts/blob/main/bup_parse.py#L248\n\nLike the code above, we're going to ignore some of the fields like stats and block size.\n\nHere's the structure as assembled from reading https://github.com/slinga-homebrew/Save-Game-BUP-Scripts/blob/main/bup_parse.py#L248\n0x00 - 0x03: Magic\n0x04 - 0x07: Save ID\n0x08 - 0x0B: stats: we leave as zero. Details: https://github.com/cafe-alpha/pskai_wtfpl/blob/main/vmem_defs.h#L82\n0x0C - 0x0F: unused\n0x10 - 0x1B: archive name\n0x1C - 0x26: comment\n0x27:        language code\n0x28 - 0x2B: date code 1: when game was last saved\n0x2C - 0x2F: data size in bytes\n0x30 - 0x31: data size in blocks: we leave as zero (we don't know whether this save will be written to internal memory or a backup cart, and they have different block sizes)\n0x32 - 0x33: padding\n0x34 - 0x37: date code 2: when Pseudo Saturn Kai last started\n0x38 - 0x3F: unused\n\nThe portion from 0x10 - 0x31 inclusive is the official BupDir struct, as detailed here: http://ppcenter.free.fr/satdocs/ST-162-R1-092994.html (page 42)\n\nNote that we are supposed to prefer the first date in the structure (when the game was last saved) over the second date (when Pseudo Saturn Kai last started)\nhttps://github.com/cafe-alpha/pskai_wtfpl/blob/main/vmem_defs.h#L127\n*/\n\nimport SegaSaturnSaveData from '../SegaSaturn';\nimport SegaSaturnUtil from '../Util';\n\nimport Util from '../../../util/util';\n\nconst LITTLE_ENDIAN = false;\n\nconst HEADER_SIZE = 64;\n\nconst MAGIC = 'Vmem';\nconst MAGIC_OFFSET = 0x00;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst SAVE_ID_OFFSET = 0x04;\n\nconst SAVE_NAME_OFFSET = 0x10;\nconst SAVE_NAME_LENGTH = SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_LENGTH + 1; // +1 to hold a NULL at the end\n\nconst COMMENT_OFFSET = 0x1C;\nconst COMMENT_LENGTH = SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_LENGTH + 1; // +1 to hold a NULL at the end\n\nconst LANGUAGE_OFFSET = 0x27;\nconst DATE_OFFSET_1 = 0x28;\nconst SAVE_SIZE_OFFSET = 0x2C;\nconst DATE_OFFSET_2 = 0x34;\n\nexport default class SegaSaturnBupSaveData {\n  // We take in a list of save files so that we can assign a unique ID to each BUP file that we return\n  static convertSaveFilesToBups(saveFiles) {\n    return saveFiles.map((saveFile, index) => {\n      let headerArrayBuffer = Util.getFilledArrayBuffer(HEADER_SIZE, 0x00); // In the BUP header structure there's lots of padding and also fields that we don't need to fill in\n\n      headerArrayBuffer = Util.setMagic(headerArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n      headerArrayBuffer = Util.setString(headerArrayBuffer, SAVE_NAME_OFFSET, saveFile.name, SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_ENCODING, SAVE_NAME_LENGTH - 1);\n      headerArrayBuffer = Util.setString(headerArrayBuffer, COMMENT_OFFSET, saveFile.comment, SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_ENCODING, COMMENT_LENGTH - 1);\n\n      const headerDataView = new DataView(headerArrayBuffer);\n\n      headerDataView.setUint32(SAVE_ID_OFFSET, index, LITTLE_ENDIAN);\n      headerDataView.setUint8(LANGUAGE_OFFSET, saveFile.languageCode);\n      headerDataView.setUint32(DATE_OFFSET_1, saveFile.dateCode, LITTLE_ENDIAN);\n      headerDataView.setUint32(SAVE_SIZE_OFFSET, saveFile.saveSize, LITTLE_ENDIAN);\n      headerDataView.setUint32(DATE_OFFSET_2, saveFile.dateCode, LITTLE_ENDIAN);\n\n      return Util.concatArrayBuffers([headerArrayBuffer, saveFile.rawData]);\n    });\n  }\n\n  static convertBupsToSaveFiles(arrayBuffers) {\n    return arrayBuffers.map((arrayBuffer) => {\n      const headerArrayBuffer = arrayBuffer.slice(0, HEADER_SIZE);\n      const headerDataView = new DataView(headerArrayBuffer);\n      const headerUint8Array = new Uint8Array(headerArrayBuffer);\n\n      const rawData = arrayBuffer.slice(HEADER_SIZE);\n\n      try {\n        Util.checkMagic(headerArrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n      } catch (e) {\n        throw new Error('This does not appear to be a Sega Saturn save file in .BUP format');\n      }\n\n      const languageCode = headerDataView.getUint8(LANGUAGE_OFFSET);\n      const dateCode1 = headerDataView.getUint32(DATE_OFFSET_1, LITTLE_ENDIAN);\n      const dateCode2 = headerDataView.getUint32(DATE_OFFSET_2, LITTLE_ENDIAN);\n      const saveSize = headerDataView.getUint32(SAVE_SIZE_OFFSET, LITTLE_ENDIAN);\n\n      const dateCode = (dateCode1 !== 0) ? dateCode1 : dateCode2; // See note above about which date to prefer\n\n      if (saveSize !== rawData.byteLength) {\n        throw new Error(`Specified save size of ${saveSize} bytes does not match actual save size of ${rawData.byteLength} bytes`);\n      }\n\n      return {\n        name: Util.readNullTerminatedString(headerUint8Array, SAVE_NAME_OFFSET, SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_ENCODING, SAVE_NAME_LENGTH - 1),\n        languageCode,\n        language: SegaSaturnUtil.getLanguageString(languageCode),\n        comment: Util.readNullTerminatedString(headerUint8Array, COMMENT_OFFSET, SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_ENCODING, COMMENT_LENGTH - 1),\n        dateCode,\n        date: SegaSaturnUtil.getDate(dateCode),\n        saveSize,\n        rawData,\n      };\n    });\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Saroo/Cart.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThis is the SS_MEMS.BIN file created by the Saroo\nThe official save converter describes as \"SAROO extend save\": https://github.com/tpunix/SAROO/blob/master/tools/savetool/main.c#L131\nThe Saroo reads/writes here when the game wants to access a backup memory cart: https://github.com/tpunix/SAROO/issues/232\n\nIt's parsed by https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_mems.c\n\nThis file has 8064 blocks of 1024 bytes each (see below about the \"missing\" 128 blocks from the occupancy bitmap)\n\nBlock 0: Header\n\n0x00 - 0x07:  Magic\n0x08 - 0x0B:  Total size\n0x0C - 0x0D:  Free block\n0x0E - 0x0F:  Unused (listed as \"first save\", but not used and set to 0x00)\n0x10 - 0x3FF: Block occupancy bitmap\n\nBlocks 1 - 7: Directory entries\n\nDirectory entry:\n\n0x00 - 0x0B: Name\n0x0C - 0x0D: Unused (listed as save size and read as a uint32. But it's only 2 bytes from the starting block num. This appears to be a bug, and they also this is always set to 0x00: https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_mems.c#L314\n0x0E - 0x0F: Archive entry block number\n\nArchive entry:\n\n0x00 - 0x0B: Name\n0x0C - 0x0F: Size in bytes\n0x10 - 0x1A: Comment\n0x1B:        Language code\n0x1C - 1x1F: Date code\n0x40 - ????: Save data (if small enough to fit in this block), or list of blocks containing the save data (terminated with ARCHIVE_ENTRY_BLOCK_LIST_END)\n*/\n\nimport Util from '../../../util/util';\nimport ArrayUtil from '../../../util/Array';\n\nimport SegaSaturnSaveData from '../SegaSaturn';\nimport SegaSaturnUtil from '../Util';\n\nimport SegaSaturnSarooUtil from './Util';\n\nconst LITTLE_ENDIAN = false;\n\nconst BLOCK_SIZE = 1024;\nconst TOTAL_BLOCKS = 8192; // The file is this many blocks long, but only 8064 are usable: see note below about the \"missing\" blocks\nconst FILL_VALUE = 0x00;\n\nconst HEADER_NUM_BLOCKS = 1;\n\nconst MAGIC = 'SaroMems';\nconst MAGIC_OFFSET = 0;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst TOTAL_SIZE_OFFSET = 0x08;\nconst FREE_BLOCKS_OFFSET = 0x0C;\nconst BITMAP_OFFSET = 0x10;\nconst BITMAP_LENGTH = BLOCK_SIZE - BITMAP_OFFSET; // Note that the bitmap is \"missing\" 16 bytes, which are used by the header. 16 bytes * 8 = 128 blocks not included in the bitmap. Hence the file has 8064 blocks instead of 8192\n\nconst AVAILABLE_BLOCKS = BITMAP_LENGTH * 8;\n\nconst DIRECTORY_OFFSET = BLOCK_SIZE;\nconst DIRECTORY_NUM_BLOCKS = 7;\nconst DIRECTORY_ENTRY_NAME_OFFSET = 0x00;\nconst DIRECTORY_ENTRY_STARTING_BLOCK = 0x0E;\nconst DIRECTORY_ENTRY_LENGTH = 0x10;\n\nconst TOTAL_DIRECTORY_ENTRIES = (DIRECTORY_NUM_BLOCKS * BLOCK_SIZE) / DIRECTORY_ENTRY_LENGTH;\n\nconst ARCHIVE_ENTRY_NAME_OFFSET = 0x00;\nconst ARCHIVE_ENTRY_SIZE_OFFSET = 0x0C;\nconst ARCHIVE_ENTRY_COMMENT_OFFSET = 0x10;\nconst ARCHIVE_ENTRY_LANGUAGE_OFFSET = 0x1B;\nconst ARCHIVE_ENTRY_DATE_OFFSET = 0x1C;\nconst ARCHIVE_ENTRY_BLOCK_LIST_OFFSET = 0x40;\nconst ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE = 2;\nconst ARCHIVE_ENTRY_BLOCK_LIST_END = 0x0000;\n\nconst ARCHIVE_ENTRY_BLOCK_LIST_AVAILABLE_SIZE = BLOCK_SIZE - ARCHIVE_ENTRY_BLOCK_LIST_OFFSET;\nconst ARCHIVE_ENTRY_MAX_NUM_BLOCKS = (ARCHIVE_ENTRY_BLOCK_LIST_AVAILABLE_SIZE / ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE) - 1; // -1 for the end of list marker. We have space for a list of 479 blocks, which would support files of 479kB: much larger than the original Saturn's cart memory\n\nconst NUM_RESERVED_BLOCKS = HEADER_NUM_BLOCKS + DIRECTORY_NUM_BLOCKS;\n\nfunction createEmptyBlock() {\n  return Util.getFilledArrayBuffer(BLOCK_SIZE, FILL_VALUE);\n}\n\nfunction createHeaderBlock(volumeInfo) {\n  const blockOccupancyBitmapArrayBuffer = SegaSaturnSarooUtil.createBlockOccupancyBitmap(volumeInfo.usedBlocks, BITMAP_LENGTH);\n\n  let headerBlock = createEmptyBlock();\n  headerBlock = Util.setMagic(headerBlock, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n  headerBlock = Util.setArrayBufferPortion(headerBlock, blockOccupancyBitmapArrayBuffer, BITMAP_OFFSET, 0, BITMAP_LENGTH);\n\n  const headerBlockDataView = new DataView(headerBlock);\n\n  headerBlockDataView.setUint32(TOTAL_SIZE_OFFSET, volumeInfo.totalSize, LITTLE_ENDIAN);\n  headerBlockDataView.setUint16(FREE_BLOCKS_OFFSET, volumeInfo.numFreeBlocks, LITTLE_ENDIAN);\n\n  return headerBlock;\n}\n\nfunction createDirectoryEntry(saveFile, startingBlockNum) {\n  let directoryEntry = Util.getFilledArrayBuffer(DIRECTORY_ENTRY_LENGTH, FILL_VALUE);\n  directoryEntry = Util.setString(directoryEntry, DIRECTORY_ENTRY_NAME_OFFSET, saveFile.name, SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_ENCODING, SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_LENGTH);\n\n  const directoryEntryDataView = new DataView(directoryEntry);\n\n  directoryEntryDataView.setUint16(DIRECTORY_ENTRY_STARTING_BLOCK, startingBlockNum, LITTLE_ENDIAN);\n\n  return directoryEntry;\n}\n\nfunction createDirectory(gameSaveFilesWithBlockList) {\n  let currentBlockNum = NUM_RESERVED_BLOCKS;\n\n  const directoryEntries = gameSaveFilesWithBlockList.map((saveFileWithBlockList) => {\n    const saveFileStartingBlockNum = currentBlockNum;\n\n    currentBlockNum += saveFileWithBlockList.blockList.length;\n\n    return createDirectoryEntry(saveFileWithBlockList, saveFileStartingBlockNum);\n  });\n\n  const remainingDirectorySize = (TOTAL_DIRECTORY_ENTRIES - directoryEntries.length) * DIRECTORY_ENTRY_LENGTH;\n\n  if (remainingDirectorySize > 0) {\n    const remainingDirectoryArrayBuffer = Util.getFilledArrayBuffer(remainingDirectorySize, FILL_VALUE);\n\n    return Util.concatArrayBuffers([...directoryEntries, remainingDirectoryArrayBuffer]);\n  }\n\n  return Util.concatArrayBuffers(directoryEntries);\n}\n\nfunction createBlockListForSaveFile(saveFile, startingBlockNum) {\n  // First create the archive entry block\n\n  let archiveEntry = createEmptyBlock();\n  archiveEntry = Util.setString(archiveEntry, ARCHIVE_ENTRY_NAME_OFFSET, saveFile.name, SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_ENCODING, SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_LENGTH);\n  archiveEntry = Util.setString(archiveEntry, ARCHIVE_ENTRY_COMMENT_OFFSET, saveFile.comment, SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_ENCODING, SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_LENGTH);\n\n  const archiveEntryDataView = new DataView(archiveEntry);\n\n  archiveEntryDataView.setUint32(ARCHIVE_ENTRY_SIZE_OFFSET, saveFile.rawData.byteLength, LITTLE_ENDIAN);\n  archiveEntryDataView.setUint8(ARCHIVE_ENTRY_LANGUAGE_OFFSET, saveFile.languageCode);\n  archiveEntryDataView.setUint32(ARCHIVE_ENTRY_DATE_OFFSET, saveFile.dateCode, LITTLE_ENDIAN);\n\n  const blockList = [];\n\n  // If the save data can fit within the archive block then it's found there\n  // Otherwise, the rest of the archive block is a list of blocks which contain the save data\n\n  if (saveFile.rawData.byteLength <= ARCHIVE_ENTRY_BLOCK_LIST_AVAILABLE_SIZE) {\n    archiveEntry = Util.setArrayBufferPortion(archiveEntry, saveFile.rawData, ARCHIVE_ENTRY_BLOCK_LIST_OFFSET, 0, saveFile.rawData.byteLength);\n    blockList.push(archiveEntry);\n  } else {\n    // If the file is too big to fit into the archive block then we need to fill in the block list,\n    // and divide the file into blocks\n\n    // Fill in the block list\n\n    const numBlocks = Math.ceil(saveFile.rawData.byteLength / BLOCK_SIZE);\n\n    if (numBlocks > ARCHIVE_ENTRY_MAX_NUM_BLOCKS) {\n      throw new Error(`Not enough space to store file ${saveFile.name} - ${saveFile.comment}: requires ${numBlocks} but the maximum is ${ARCHIVE_ENTRY_MAX_NUM_BLOCKS}`);\n    }\n\n    for (let i = 0; i < numBlocks; i += 1) {\n      const blockListEntryOffset = ARCHIVE_ENTRY_BLOCK_LIST_OFFSET + (ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE * i);\n      archiveEntryDataView.setUint16(blockListEntryOffset, startingBlockNum + 1 + i, LITTLE_ENDIAN); // +1 because of the archive entry block. We're cheating a bit here because we know we will lay everything our sequentially\n    }\n\n    const blockListEndOffset = ARCHIVE_ENTRY_BLOCK_LIST_OFFSET + (ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE * numBlocks);\n    archiveEntryDataView.setUint16(blockListEndOffset, ARCHIVE_ENTRY_BLOCK_LIST_END, LITTLE_ENDIAN);\n\n    blockList.push(archiveEntry);\n\n    // Now divide the data into blocks. We need to pad the data in the last block to be exactly a block size\n\n    let rawDataPadded = saveFile.rawData;\n\n    if ((saveFile.rawData % BLOCK_SIZE) !== 0) {\n      const paddingBytes = BLOCK_SIZE - (saveFile.rawData.byteLength % BLOCK_SIZE);\n      rawDataPadded = Util.concatArrayBuffers([rawDataPadded, Util.getFilledArrayBuffer(paddingBytes, FILL_VALUE)]);\n    }\n\n    for (let i = 0; i < numBlocks; i += 1) {\n      const blockStartingOffset = i * BLOCK_SIZE;\n      blockList.push(rawDataPadded.slice(blockStartingOffset, blockStartingOffset + BLOCK_SIZE));\n    }\n  }\n\n  return {\n    ...saveFile,\n    blockList,\n  };\n}\n\nfunction getBlock(arrayBuffer, blockNumber) {\n  return arrayBuffer.slice(blockNumber * BLOCK_SIZE, (blockNumber + 1) * BLOCK_SIZE);\n}\n\nfunction getDirectoryArrayBuffer(arrayBuffer) {\n  return arrayBuffer.slice(DIRECTORY_OFFSET, DIRECTORY_OFFSET + (DIRECTORY_NUM_BLOCKS * BLOCK_SIZE));\n}\n\nfunction getOccupiedDirectoryEntryIndexes(arrayBuffer) {\n  const directoryArrayBuffer = getDirectoryArrayBuffer(arrayBuffer);\n  const directoryUint8Array = new Uint8Array(directoryArrayBuffer);\n  const allDirectoryEntryIndexes = ArrayUtil.createSequentialArray(0, TOTAL_DIRECTORY_ENTRIES);\n\n  return allDirectoryEntryIndexes.filter((index) => (directoryUint8Array[index * DIRECTORY_ENTRY_LENGTH] !== 0)); // Test if first character of name is non-zero. Same as https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_mems.c#L308\n}\n\nfunction getSaveFile(arrayBuffer, directoryEntryIndex) {\n  // First read the directory entry to get the name and block number of the archive entry block\n\n  const directoryArrayBuffer = getDirectoryArrayBuffer(arrayBuffer);\n  const directoryDataView = new DataView(directoryArrayBuffer);\n  const directoryUint8Array = new Uint8Array(directoryArrayBuffer);\n\n  const directoryEntryOffset = directoryEntryIndex * DIRECTORY_ENTRY_LENGTH;\n  const directoryName = Util.readNullTerminatedString(\n    directoryUint8Array,\n    directoryEntryOffset + DIRECTORY_ENTRY_NAME_OFFSET,\n    SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_ENCODING,\n    SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_LENGTH,\n  );\n  const startingBlockNum = directoryDataView.getUint16(directoryEntryOffset + DIRECTORY_ENTRY_STARTING_BLOCK);\n\n  // Now read the archive entry block to get all of the save file metadata\n\n  const archiveEntryBlock = getBlock(arrayBuffer, startingBlockNum);\n  const archiveEntryBlockDataView = new DataView(archiveEntryBlock);\n  const archiveEntryBlockUint8Array = new Uint8Array(archiveEntryBlock);\n\n  const name = Util.readNullTerminatedString(\n    archiveEntryBlockUint8Array,\n    ARCHIVE_ENTRY_NAME_OFFSET,\n    SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_ENCODING,\n    SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_LENGTH,\n  );\n  const comment = Util.readNullTerminatedString(\n    archiveEntryBlockUint8Array,\n    ARCHIVE_ENTRY_COMMENT_OFFSET,\n    SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_ENCODING,\n    SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_LENGTH,\n  );\n  const saveSize = archiveEntryBlockDataView.getUint32(ARCHIVE_ENTRY_SIZE_OFFSET, LITTLE_ENDIAN);\n  const languageCode = archiveEntryBlockDataView.getUint8(ARCHIVE_ENTRY_LANGUAGE_OFFSET);\n  const dateCode = archiveEntryBlockDataView.getUint32(ARCHIVE_ENTRY_DATE_OFFSET, LITTLE_ENDIAN);\n\n  if (name !== directoryName) {\n    throw new Error(`File appears to be corrupt: found directory entry with name ${directoryName} but the corresponding archive entry has name ${name}`);\n  }\n\n  const rawDataBlockList = [];\n  let rawData = null;\n\n  // Lastly we can get the actual save data\n  // If the save data can fit within the archive block then it's found there\n  // Otherwise, the rest of the archive block is a list of blocks which contain the save data\n\n  if (saveSize <= ARCHIVE_ENTRY_BLOCK_LIST_AVAILABLE_SIZE) {\n    rawData = archiveEntryBlock.slice(ARCHIVE_ENTRY_BLOCK_LIST_OFFSET, ARCHIVE_ENTRY_BLOCK_LIST_OFFSET + saveSize);\n  } else {\n    let blockListCurrentOffset = ARCHIVE_ENTRY_BLOCK_LIST_OFFSET;\n    let blockListEntry = archiveEntryBlockDataView.getUint16(blockListCurrentOffset);\n\n    while (blockListEntry !== ARCHIVE_ENTRY_BLOCK_LIST_END) {\n      rawDataBlockList.push(blockListEntry);\n      blockListCurrentOffset += ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE;\n      blockListEntry = archiveEntryBlockDataView.getUint16(blockListCurrentOffset);\n    }\n\n    const rawDataBlocks = rawDataBlockList.map((blockNum) => getBlock(arrayBuffer, blockNum));\n\n    rawData = Util.concatArrayBuffers(rawDataBlocks).slice(0, saveSize);\n  }\n\n  return {\n    name,\n    languageCode,\n    language: SegaSaturnUtil.getLanguageString(languageCode),\n    comment,\n    dateCode,\n    date: SegaSaturnUtil.getDate(dateCode),\n    blockList: rawDataBlockList,\n    saveSize,\n    rawData,\n  };\n}\n\nexport default class SarooSegaSaturnCartSaveData {\n  static createWithNewSize(/* segaSaturnSaveData, newSize */) {\n    /*\n    const newRawSaveData = SegaSaturnUtil.resize(segaSaturnSaveData.getArrayBuffer(), newSize);\n\n    return SarooSegaSaturnCartSaveData.createFromSegaSaturnData(newRawSaveData);\n    */\n  }\n\n  static saveFilesContainsFile(saveFiles, saveFile) {\n    return (saveFiles.findIndex((x) => SarooSegaSaturnCartSaveData.saveFilesAreEqual(x, saveFile)) >= 0);\n  }\n\n  static saveFilesAreEqual(saveFile1, saveFile2) {\n    return (saveFile1.name === saveFile2.name);\n  }\n\n  static upsertGameSaveFiles(existingGameSaveFiles, newGameSaveFiles) {\n    const existingCopy = existingGameSaveFiles.slice(0); // Shallow copy\n\n    // Merge in the new game save files into the existing game save files\n    // Uses an 'upsert' style operation where missing records are inserted, and existing records are updated\n\n    newGameSaveFiles.forEach((newSaveFile) => {\n      const existingSaveFileIndex = existingCopy.findIndex((existing) => SarooSegaSaturnCartSaveData.saveFilesAreEqual(existing, newSaveFile));\n\n      if (existingSaveFileIndex < 0) {\n        // If this save file does not exist for this game, then add it\n        existingCopy.push(newSaveFile);\n      } else {\n        // If this save file does exist for this game, then update it\n        existingCopy[existingSaveFileIndex] = newSaveFile;\n      }\n    });\n\n    return existingCopy;\n  }\n\n  static isCartSarooData(arrayBuffer) {\n    try {\n      SarooSegaSaturnCartSaveData.createFromSarooData(arrayBuffer);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  static createFromSarooData(arrayBuffer) {\n    const dataView = new DataView(arrayBuffer);\n\n    Util.checkMagic(arrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const totalSize = dataView.getUint32(TOTAL_SIZE_OFFSET, LITTLE_ENDIAN);\n    const numFreeBlocks = dataView.getUint16(FREE_BLOCKS_OFFSET, LITTLE_ENDIAN);\n    const bitmap = arrayBuffer.slice(BITMAP_OFFSET, BITMAP_OFFSET + BITMAP_LENGTH);\n\n    const { usedBlocks } = SegaSaturnSarooUtil.getBlockOccupancy(bitmap, totalSize, BLOCK_SIZE);\n\n    const occupiedDirectoryEntryIndexes = getOccupiedDirectoryEntryIndexes(arrayBuffer);\n    const saveFiles = occupiedDirectoryEntryIndexes.map((index) => getSaveFile(arrayBuffer, index));\n\n    const volumeInfo = {\n      totalSize,\n      numFreeBlocks,\n      numUsedBlocks: usedBlocks.length,\n      usedBlocks,\n    };\n\n    return new SarooSegaSaturnCartSaveData(arrayBuffer, saveFiles, volumeInfo);\n  }\n\n  static createFromSaveFiles(gameSaveFiles) {\n    if (gameSaveFiles.length > TOTAL_DIRECTORY_ENTRIES) {\n      throw new Error(`Not enough space to hold all saves. Requires ${gameSaveFiles.length} saves, but directory only has room for ${TOTAL_DIRECTORY_ENTRIES} saves`);\n    }\n\n    // First figure out how many blocks each save file requires\n\n    let startingBlockNum = NUM_RESERVED_BLOCKS;\n\n    const gameSaveFilesWithBlockList = gameSaveFiles.map((saveFile) => {\n      const saveFileWithBlockList = createBlockListForSaveFile(saveFile, startingBlockNum);\n      startingBlockNum += saveFileWithBlockList.blockList.length;\n      return saveFileWithBlockList;\n    });\n    const gameBlocksList = gameSaveFilesWithBlockList.map((saveFileWithBlocks) => saveFileWithBlocks.blockList);\n    const gameBlocks = Util.concatArrayBuffers(gameBlocksList.flat());\n\n    // Now that we know how many blocks each save takes we can calculate the volume info and directory blocks\n\n    const directoryBlocks = createDirectory(gameSaveFilesWithBlockList);\n\n    const numUsedBlocks = NUM_RESERVED_BLOCKS + gameBlocksList.flat().length;\n    const usedBlocks = ArrayUtil.createSequentialArray(0, numUsedBlocks); // Cheating, because we know we're going to lay everything out sequentially\n\n    if (numUsedBlocks > AVAILABLE_BLOCKS) {\n      throw new Error(`Not enough space to hold all saves. Requires ${numUsedBlocks} but we only have ${AVAILABLE_BLOCKS} of space`);\n    }\n\n    const volumeInfo = {\n      totalSize: TOTAL_BLOCKS * BLOCK_SIZE,\n      numFreeBlocks: AVAILABLE_BLOCKS - numUsedBlocks,\n      numUsedBlocks,\n      usedBlocks,\n    };\n\n    // With the volume info we can make the header block and the number of empty blocks we need to pad out the file\n\n    const headerBlock = createHeaderBlock(volumeInfo);\n    const emptyBlocks = Util.getFilledArrayBuffer((TOTAL_BLOCKS - numUsedBlocks) * BLOCK_SIZE, FILL_VALUE); // Note that we already checked that numUsedBlocks is <= AVAILABLE_BLOCKS, which is < TOTAL_BLOCKS. So we'll always have some number of bytes here\n\n    // Concat all the portions to create the final file\n\n    const arrayBuffer = Util.concatArrayBuffers([headerBlock, directoryBlocks, gameBlocks, emptyBlocks]);\n\n    return new SarooSegaSaturnCartSaveData(arrayBuffer, gameSaveFiles, volumeInfo);\n  }\n\n  // This constructor creates a new object from a binary representation of Sega Saturn save data\n  constructor(arrayBuffer, saveFiles, volumeInfo) {\n    this.arrayBuffer = arrayBuffer;\n    this.saveFiles = saveFiles;\n    this.volumeInfo = volumeInfo;\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getVolumeInfo() {\n    return this.volumeInfo;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Saroo/Internal.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThis is the SS_SAVE.BIN file created by the Saroo.\nThe official save converter describes as \"SAROO save file\": https://github.com/tpunix/SAROO/blob/master/tools/savetool/main.c#L131\nThe Saroo reads/writes here when the game wants to access the system's internal memory: https://github.com/tpunix/SAROO/issues/232\n\nIt's parsed by https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_bup.c\n\nThe file is divided into slots of 0x10000 bytes, one per game (this is double the Saturn's internal memory size, per game). Slot 0 is reserved.\n\nIt appears that the file expands as necessary to fit new slots.\n\nReserved slot format:\n\n0x00 - 0x0F: Magic\n0x10 - 0x1F: Game ID 1 (corresponds to the save slot beginning at 0x10000)\n0x20 - 0x2F: Game ID 2 (corresponds to the save slot beginning at 0x20000)\n(etc)\n\nSave slot format:\n0x00 - 0x07: Magic\n0x08 - 0x11: Total size\n0x0C - 0x0D: Block size\n0x0E - 0x0F: Free blocks\n0x10 - 0x1F: Unused\n0x20 - 0x2F: Game ID\n0x30 - 0x3D: Unused\n0x3E - 0x3F: Block number of the first save\n0x40 - 0x7F: Block occupancy bitmap for the entire slot (includes the slot header block and archive entry blocks)\n\nArchive entry format:\n0x00 - 0x0A: Archive name, 11 bytes\n0x0C - 0x0F: Archive byte size, 4 bytes\n0x10 - 0x19: Archive comment, 10 bytes\n0x1A: 00\n0x1B: Language code\n0x1C - 0x1F: Archive date encoding, 4 bytes\n0x3E - 0x3F: The block number of the next save\n0x40 - 0x7F: Block occupancy bitmap for the data for this save (does not include the archive entry block)\n*/\n\nimport Util from '../../../util/util';\nimport ArrayUtil from '../../../util/Array';\n\nimport SegaSaturnSaveData from '../SegaSaturn';\nimport SegaSaturnUtil from '../Util';\nimport SegaSaturnSarooUtil from './Util';\n\nconst LITTLE_ENDIAN = false;\n\nconst MAGIC = 'Saroo Save File'; // 16 bytes long, the same as the length of a game ID in the reserved slot\nconst MAGIC_OFFSET = 0;\nconst MAGIC_ENCODING = 'US-ASCII';\n\nconst SLOT_SIZE = 0x10000;\nconst DEFAULT_BLOCK_SIZE = 0x80;\n\nconst BITMAP_LENGTH = 64;\n\nconst GAME_ID_LENGTH = 0x10;\nconst GAME_ID_ENCODING = 'US-ASCII';\n\nconst NUM_RESERVED_SLOTS = 1; // For the magic string above\nconst NUM_SLOTS = SLOT_SIZE / GAME_ID_LENGTH; // In theory, the reserved slot can store this many game IDs\nconst NUM_AVAILABLE_SLOTS = NUM_SLOTS - NUM_RESERVED_SLOTS;\n\nconst FILL_VALUE = 0x00;\n\nconst SLOT_MAGIC = 'SaroSave';\nconst SLOT_MAGIC_OFFSET = 0;\nconst SLOT_MAGIC_ENCODING = 'US-ASCII';\n\nconst SLOT_TOTAL_SIZE_OFFSET = 0x08;\nconst SLOT_BLOCK_SIZE_OFFSET = 0x0C;\nconst SLOT_FREE_BLOCKS_OFFSET = 0x0E;\nconst SLOT_GAME_ID_OFFSET = 0x20;\nconst SLOT_FIRST_SAVE_BLOCK_OFFSET = 0x3E; // This contains NO_NEXT_SAVE if there's no first save\nconst SLOT_BITMAP_OFFSET = 0x40;\n\nconst NUM_RESERVED_BLOCKS = 1; // The first block in a slot contains the slot information: magic, total size, block size, bitmap, etc\n\nconst ARCHIVE_ENTRY_NAME_OFFSET = 0x00;\nconst ARCHIVE_ENTRY_SAVE_SIZE_OFFSET = 0x0C;\nconst ARCHIVE_ENTRY_COMMENT_OFFSET = 0x10;\nconst ARCHIVE_ENTRY_LANGUAGE_OFFSET = 0x1B;\nconst ARCHIVE_ENTRY_DATE_OFFSET = 0x1C;\nconst ARCHIVE_ENTRY_NEXT_SAVE_BLOCK_OFFSET = 0x3E; // This contains NO_NEXT_SAVE if there's no next save\nconst ARCHIVE_ENTRY_BITMAP_OFFSET = 0x40;\n\nconst NO_NEXT_SAVE = 0;\n\nfunction slotContainsValidSaves(slotNum, arrayBuffer) {\n  // Reserved slots can't contain valid saves\n\n  if (slotNum < NUM_RESERVED_SLOTS) {\n    return false;\n  }\n\n  // A slot contains a valid save if there's text in its game ID spot in the reserved slot,\n  // and if the file is big enough to hold the data for that slot\n\n  const dataView = new DataView(arrayBuffer);\n  const dummy = dataView.getUint32(slotNum * GAME_ID_LENGTH, LITTLE_ENDIAN); // Anything non-zero in the first 4 bytes is sufficient to say there's text there: https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_bup.c#L397\n\n  return (dummy !== 0) && (arrayBuffer.byteLength >= ((slotNum + 1) * SLOT_SIZE));\n}\n\nfunction getSlot(slotNum, arrayBuffer) {\n  return arrayBuffer.slice(slotNum * SLOT_SIZE, (slotNum + 1) * SLOT_SIZE);\n}\n\nfunction getBlock(slotArrayBuffer, blockSize, blockNumber) {\n  return slotArrayBuffer.slice(blockNumber * blockSize, (blockNumber + 1) * blockSize);\n}\n\n// Based on get_next_block() from https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_bup.c#L74\n// It just finds the next occupied block in sequential order and returns it\n//\n// I don't think that this deals with fragmentation correctly. When adding a new save it just finds the first free block\n// https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_bup.c#L279 and then keeps finding the next available\n// free block https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_bup.c#L296 but they're not linked together\n// in any way. And, the occupancy bitmap doesn't provide any ability to link blocks together\n//\n// We'll just replicate the functionality from that tool here.\nfunction getNextBlockNum(blockNum, blockOccupancy) {\n  const subsequentBlockOccupancy = blockOccupancy.slice(blockNum);\n  const subsequentBlockIndex = subsequentBlockOccupancy.find((blockIsOccupied) => blockIsOccupied);\n\n  if (subsequentBlockIndex !== undefined) {\n    return subsequentBlockIndex + blockNum;\n  }\n\n  throw new Error('No further block is occupied');\n}\n\n// Based on access_data() from https://github.com/tpunix/SAROO/blob/master/tools/savetool/sr_bup.c#L97\n// Read the save data one block at a time and concat them all together\nfunction getRawDataBlockList(blockNum, blockSize, saveSize, blockOccupancy) {\n  const blockIndexes = ArrayUtil.createSequentialArray(0, Math.ceil(saveSize / blockSize));\n\n  let currentBlockNum = blockNum;\n\n  return blockIndexes.map(() => {\n    currentBlockNum = getNextBlockNum(currentBlockNum, blockOccupancy);\n    return currentBlockNum;\n  });\n}\n\nfunction getRawData(blockList, blockSize, saveSize, slotArrayBuffer) {\n  const blocks = blockList.map((blockNum) => getBlock(slotArrayBuffer, blockSize, blockNum));\n\n  return Util.concatArrayBuffers(blocks).slice(0, saveSize);\n}\n\nfunction getSaveFiles(slotNum, arrayBuffer) {\n  const slotArrayBuffer = getSlot(slotNum, arrayBuffer);\n  const slotDataView = new DataView(slotArrayBuffer);\n  const slotUint8Array = new Uint8Array(slotArrayBuffer);\n\n  try {\n    Util.checkMagic(slotArrayBuffer, SLOT_MAGIC_OFFSET, SLOT_MAGIC, SLOT_MAGIC_ENCODING);\n  } catch (e) {\n    // It's possible to have a slot with a valid game ID listed in the reserved block but completely blank data in its slot\n    // In this case, we just return that there's no save files here\n    return {\n      gameId: null,\n      saveFiles: [],\n    };\n  }\n\n  const totalSize = slotDataView.getUint32(SLOT_TOTAL_SIZE_OFFSET, LITTLE_ENDIAN);\n  const blockSize = slotDataView.getUint16(SLOT_BLOCK_SIZE_OFFSET, LITTLE_ENDIAN);\n  const freeBlocks = slotDataView.getUint16(SLOT_FREE_BLOCKS_OFFSET, LITTLE_ENDIAN);\n  const gameId = Util.readNullTerminatedString(slotUint8Array, SLOT_GAME_ID_OFFSET, GAME_ID_ENCODING, GAME_ID_LENGTH);\n  let nextSaveBlockNum = slotDataView.getUint16(SLOT_FIRST_SAVE_BLOCK_OFFSET, LITTLE_ENDIAN);\n  const slotBitmap = slotArrayBuffer.slice(SLOT_BITMAP_OFFSET, SLOT_BITMAP_OFFSET + BITMAP_LENGTH);\n\n  const slotBlockOccupancy = SegaSaturnSarooUtil.getBlockOccupancy(slotBitmap, totalSize, blockSize);\n\n  const saveFiles = [];\n\n  while (nextSaveBlockNum !== NO_NEXT_SAVE) {\n    const archiveEntryBlockArrayBuffer = getBlock(slotArrayBuffer, blockSize, nextSaveBlockNum);\n    const archiveEntryBlockDataView = new DataView(archiveEntryBlockArrayBuffer);\n    const archiveEntryBlockUint8Array = new Uint8Array(archiveEntryBlockArrayBuffer);\n\n    const name = Util.readNullTerminatedString(archiveEntryBlockUint8Array, ARCHIVE_ENTRY_NAME_OFFSET, SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_ENCODING, SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_LENGTH);\n    const languageCode = archiveEntryBlockDataView.getUint8(ARCHIVE_ENTRY_LANGUAGE_OFFSET);\n    const comment = Util.readNullTerminatedString(\n      archiveEntryBlockUint8Array,\n      ARCHIVE_ENTRY_COMMENT_OFFSET,\n      SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_ENCODING,\n      SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_LENGTH,\n    );\n    const dateCode = archiveEntryBlockDataView.getUint32(ARCHIVE_ENTRY_DATE_OFFSET, LITTLE_ENDIAN);\n    const saveSize = archiveEntryBlockDataView.getUint32(ARCHIVE_ENTRY_SAVE_SIZE_OFFSET, LITTLE_ENDIAN);\n\n    const saveFileBitmap = archiveEntryBlockArrayBuffer.slice(ARCHIVE_ENTRY_BITMAP_OFFSET, ARCHIVE_ENTRY_BITMAP_OFFSET + BITMAP_LENGTH);\n    const saveFileBlockOccupancy = SegaSaturnSarooUtil.getBlockOccupancy(saveFileBitmap, totalSize, blockSize);\n\n    const rawDataBlockList = getRawDataBlockList(nextSaveBlockNum, blockSize, saveSize, saveFileBlockOccupancy.blockOccupancy);\n    const rawData = getRawData(rawDataBlockList, blockSize, saveSize, slotArrayBuffer);\n\n    nextSaveBlockNum = archiveEntryBlockDataView.getUint16(ARCHIVE_ENTRY_NEXT_SAVE_BLOCK_OFFSET, LITTLE_ENDIAN);\n\n    saveFiles.push({\n      name,\n      languageCode,\n      language: SegaSaturnUtil.getLanguageString(languageCode),\n      comment,\n      dateCode,\n      date: SegaSaturnUtil.getDate(dateCode),\n      blockList: rawDataBlockList,\n      saveSize,\n      rawData,\n    });\n  }\n\n  return {\n    gameId,\n    freeBlocks,\n    slotBlockOccupancy,\n    saveFiles,\n  };\n}\n\nfunction getVolumeInfo(arrayBuffer) {\n  // Not much I can think of to say about the volume as a whole, since each slot is more like a mini-volume\n  // with a max size and number of free blocks and etc\n  return {\n    totalSlots: Math.floor(arrayBuffer.byteLength / SLOT_SIZE),\n  };\n}\n\nfunction createReservedSlot(gameSaveFiles) {\n  // The reserved slot is the magic, followed by the ID of every game that has a save. The game IDs have the same length as the magic\n\n  let reservedSlot = Util.getFilledArrayBuffer(SLOT_SIZE, FILL_VALUE);\n\n  reservedSlot = Util.setMagic(reservedSlot, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n  gameSaveFiles.forEach((gameInfo, index) => {\n    reservedSlot = Util.setString(reservedSlot, (index + 1) * GAME_ID_LENGTH, gameInfo.gameId, GAME_ID_ENCODING, GAME_ID_LENGTH);\n  });\n\n  return reservedSlot;\n}\n\nfunction createGameSlot(gameInfo) {\n  // First calculate how many blocks we need for all of our saves and create our block occupancy bitmap\n\n  let nextSaveBlockNum = NUM_RESERVED_BLOCKS;\n\n  const saveFilesWithBlocksNeeded = gameInfo.saveFiles.map((saveFile) => {\n    const numDataBlocksNeeded = Math.ceil(saveFile.rawData.byteLength / DEFAULT_BLOCK_SIZE);\n    const startingBlockNum = nextSaveBlockNum;\n\n    nextSaveBlockNum += (numDataBlocksNeeded + 1);\n\n    return {\n      ...saveFile,\n      numDataBlocksNeeded,\n      nextSaveBlockNum,\n      usedBlocks: ArrayUtil.createSequentialArray(startingBlockNum + 1, numDataBlocksNeeded), // Cheating, because we know we're going to lay everything out sequentially\n    };\n  });\n\n  if (saveFilesWithBlocksNeeded.length > 0) {\n    saveFilesWithBlocksNeeded[saveFilesWithBlocksNeeded.length - 1].nextSaveBlockNum = NO_NEXT_SAVE;\n  }\n\n  let numUsedBlocks = NUM_RESERVED_BLOCKS; // First block is the header\n\n  saveFilesWithBlocksNeeded.forEach((saveFile) => {\n    numUsedBlocks += (saveFile.numDataBlocksNeeded + 1); // +1 for the archive entry block for this save\n  });\n\n  const totalBlocks = Math.floor(SLOT_SIZE / DEFAULT_BLOCK_SIZE);\n  const freeBlocks = totalBlocks - numUsedBlocks;\n\n  if (freeBlocks < 0) {\n    throw new Error(`Not enough space to store ${gameInfo.saveFiles.length} saves for the game '${gameInfo.gameId}'. Need ${numUsedBlocks} blocks but only have ${totalBlocks} blocks`);\n  }\n\n  const slotUsedBlocks = ArrayUtil.createSequentialArray(0, numUsedBlocks); // Cheating, because we know we're going to lay everything out sequentially\n  const slotBlockOccupancyBitmapArrayBuffer = SegaSaturnSarooUtil.createBlockOccupancyBitmap(slotUsedBlocks, BITMAP_LENGTH);\n\n  // Now we can create our header block that contains the number of used blocks and the slot block occupancy bitmap\n\n  let headerBlock = Util.getFilledArrayBuffer(DEFAULT_BLOCK_SIZE, FILL_VALUE);\n  headerBlock = Util.setMagic(headerBlock, SLOT_MAGIC_OFFSET, SLOT_MAGIC, SLOT_MAGIC_ENCODING);\n  headerBlock = Util.setString(headerBlock, SLOT_GAME_ID_OFFSET, gameInfo.gameId, GAME_ID_ENCODING, GAME_ID_LENGTH);\n  headerBlock = Util.setArrayBufferPortion(headerBlock, slotBlockOccupancyBitmapArrayBuffer, SLOT_BITMAP_OFFSET, 0, BITMAP_LENGTH);\n\n  const headerBlockDataView = new DataView(headerBlock);\n\n  headerBlockDataView.setUint32(SLOT_TOTAL_SIZE_OFFSET, SLOT_SIZE, LITTLE_ENDIAN);\n  headerBlockDataView.setUint16(SLOT_BLOCK_SIZE_OFFSET, DEFAULT_BLOCK_SIZE, LITTLE_ENDIAN);\n  headerBlockDataView.setUint16(SLOT_FREE_BLOCKS_OFFSET, freeBlocks);\n  headerBlockDataView.setUint16(SLOT_FIRST_SAVE_BLOCK_OFFSET, gameInfo.saveFiles.length > 0 ? NUM_RESERVED_BLOCKS : NO_NEXT_SAVE); // If there's a first save file, it goes in the next block\n\n  // Next we can create the archive block for each save, and append the data (rounded up to the next block)\n\n  const allSlotPortions = [headerBlock];\n\n  saveFilesWithBlocksNeeded.forEach((saveFile) => {\n    const saveFileBlockOccupancyBitmapArrayBuffer = SegaSaturnSarooUtil.createBlockOccupancyBitmap(saveFile.usedBlocks, BITMAP_LENGTH);\n\n    let archiveEntryBlock = Util.getFilledArrayBuffer(DEFAULT_BLOCK_SIZE, FILL_VALUE);\n\n    archiveEntryBlock = Util.setString(\n      archiveEntryBlock,\n      ARCHIVE_ENTRY_NAME_OFFSET,\n      saveFile.name,\n      SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_ENCODING,\n      SegaSaturnSaveData.ARCHIVE_ENTRY_NAME_LENGTH,\n    );\n    archiveEntryBlock = Util.setString(\n      archiveEntryBlock,\n      ARCHIVE_ENTRY_COMMENT_OFFSET,\n      saveFile.comment,\n      SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_ENCODING,\n      SegaSaturnSaveData.ARCHIVE_ENTRY_COMMENT_LENGTH,\n    );\n\n    archiveEntryBlock = Util.setArrayBufferPortion(archiveEntryBlock, saveFileBlockOccupancyBitmapArrayBuffer, ARCHIVE_ENTRY_BITMAP_OFFSET, 0, BITMAP_LENGTH);\n\n    const archiveEntryBlockDataView = new DataView(archiveEntryBlock);\n\n    archiveEntryBlockDataView.setUint32(ARCHIVE_ENTRY_SAVE_SIZE_OFFSET, saveFile.rawData.byteLength, LITTLE_ENDIAN);\n    archiveEntryBlockDataView.setUint8(ARCHIVE_ENTRY_LANGUAGE_OFFSET, saveFile.languageCode);\n    archiveEntryBlockDataView.setUint32(ARCHIVE_ENTRY_DATE_OFFSET, saveFile.dateCode, LITTLE_ENDIAN);\n    archiveEntryBlockDataView.setUint16(ARCHIVE_ENTRY_NEXT_SAVE_BLOCK_OFFSET, saveFile.nextSaveBlockNum, LITTLE_ENDIAN);\n\n    allSlotPortions.push(archiveEntryBlock);\n    allSlotPortions.push(saveFile.rawData);\n    if ((saveFile.rawData.byteLength % DEFAULT_BLOCK_SIZE) !== 0) {\n      // Round us out to the nearest block\n      allSlotPortions.push(Util.getFilledArrayBuffer(DEFAULT_BLOCK_SIZE - (saveFile.rawData.byteLength % DEFAULT_BLOCK_SIZE), FILL_VALUE));\n    }\n  });\n\n  // Fill in the rest of the empty space and combine everything to create the slot\n\n  allSlotPortions.push(Util.getFilledArrayBuffer(freeBlocks * DEFAULT_BLOCK_SIZE, FILL_VALUE));\n\n  return Util.concatArrayBuffers(allSlotPortions);\n}\n\nexport default class SarooSegaSaturnInternalSaveData {\n  static createWithNewSize(/* segaSaturnSaveData, newSize */) {\n    /*\n    const newRawSaveData = SegaSaturnUtil.resize(segaSaturnSaveData.getArrayBuffer(), newSize);\n\n    return SarooSegaSaturnInternalSaveData.createFromSegaSaturnData(newRawSaveData);\n    */\n  }\n\n  static gameSaveFilesContainsFile(gameSaveFiles, gameId, saveFile) {\n    const gameIdIndex = gameSaveFiles.findIndex((x) => x.gameId === gameId);\n\n    if (gameIdIndex < 0) {\n      return false;\n    }\n\n    return (gameSaveFiles[gameIdIndex].saveFiles.findIndex((x) => x.name === saveFile.name) >= 0);\n  }\n\n  static gameSaveFilesAreEqual(gameId1, saveFile1, gameId2, saveFile2) {\n    return (gameId1 === gameId2) && (saveFile1.name === saveFile2.name);\n  }\n\n  static upsertGameSaveFiles(existingGameSaveFiles, newGameSaveFiles) {\n    const existingCopy = existingGameSaveFiles.slice(0); // Shallow copy\n\n    // Merge in the new game save files into the existing game save files\n    // Uses an 'upsert' style operation where missing records are inserted, and existing records are updated\n\n    newGameSaveFiles.forEach((newGame) => {\n      const existingGameIdIndex = existingCopy.findIndex((existing) => existing.gameId === newGame.gameId);\n\n      // If the game isn't present at all in the existing files, then insert all the saves for it\n\n      if (existingGameIdIndex < 0) {\n        existingCopy.push(newGame);\n      } else {\n        // If the game is present, then go through each save file and either insert or update it\n\n        newGame.saveFiles.forEach((newSaveFile) => {\n          const existingSaveFileIndex = existingCopy[existingGameIdIndex].saveFiles.findIndex((existing) => existing.name === newSaveFile.name);\n\n          if (existingSaveFileIndex < 0) {\n            // If this save file does not exist for this game, then add it\n            existingCopy[existingGameIdIndex].saveFiles.push(newSaveFile);\n          } else {\n            // If this save file does exist for this game, then update it\n            existingCopy[existingGameIdIndex].saveFiles[existingSaveFileIndex] = newSaveFile;\n          }\n        });\n      }\n    });\n\n    return existingCopy;\n  }\n\n  static isInternalSarooData(arrayBuffer) {\n    try {\n      SarooSegaSaturnInternalSaveData.createFromSarooData(arrayBuffer);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  static createFromSarooData(arrayBuffer) {\n    Util.checkMagic(arrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n    const allSlotNums = ArrayUtil.createSequentialArray(NUM_RESERVED_SLOTS, NUM_AVAILABLE_SLOTS);\n    const firstInvalidSlotIndex = allSlotNums.findIndex((slotNum) => !slotContainsValidSaves(slotNum, arrayBuffer));\n    const validSlotNums = (firstInvalidSlotIndex >= 0) ? allSlotNums.slice(0, firstInvalidSlotIndex) : allSlotNums;\n\n    const gameSaveFiles = validSlotNums.map((slotNum) => getSaveFiles(slotNum, arrayBuffer));\n\n    const volumeInfo = getVolumeInfo(arrayBuffer);\n\n    return new SarooSegaSaturnInternalSaveData(arrayBuffer, gameSaveFiles, volumeInfo);\n  }\n\n  static createFromSaveFiles(gameSaveFiles) {\n    if (gameSaveFiles.length > NUM_AVAILABLE_SLOTS) {\n      throw new Error(`Too many games to fit in file: found ${gameSaveFiles.length} different games, but can only store ${NUM_AVAILABLE_SLOTS}`);\n    }\n\n    const reservedSlot = createReservedSlot(gameSaveFiles);\n    const gameSlots = gameSaveFiles.map((gameInfo) => createGameSlot(gameInfo));\n    const arrayBuffer = Util.concatArrayBuffers([reservedSlot, ...gameSlots]);\n    const volumeInfo = getVolumeInfo(arrayBuffer);\n\n    return new SarooSegaSaturnInternalSaveData(arrayBuffer, gameSaveFiles, volumeInfo);\n  }\n\n  // This constructor creates a new object from a binary representation of Sega Saturn save data\n  constructor(arrayBuffer, gameSaveFiles, volumeInfo) {\n    this.arrayBuffer = arrayBuffer;\n    this.gameSaveFiles = gameSaveFiles;\n    this.saveFiles = gameSaveFiles.map((gameInfo) => gameInfo.saveFiles).flat();\n    this.volumeInfo = volumeInfo;\n  }\n\n  getGameSaveFiles() {\n    return this.gameSaveFiles;\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getVolumeInfo() {\n    return this.volumeInfo;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Saroo/System.js",
    "content": "/*\nPrior to firmware 0.7, the Saroo writes out a copy of the Saturn's internal memory to SS_BUP.BIN when the user goes into the CD player\nhttps://github.com/tpunix/SAROO/issues/232#issuecomment-2574200546\n\nThe format is the same as the emulator format for internal saves, except it's byte expanded with 0xFF\n*/\n\nimport SegaSaturnSaveData from '../SegaSaturn';\nimport GenesisUtil from '../../../util/Genesis';\n\nconst PADDING_VALUE = 0xFF;\n\nexport default class SarooSegaSaturnSystemSaveData {\n  static createWithNewSize(/* segaSaturnSaveData, newSize */) {\n    /*\n    const newRawSaveData = SegaSaturnUtil.resize(segaSaturnSaveData.getArrayBuffer(), newSize);\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(newRawSaveData);\n    */\n  }\n\n  static isSystemSarooData(arrayBuffer) {\n    try {\n      SarooSegaSaturnSystemSaveData.createFromSarooData(arrayBuffer);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  static createFromSarooData(arrayBuffer) {\n    const internalArrayBuffer = GenesisUtil.byteCollapse(arrayBuffer);\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(internalArrayBuffer);\n  }\n\n  static createFromSaveFiles(saveFiles) {\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, SegaSaturnSaveData.INTERNAL_BLOCK_SIZE);\n\n    return new SegaSaturnSaveData(\n      GenesisUtil.byteExpand(segaSaturnSaveData.getArrayBuffer(), PADDING_VALUE),\n      segaSaturnSaveData.getSaveFiles(),\n      segaSaturnSaveData.getVolumeInfo(),\n    );\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Saroo/Util.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport ArrayUtil from '../../../util/Array';\nimport Util from '../../../util/util';\n\nfunction getByteAndBitForBlockNum(blockNum) {\n  return {\n    byteNum: Math.floor(blockNum / 8),\n    bitNum: blockNum % 8,\n  };\n}\n\nfunction isBlockOccupied(blockNum, bitmapUint8Array) {\n  const { byteNum, bitNum } = getByteAndBitForBlockNum(blockNum);\n\n  return ((bitmapUint8Array[byteNum] & (1 << bitNum)) !== 0);\n}\n\nfunction setBlockOccupied(blockNum, bitmapUint8Array) {\n  const { byteNum, bitNum } = getByteAndBitForBlockNum(blockNum);\n\n  if (byteNum > bitmapUint8Array.length) {\n    throw new Error(`Cannot address block number ${blockNum} in an occupancy bitmap of size ${bitmapUint8Array.length} bytes`);\n  }\n\n  bitmapUint8Array[byteNum] |= (1 << bitNum); // eslint-disable-line no-param-reassign\n}\n\nexport default class SegaSaturnSarooUtil {\n  static getBlockOccupancy(bitmapArrayBuffer, totalSize, blockSize) {\n    const bitmapUint8Array = new Uint8Array(bitmapArrayBuffer);\n\n    const numBlocks = Math.min(totalSize / blockSize, bitmapArrayBuffer.byteLength * 8);\n    const blockOccupancy = ArrayUtil.createSequentialArray(0, numBlocks).map((blockNum) => isBlockOccupied(blockNum, bitmapUint8Array));\n    const usedBlocks = blockOccupancy.reduce((blockList, blockIsOccupied, blockNum) => {\n      if (blockIsOccupied) {\n        blockList.push(blockNum);\n      }\n      return blockList;\n    }, []);\n\n    return {\n      blockOccupancy,\n      usedBlocks,\n    };\n  }\n\n  static createBlockOccupancyBitmap(usedBlocks, bitmapSize) {\n    const bitmapArrayBuffer = Util.getFilledArrayBuffer(bitmapSize, 0x00);\n    const bitmapUint8Array = new Uint8Array(bitmapArrayBuffer);\n\n    usedBlocks.forEach((blockNum) => setBlockOccupied(blockNum, bitmapUint8Array));\n\n    return bitmapArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/SegaSaturn.js",
    "content": "/* eslint-disable no-bitwise */\n\n/*\nThis is based on a description of the Saturn Archive Format from the Saroo repo:\nhttps://github.com/tpunix/SAROO/blob/6f6e18289bbdc9b23b4c91b9da343a1362ed921c/doc/SAROO%E6%8A%80%E6%9C%AF%E7%82%B9%E6%BB%B4.txt#L448\nwhich was translated here:\nhttps://www.reddit.com/r/SegaSaturn/comments/1acty0v/comment/kjz73ft/\n\nDate format from: https://segaxtreme.net/threads/backup-memory-structure.16803/post-156645\n\nUnlike the Sega CD and other consoles like the PS1 and N64, there is no directory at the beginning of the memory. So the entire file must\nbe parsed to get a list of all of the saves it contains and to get a list of occupied blocks.\n\nThe file is divided into equal-sized blocks. Everything is big endian.\n\nThe first 2 blocks are reserved. The first block is the string 'BackUpRam Format' repeated over and over. The BIOS writes out 0x40\nbytes of this regardless of whether the block size is 0x40 or 0x200 bytes. mednafen manually fills the entire first block (either\n0x40 or 0x200 bytes), presumably to allow the reader to infer the block size of the file by counting the number of repetitions of that string.\n\nWe determine the block size of the file by looking at the file length.\n\nThe second block is all 0x00.\n\nFrom there, blocks are of 2 types: archive entry blocks begin with 0x80000000, and data entry blocks begin with 0x00000000\n\nFor an archive entry block, the format is as follows:\n0x00 - 0x03: Block type (0x80000000)\n0x04 - 0x0E: Archive name (null-terminated, encoded as US-ASCII)\n0x0F: Language flag\n0x10 - 0x19: Comment (null-terminated, encoded as shift-jis)\n0x1A - 0x1D: Date (encoded as number of minutes since Jan 1, 1980)\n0x1E - 0x21: Save size in bytes\n0x22 - ????: List of 2-byte block numbers containing save data for this entry. Ends with 0x0000. See notes below.\n???? - end:  Beginning of save data for this entry\n\nFor a data entry block, the format is as follows:\n0x00 - 0x03: Block type (0x00000000)\n0x04 - end:  save data\n\nNote that the save size does not include space for the block type flag at the beginning of each block.\n\nBlock numbers list notes:\n- If the total save data size is < the remaining block size, the marker at 0x22 is set to ARCHIVE_ENTRY_BLOCK_LIST_END.\n  Some sources imply that the marker at 0x22 is missing altogether, which is incorrect: the block list is merely empty.\n\n- If the block numbers list doesn't fit within the remaining block size, then it continues at the first, second, etc block specified in the block list.\n  i.e. the blocks containing the continuation of the block list are specified as part of the block list. This has the effect of ballooning the size\n  of a large save with a small block size: it needs extra blocks to contain the portion of the block list specifying where the block list is.\n  At a larger block size, there's more room for the first block to contain the entire block list, which is also in turn shorter because of the larger blocks.\n  The blocks containing the block list are regular data blocks with 0x00000000 in bytes 0x00 - 0x03.\n*/\n\nimport SegaSaturnUtil from './Util';\n\nimport Util from '../../util/util';\n\nconst LITTLE_ENDIAN = false;\n\nconst MAGIC = 'BackUpRam Format';\nconst MAGIC_ENCODING = 'US-ASCII';\nconst MIN_LENGTH_OF_REPEATING_MAGIC = 0x40;\n\nconst TOTAL_BLOCKS = new Map([ // Total number of blocks in a save file, indexed by block size\n  [0x40, 512],\n  [0x200, 1024],\n]);\n\nconst POSSIBLE_BLOCK_SIZES = Array.from(TOTAL_BLOCKS.keys());\n\nconst INTERNAL_SAVE_SIZE = TOTAL_BLOCKS.get(POSSIBLE_BLOCK_SIZES[0]) * POSSIBLE_BLOCK_SIZES[0];\nconst CARTRIDGE_SAVE_SIZE = TOTAL_BLOCKS.get(POSSIBLE_BLOCK_SIZES[1]) * POSSIBLE_BLOCK_SIZES[1];\n\nconst RESERVED_BLOCKS = [0, 1];\n\nconst BLOCK_TYPE_OFFSET = 0x00;\nconst BLOCK_TYPE_ARCHIVE_ENTRY = 0x80000000;\nconst BLOCK_TYPE_DATA = 0x00000000;\n\nconst DATA_BLOCK_DATA_OFFSET = 0x04;\n\nconst ARCHIVE_ENTRY_NAME_OFFSET = 0x04;\nconst ARCHIVE_ENTRY_NAME_LENGTH = 11;\nconst ARCHIVE_ENTRY_NAME_ENCODING = 'US-ASCII';\n\nconst ARCHIVE_ENTRY_LANGUAGE_OFFSET = 0x0F;\n\nconst ARCHIVE_ENTRY_COMMENT_OFFSET = 0x10;\nconst ARCHIVE_ENTRY_COMMENT_LENGTH = 10;\nconst ARCHIVE_ENTRY_COMMENT_ENCODING = 'shift-jis';\n\nconst ARCHIVE_ENTRY_DATE_OFFSET = 0x1A;\nconst ARCHIVE_ENTRY_SAVE_SIZE_OFFSET = 0x1E;\n\nconst ARCHIVE_ENTRY_BLOCK_LIST_OFFSET = 0x22;\nconst ARCHIVE_ENTRY_BLOCK_LIST_END = 0x0000;\nconst ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE = 2; // Each entry in the block list is a uint16\n\nfunction getBlockSize(arrayBuffer) {\n  // Get our block size from looking at the size of the file\n\n  let blockSize = 0;\n\n  switch (arrayBuffer.byteLength) {\n    case INTERNAL_SAVE_SIZE: {\n      blockSize = POSSIBLE_BLOCK_SIZES[0]; // eslint-disable-line prefer-destructuring\n      break;\n    }\n\n    case CARTRIDGE_SAVE_SIZE: {\n      blockSize = POSSIBLE_BLOCK_SIZES[1]; // eslint-disable-line prefer-destructuring\n      break;\n    }\n\n    default:\n      throw new Error(`Invalid file length of ${arrayBuffer.byteLength}. Cannot infer block size`);\n  }\n\n  return blockSize;\n}\n\nfunction checkHeader(arrayBuffer, blockSize) {\n  // First block contains the MAGIC repeated for 0x40 bytes or longer\n  // Second block is all 0x00\n\n  if (arrayBuffer.byteLength < (blockSize * RESERVED_BLOCKS.length)) {\n    throw new Error('This does not appear to be a valid Sega Saturn save file: it is not long enough to contain the required reserved blocks');\n  }\n\n  // Check our first block\n\n  let currentOffset = 0;\n\n  while (currentOffset < MIN_LENGTH_OF_REPEATING_MAGIC) {\n    try {\n      Util.checkMagic(arrayBuffer, currentOffset, MAGIC, MAGIC_ENCODING);\n    } catch (e) {\n      break;\n    }\n\n    currentOffset += MAGIC.length;\n  }\n\n  if (currentOffset === 0) {\n    throw new Error('This does not appear to be a valid Sega Saturn save file: couldn\\'t find any magic.');\n  }\n\n  if (currentOffset < MIN_LENGTH_OF_REPEATING_MAGIC) {\n    throw new Error('This does not appear to be a valid Sega Saturn save file: didn\\'t find enough magic.');\n  }\n\n  // Check our second block\n\n  const uint8Array = new Uint8Array(arrayBuffer);\n\n  for (let i = blockSize; i < (blockSize * 2); i += 1) {\n    if (uint8Array[i] !== 0x00) {\n      throw new Error('This does not appear to be a valid Sega Saturn save file: the second block is not all 0x00');\n    }\n  }\n\n  return blockSize;\n}\n\nfunction getBlock(arrayBuffer, blockSize, blockNumber) {\n  return arrayBuffer.slice(blockNumber * blockSize, (blockNumber + 1) * blockSize);\n}\n\nfunction makeEmptyBlock(blockSize) {\n  return Util.getFilledArrayBuffer(blockSize, 0x00);\n}\n\nfunction makeSequentialArray(startValue, numValues) {\n  return Array(numValues).fill().map((_, index) => index + startValue);\n}\n\nfunction makeReservedBlocks(blockSize) {\n  let reservedBlock0 = makeEmptyBlock(blockSize);\n\n  let currentOffset = 0;\n\n  while (currentOffset < reservedBlock0.byteLength) {\n    reservedBlock0 = Util.setMagic(reservedBlock0, currentOffset, MAGIC, MAGIC_ENCODING);\n    currentOffset += MAGIC.length;\n  }\n\n  return [reservedBlock0, makeEmptyBlock(blockSize)];\n}\n\nfunction getVolumeInfo(segaSaturnArrayBuffer, blockSize, usedBlocks) {\n  const totalNumBlocks = segaSaturnArrayBuffer.byteLength / blockSize;\n\n  return {\n    blockSize,\n    totalBytes: segaSaturnArrayBuffer.byteLength,\n    totalBlocks: totalNumBlocks - RESERVED_BLOCKS.length,\n    usedBlocks: usedBlocks.length,\n    freeBlocks: totalNumBlocks - usedBlocks.length - RESERVED_BLOCKS.length,\n  };\n}\n\nfunction readSaveFiles(arrayBuffer, blockSize) {\n  const totalNumBlocks = (arrayBuffer.byteLength / blockSize);\n\n  const saveFiles = [];\n\n  let usedBlocks = [];\n  let searchBlockNumber = RESERVED_BLOCKS.length; // The block number where we are currently searching for an archive entry\n\n  while (searchBlockNumber < totalNumBlocks) {\n    let currentBlock = getBlock(arrayBuffer, blockSize, searchBlockNumber);\n    let currentBlockUint8Array = new Uint8Array(currentBlock);\n    let currentBlockDataView = new DataView(currentBlock);\n\n    if (currentBlockDataView.getUint32(BLOCK_TYPE_OFFSET, LITTLE_ENDIAN) === BLOCK_TYPE_ARCHIVE_ENTRY) {\n      usedBlocks.push(searchBlockNumber);\n\n      const name = Util.readNullTerminatedString(currentBlockUint8Array, ARCHIVE_ENTRY_NAME_OFFSET, ARCHIVE_ENTRY_NAME_ENCODING, ARCHIVE_ENTRY_NAME_LENGTH);\n      const languageCode = currentBlockDataView.getUint8(ARCHIVE_ENTRY_LANGUAGE_OFFSET);\n      const comment = Util.readNullTerminatedString(currentBlockUint8Array, ARCHIVE_ENTRY_COMMENT_OFFSET, ARCHIVE_ENTRY_COMMENT_ENCODING, ARCHIVE_ENTRY_COMMENT_LENGTH);\n      const dateCode = currentBlockDataView.getUint32(ARCHIVE_ENTRY_DATE_OFFSET, LITTLE_ENDIAN);\n      const saveSize = currentBlockDataView.getUint32(ARCHIVE_ENTRY_SAVE_SIZE_OFFSET, LITTLE_ENDIAN);\n\n      const blockList = [];\n      let blockListEntryOffset = ARCHIVE_ENTRY_BLOCK_LIST_OFFSET;\n      let nextBlockNumber = currentBlockDataView.getUint16(blockListEntryOffset, LITTLE_ENDIAN); // Note that this is always present, even when the entire save file fits within the starting block. In that case, this value is set to ARCHIVE_ENTRY_BLOCK_LIST_END\n\n      let blockListReadingIndex = 0; // If the block list doesn't fit within the starting block, it continues in the blocks specified in the block list\n\n      while (nextBlockNumber !== ARCHIVE_ENTRY_BLOCK_LIST_END) {\n        blockList.push(nextBlockNumber);\n\n        blockListEntryOffset += 2;\n\n        if (blockListEntryOffset >= blockSize) {\n          currentBlock = getBlock(arrayBuffer, blockSize, blockList[blockListReadingIndex]);\n          blockListReadingIndex += 1;\n\n          currentBlockUint8Array = new Uint8Array(currentBlock);\n          currentBlockDataView = new DataView(currentBlock);\n          blockListEntryOffset = DATA_BLOCK_DATA_OFFSET;\n\n          const blockType = currentBlockDataView.getUint32(BLOCK_TYPE_OFFSET, LITTLE_ENDIAN);\n\n          if (blockType !== BLOCK_TYPE_DATA) {\n            throw new Error(`Found block type 0x${Buffer.from(blockType).toString('hex')} where there should be a data block that continues a block list`);\n          }\n        }\n\n        nextBlockNumber = currentBlockDataView.getUint16(blockListEntryOffset, LITTLE_ENDIAN);\n      }\n\n      usedBlocks = usedBlocks.concat(blockList);\n\n      // The data segments are the remainder of the current block, plus all of the blocks listed in the block list\n      // Note that if the last block list entry was right at the end of currentBlock, the slice below will correctly return a zero-length ArrayBuffer\n\n      const dataBlockList = blockList.slice(blockListReadingIndex); // Remove the blocks used to specify the block list\n\n      const dataSegments = [currentBlock.slice(blockListEntryOffset + 2)].concat(dataBlockList.map((blockNumber) => {\n        const block = getBlock(arrayBuffer, blockSize, blockNumber);\n        const blockDataView = new DataView(block);\n        const blockType = blockDataView.getUint32(BLOCK_TYPE_OFFSET, LITTLE_ENDIAN);\n\n        if (blockType !== BLOCK_TYPE_DATA) {\n          throw new Error(`Found block type 0x${Buffer.from(blockType).toString('hex')} where there should be a data block`);\n        }\n\n        return block.slice(DATA_BLOCK_DATA_OFFSET);\n      }));\n\n      const rawData = Util.concatArrayBuffers(dataSegments).slice(0, saveSize); // We may have appended too many bytes by appending the entire final block, so slice it down to the specified size\n\n      saveFiles.push({\n        name,\n        languageCode,\n        language: SegaSaturnUtil.getLanguageString(languageCode),\n        comment,\n        dateCode,\n        date: SegaSaturnUtil.getDate(dateCode),\n        blockList,\n        saveSize,\n        rawData,\n      });\n    }\n\n    searchBlockNumber += 1;\n  }\n\n  const volumeInfo = getVolumeInfo(arrayBuffer, blockSize, usedBlocks);\n\n  return {\n    saveFiles,\n    volumeInfo,\n  };\n}\n\nfunction getNumDataBlocksForSaveFile(saveFile, blockSize) {\n  // The difficulty in calculating this is that we need an unknown number of bytes to store the list of blocks,\n  // because the block list points to both the blocks that actually store the save data but also to the blocks\n  // that store the block list. So, the longer the block list is the more blocks are needed to store it,\n  // so the longer the block list is\n  // Also, some data fits in the first archive block\n\n  const numDataBytesInArchiveBlock = blockSize - ARCHIVE_ENTRY_BLOCK_LIST_OFFSET;\n  const numDataBytesInDataBlock = blockSize - DATA_BLOCK_DATA_OFFSET;\n\n  let blocksAddedForBlockList = 0;\n  let numBytesToStoreInDataBlocks = 0; // Our first approximation is that we need no data blocks for this save\n  let approxDataSizeInBlocks = 0;\n\n  do {\n    const blockListSizeBytes = (approxDataSizeInBlocks + 1) * ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE; // Need +1 for the end of list entry\n\n    numBytesToStoreInDataBlocks = Math.max(saveFile.rawData.byteLength + blockListSizeBytes - numDataBytesInArchiveBlock, 0);\n\n    const newApproxBlockListSizeInBlocks = Math.ceil(numBytesToStoreInDataBlocks / numDataBytesInDataBlock);\n\n    blocksAddedForBlockList = newApproxBlockListSizeInBlocks - approxDataSizeInBlocks;\n\n    approxDataSizeInBlocks = newApproxBlockListSizeInBlocks;\n  } while (blocksAddedForBlockList > 0);\n\n  return approxDataSizeInBlocks;\n}\n\nfunction getBlocksForSaveFile(saveFile, blockSize, startingBlockNumber) {\n  // First, fill in all of the fields in the archive entry block\n\n  let archiveEntryBlock = makeEmptyBlock(blockSize);\n\n  archiveEntryBlock = Util.setString(archiveEntryBlock, ARCHIVE_ENTRY_NAME_OFFSET, saveFile.name, ARCHIVE_ENTRY_NAME_ENCODING, ARCHIVE_ENTRY_NAME_LENGTH);\n  archiveEntryBlock = Util.setString(archiveEntryBlock, ARCHIVE_ENTRY_COMMENT_OFFSET, saveFile.comment, ARCHIVE_ENTRY_COMMENT_ENCODING, ARCHIVE_ENTRY_COMMENT_LENGTH);\n\n  const archiveEntryBlockDataView = new DataView(archiveEntryBlock);\n\n  archiveEntryBlockDataView.setUint32(BLOCK_TYPE_OFFSET, BLOCK_TYPE_ARCHIVE_ENTRY, LITTLE_ENDIAN);\n  archiveEntryBlockDataView.setUint8(ARCHIVE_ENTRY_LANGUAGE_OFFSET, saveFile.languageCode);\n  archiveEntryBlockDataView.setUint32(ARCHIVE_ENTRY_DATE_OFFSET, saveFile.dateCode, LITTLE_ENDIAN);\n  archiveEntryBlockDataView.setUint32(ARCHIVE_ENTRY_SAVE_SIZE_OFFSET, saveFile.rawData.byteLength, LITTLE_ENDIAN);\n\n  // Now create all of our blocks that contain the block list\n\n  const numDataBlocksRequired = getNumDataBlocksForSaveFile(saveFile, blockSize);\n  const saveFileBlocks = [];\n\n  let currentDataBlockIndex = 0;\n  let currentBlock = archiveEntryBlock;\n  let currentBlockDataView = new DataView(currentBlock);\n  let currentBlockOffset = ARCHIVE_ENTRY_BLOCK_LIST_OFFSET;\n\n  while (currentDataBlockIndex < numDataBlocksRequired) {\n    currentBlockDataView.setUint16(currentBlockOffset, currentDataBlockIndex + startingBlockNumber + 1, LITTLE_ENDIAN); // +1 because of the archive entry block\n    currentBlockOffset += ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE;\n\n    if (currentBlockOffset >= blockSize) {\n      saveFileBlocks.push(currentBlock);\n      currentBlock = makeEmptyBlock(blockSize);\n      currentBlockDataView = new DataView(currentBlock);\n      currentBlockDataView.setUint32(BLOCK_TYPE_OFFSET, BLOCK_TYPE_DATA, LITTLE_ENDIAN);\n      currentBlockOffset = DATA_BLOCK_DATA_OFFSET;\n    }\n\n    currentDataBlockIndex += 1;\n  }\n\n  // Add an end of list marker\n\n  currentBlockDataView.setUint16(currentBlockOffset, ARCHIVE_ENTRY_BLOCK_LIST_END, LITTLE_ENDIAN);\n  currentBlockOffset += ARCHIVE_ENTRY_BLOCK_LIST_ENTRY_SIZE;\n\n  // Now create all of the blocks that contain the save data\n\n  let currentOffsetInSaveData = 0;\n\n  while (currentOffsetInSaveData < saveFile.rawData.byteLength) {\n    if (currentBlockOffset >= blockSize) {\n      saveFileBlocks.push(currentBlock);\n      currentBlock = makeEmptyBlock(blockSize);\n      currentBlockDataView = new DataView(currentBlock);\n      currentBlockDataView.setUint32(BLOCK_TYPE_OFFSET, BLOCK_TYPE_DATA, LITTLE_ENDIAN);\n      currentBlockOffset = DATA_BLOCK_DATA_OFFSET;\n    }\n\n    const saveFileNumBytesToCopyToBlock = Math.min(saveFile.rawData.byteLength, blockSize - currentBlockOffset);\n\n    currentBlock = Util.setArrayBufferPortion(currentBlock, saveFile.rawData, currentBlockOffset, currentOffsetInSaveData, saveFileNumBytesToCopyToBlock);\n\n    currentOffsetInSaveData += saveFileNumBytesToCopyToBlock;\n    currentBlockOffset += saveFileNumBytesToCopyToBlock;\n  }\n\n  saveFileBlocks.push(currentBlock);\n\n  // All done!\n\n  return saveFileBlocks;\n}\n\nexport default class SegaSaturnSaveData {\n  static INTERNAL_BLOCK_SIZE = POSSIBLE_BLOCK_SIZES[0];\n\n  static CARTRIDGE_BLOCK_SIZE = POSSIBLE_BLOCK_SIZES[1];\n\n  static INTERNAL_SAVE_SIZE = INTERNAL_SAVE_SIZE\n\n  static CARTRIDGE_SAVE_SIZE = CARTRIDGE_SAVE_SIZE\n\n  static ARCHIVE_ENTRY_NAME_LENGTH = ARCHIVE_ENTRY_NAME_LENGTH;\n\n  static ARCHIVE_ENTRY_NAME_ENCODING = ARCHIVE_ENTRY_NAME_ENCODING;\n\n  static ARCHIVE_ENTRY_COMMENT_LENGTH = ARCHIVE_ENTRY_COMMENT_LENGTH;\n\n  static ARCHIVE_ENTRY_COMMENT_ENCODING = ARCHIVE_ENTRY_COMMENT_ENCODING;\n\n  static createEmptySave(blockSize) {\n    return SegaSaturnSaveData.createFromSaveFiles([], blockSize).getArrayBuffer();\n  }\n\n  static isCorrectlyFormatted(arrayBuffer) {\n    try {\n      SegaSaturnSaveData.createFromSegaSaturnData(arrayBuffer);\n      return true;\n    } catch (e) {\n      return false;\n    }\n  }\n\n  static createWithNewSize(/* segaSaturnSaveData, newSize */) {\n    /*\n    const newRawSaveData = SegaSaturnUtil.resize(segaSaturnSaveData.getArrayBuffer(), newSize);\n\n    return SegaSaturnSaveData.createFromSegaSaturnData(newRawSaveData);\n    */\n  }\n\n  static createFromSegaSaturnData(arrayBuffer, forceBlockSize) {\n    let blockSize = forceBlockSize;\n\n    if (forceBlockSize === undefined) {\n      blockSize = getBlockSize(arrayBuffer);\n    }\n\n    checkHeader(arrayBuffer, blockSize);\n\n    const { saveFiles, volumeInfo } = readSaveFiles(arrayBuffer, blockSize);\n\n    return new SegaSaturnSaveData(arrayBuffer, saveFiles, volumeInfo);\n  }\n\n  static createFromSaveFiles(saveFiles, blockSize, forceFileSize) {\n    if (POSSIBLE_BLOCK_SIZES.find((possibleBlockSize) => possibleBlockSize === blockSize) === undefined) {\n      throw new Error(`Cannot create Saturn save file: ${blockSize} bytes is not a valid block size`);\n    }\n\n    // Transform our save files into blocks\n\n    let currentBlockNumber = RESERVED_BLOCKS.length;\n    const saveFilesBlocks = saveFiles.map((saveFile) => {\n      const blocksForSaveFile = getBlocksForSaveFile(saveFile, blockSize, currentBlockNumber);\n      currentBlockNumber += blocksForSaveFile.length;\n      return blocksForSaveFile;\n    }).flat();\n\n    // Figure out how many blocks we need to use\n\n    let totalNumBlocks = TOTAL_BLOCKS.get(blockSize);\n\n    if (forceFileSize !== undefined) {\n      totalNumBlocks = forceFileSize / blockSize;\n    }\n\n    const blockList = makeReservedBlocks(blockSize).concat(saveFilesBlocks);\n\n    if (blockList.length > totalNumBlocks) {\n      throw new Error(`Not enough space to hold all saves. Requires ${saveFilesBlocks.length} blocks and only has space for ${totalNumBlocks - RESERVED_BLOCKS.length} blocks`);\n    }\n\n    const usedBlocks = makeSequentialArray(RESERVED_BLOCKS.length, saveFilesBlocks.length);\n\n    // Append empty blocks until we have enough total blocks\n\n    while (blockList.length < totalNumBlocks) {\n      blockList.push(makeEmptyBlock(blockSize));\n    }\n\n    // Now that we have all of our blocks, we can assemble them to make our save file image\n\n    const segaSaturnArrayBuffer = Util.concatArrayBuffers(blockList);\n\n    const volumeInfo = getVolumeInfo(segaSaturnArrayBuffer, blockSize, usedBlocks);\n\n    return new SegaSaturnSaveData(segaSaturnArrayBuffer, saveFiles, volumeInfo);\n  }\n\n  constructor(arrayBuffer, saveFiles, volumeInfo) {\n    this.arrayBuffer = arrayBuffer;\n    this.saveFiles = saveFiles;\n    this.volumeInfo = volumeInfo;\n  }\n\n  getSaveFiles() {\n    return this.saveFiles;\n  }\n\n  getVolumeInfo() {\n    return this.volumeInfo;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/SegaSaturn/Util.js",
    "content": "// Taken from https://github.com/slinga-homebrew/Save-Game-BUP-Scripts/blob/main/bup_header.h#L31\nconst LANGUAGE_DECODE = new Map([\n  [0, 'Japanese'],\n  [1, 'English'],\n  [2, 'French'],\n  [3, 'German'],\n  [4, 'Spanish'],\n  [5, 'Italian'],\n]);\n\nconst UNKNOWN_LANGUAGE_STRING = 'Unknown';\nconst UNKNOWN_LANGUAGE_CODE = 0xFF;\n\nconst POSSIBLE_LANGUAGE_CODES = Array.from(LANGUAGE_DECODE.keys());\n\n// The epoch for Javascript Dates is Jan 1, 1970. For Saturn dates, it's Jan 1, 1980\nconst MILLISECONDS_BETWEEN_EPOCHS = 315529200000;\n\nexport default class SegaSaturnUtil {\n  static getLanguageString(languageEncoded) {\n    if (LANGUAGE_DECODE.has(languageEncoded)) {\n      return LANGUAGE_DECODE.get(languageEncoded);\n    }\n\n    // There are save files where the comment field is too long and stomps on the language and date fields\n    // So we have to consider this to be valid\n\n    return UNKNOWN_LANGUAGE_STRING;\n  }\n\n  static getLanguageCode(languageString) {\n    const languageEncoded = POSSIBLE_LANGUAGE_CODES.find((key) => LANGUAGE_DECODE.get(key) === languageString);\n\n    if (languageEncoded === undefined) {\n      return UNKNOWN_LANGUAGE_CODE;\n    }\n\n    return languageEncoded;\n  }\n\n  static getDate(dateEncoded) {\n    // Date conversion from: https://segaxtreme.net/threads/backup-memory-structure.16803/post-156645\n    // The Saturn stores the date as the number of minutes since Jan 1, 1980. So to convert to a javascript Date,\n    // we multiply to get milliseconds, and add the number of milliseconds between Jan 1, 1970 and Jan 1, 1980\n\n    return new Date((dateEncoded * 60 * 1000) + MILLISECONDS_BETWEEN_EPOCHS);\n  }\n\n  static getDateCode(date) {\n    return (date.valueOf() - MILLISECONDS_BETWEEN_EPOCHS) / 1000 / 60;\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Wii/ConvertFrom/ConvertFromN64.js",
    "content": "// Converts from the N64 format on the Wii NAND to something that's usable by N64 emulators like\n// Mupen64Plus.\n//\n// Based on\n// - https://github.com/JanErikGunnar/vcromclaim/blob/master/wiimetadata.py#L505\n// - https://github.com/JanErikGunnar/vcromclaim/blob/master/n64save.py\n//\n// Looks like there's 2 possible save media for N64 games: SRAM and EEPROM, and different rules\n// for how to interpret each one into something usable by an emulator\n\n// Check out this list of known saving types for N64 games:\n// - http://micro-64.com/database/gamesave.shtml\n//\n// It lists:\n// - Controller Pak: 32kB SRAM\n// - 0.5kB EEPROM\n// - 2kB EEPROM\n// - 32kB SRAM\n// - 128kB Flash RAM\n// - 96kB SRAM (one game only: Dezaemon 3D, which wasn't on Virtual Console and was Japan-only)\n\nimport N64Util from '../../../util/N64';\n\nconst EEPROM_SIZES = [4 * 1024, 16 * 1024];\nconst SRAM_SIZES_SRA = [32 * 1024];\nconst SRAM_SIZES_FLA = [128 * 1024, 256 * 1024];\nconst SRAM_SIZES = SRAM_SIZES_SRA.concat(SRAM_SIZES_FLA);\nconst ALL_SIZES = EEPROM_SIZES.concat(SRAM_SIZES);\n\nfunction convertSram(arrayBuffer) {\n  let fileExtension = null;\n\n  // Choose the file extension\n\n  if (SRAM_SIZES_SRA.indexOf(arrayBuffer.byteLength) >= 0) {\n    fileExtension = 'sra';\n  } else if (SRAM_SIZES_FLA.indexOf(arrayBuffer.byteLength) >= 0) {\n    fileExtension = 'fla';\n  } else {\n    throw new Error(`Unknown N64 SRAM file size = ${arrayBuffer.byteLength} bytes`);\n  }\n\n  // Byte swap from big endian to little endian\n\n  return {\n    saveData: N64Util.endianSwap(arrayBuffer),\n    fileExtension,\n  };\n}\n\nfunction convertEeprom(arrayBuffer) {\n  return {\n    saveData: arrayBuffer.slice(0, 2048),\n    fileExtension: 'eep',\n  };\n}\n\nexport default (arrayBuffer, fileName) => {\n  let truncatedArrayBuffer = arrayBuffer;\n\n  // All N64 games are prefixed either 'EEP_' or 'RAM_' with the game ID afterward\n  //\n  // RAM_ is for SRAM games\n  // EEP_ is for everything else (2 sizes of EEPROM, and also FLashRAM)\n  //\n  // For Mario Golf specifically, we need to truncate the file size. Other SRAM games like F-Zero X are fine.\n  //\n  // https://forums.dolphin-emu.org/archive/index.php?thread-35067-95.html\n  //\n  // NMFE is the game ID for Mario Golf 64 in North America. This game was released on Wii VC\n  // in PAL regions and Japan as well: is the filename different in those saves?\n  // Should we rework the logic to look for \"RAM_*\" filenames and just do the same handling?\n  if (fileName === 'RAM_NMFE') {\n    for (let i = ALL_SIZES.length - 1; i >= 0; i -= 1) {\n      if (ALL_SIZES[i] < arrayBuffer.byteLength) {\n        truncatedArrayBuffer = arrayBuffer.slice(0, ALL_SIZES[i]);\n        break;\n      }\n    }\n  }\n\n  // In the code we got this from, they decide the type of file based on its size.\n  // However, the filename stored inside the Wii save also seems to hint at the type.\n  // We're going to use the size for now just because that's how the other code did it,\n  // but if it leads to problems then consider keying off the name instead.\n  //\n  // Hmmm Paper Mario uses Flash RAM, and so needs a .fla extension, but the filename begins with \"EEP_\".\n  // Mario Kart 64 uses a Controller Pak SRAM save, but the filename also begins with \"EEP_\".\n\n  if (EEPROM_SIZES.indexOf(truncatedArrayBuffer.byteLength) >= 0) {\n    return convertEeprom(truncatedArrayBuffer);\n  }\n\n  if (SRAM_SIZES.indexOf(truncatedArrayBuffer.byteLength) >= 0) {\n    return convertSram(truncatedArrayBuffer);\n  }\n\n  throw new Error(`Unknown N64 save type with size = ${arrayBuffer.byteLength} bytes`);\n};\n"
  },
  {
    "path": "frontend/src/save-formats/Wii/ConvertFrom/ConvertFromPcEngine.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"^\", \"^=\", \"~\"] }] */\n\n// Converts from the PC Engine format on the Wii NAND to something that's usable by PC Engine emulators\n//\n// The Wii files appear to be 8kB + 32B whereas 'real' files are 2kB. The Wii files appear to have a 16B header and a 16B footer.\n//\n// Format reverse engineered by https://github.com/JanErikGunnar\n//\n// These files appear to be purposefully obfuscated for some reason. To decode them, work in blocks of 4 bytes and xor each block\n// with bitwise-not the block before it. There is a seed block in the header for use with the first block of data.\n//\n// Note that this looks a lot like Cipher Block Chaining (CBC), with the seed block as an initialization vector: https://searchsecurity.techtarget.com/definition/cipher-block-chaining\n//\n// Additional resources:\n//\n// 1) More information about PC Engine saving: https://blackfalcongames.net/?p=190\n// 2) More information about the PC Engine Backup RAM format: http://blockos.github.io/HuDK/doc/files/include/bram-s.html\n// 3) Info about how BRAM is mapped into the console's memory space: https://github.com/asterick/TurboSharp/blob/master/Text/pcetech.txt#L1379\n// 4) Info about how memory is mapped to the CPU memory space: https://www.lorenzomoretti.com/wp-content/files/chapter_0.txt\n// 5) Homebrew tool for exploring BRAM: https://pdroms.de/files/nec-turbografx16-tg16-pcengine-pce/bram-tool-v1-0\n//\n// According to 2), BRAM is mapped to the CPU memory space using MPR4, which according to 4) puts it at 0x8000 - 0x8800 (0x8000 + 2kB).\n// We see the value 0x8800 at offset 4-5 in output from emulators, as expected from the description for those bytes in 2).\n// However, the Wii files are 8kB in size and correspondingly they write 0xA000 (0x8000 + 8 kB) to those bytes in their output.\n// So when we truncate the file to 2kB we need to update those values as well.\n\nimport Util from '../../../util/util';\n\nconst LITTLE_ENDIAN = true;\nconst BLOCK_SIZE = 4;\nconst BRAM_MEMORY_ADDRESS = 0x8000; // The address in the CPU memory space that the BRAM is mapped to (see above)\nconst BRAM_SIZE = 2048; // In bytes. On a real PCE many games would share this memory. Most emulators, though, create a new virtual BRAM for each game\nconst POINTER_TO_FIRST_BYTE_AFTER_BRAM_OFFSET = 4; // Offset in BRAM of the pointer to the first byte in CPU memory after BRAM\nconst HEADER_LENGTH = 16;\nconst SEED_START = 4;\nconst FOOTER_LENGTH = 16;\nconst MAGIC = 'HUBM'; // Marker at the beginning that signifies correctly-formatted BRAM\nconst MAGIC_ENCODING = 'US-ASCII';\nconst MAGIC_OFFSET = 0;\n\nfunction getBlock(array, currentByte) {\n  return array.slice(currentByte, currentByte + BLOCK_SIZE);\n}\n\nfunction xorBlocks(block1, block2) {\n  const output = new Uint8Array(BLOCK_SIZE);\n\n  for (let i = 0; i < BLOCK_SIZE; i += 1) {\n    output[i] = block1[i] ^ block2[i];\n  }\n\n  return output;\n}\n\nfunction notBlock(block) {\n  const output = new Uint8Array(BLOCK_SIZE);\n\n  for (let i = 0; i < BLOCK_SIZE; i += 1) {\n    output[i] = ~block[i];\n  }\n\n  return output;\n}\n\nexport default (arrayBuffer) => {\n  const header = arrayBuffer.slice(0, HEADER_LENGTH);\n  const inputArrayBuffer = arrayBuffer.slice(HEADER_LENGTH, -FOOTER_LENGTH);\n  const inputArray = new Uint8Array(inputArrayBuffer);\n\n  if (inputArray.byteLength % BLOCK_SIZE !== 0) {\n    throw new Error(`PC Engine input data length ${inputArray.byteLength} is not a multiple of the block size ${BLOCK_SIZE}`);\n  }\n\n  const seedArrayBuffer = header.slice(SEED_START, SEED_START + BLOCK_SIZE);\n  const seedArray = new Uint8Array(seedArrayBuffer);\n  const outputArrayBuffer = new ArrayBuffer(inputArrayBuffer.byteLength);\n  const outputArray = new Uint8Array(outputArrayBuffer);\n\n  // Decode the data by xor'ing each block with NOT the previous block\n\n  let currentByte = 0;\n\n  let previousInputBlock = notBlock(seedArray); // Because we NOT our previous input block in the code below, but we want to use our seed as-is. So we need to pre-NOT it\n\n  while (currentByte < inputArray.byteLength) {\n    const inputBlock = getBlock(inputArray, currentByte);\n\n    const outputBlock = xorBlocks(inputBlock, notBlock(previousInputBlock));\n\n    outputArray.set(outputBlock, currentByte);\n\n    previousInputBlock = inputBlock;\n\n    currentByte += BLOCK_SIZE;\n  }\n\n  // Now check that we got actual PC Engine data\n\n  Util.checkMagic(outputArray, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n\n  // Return data truncated to the correct size\n\n  // We need to change the pointer to the first byte after BRAM when we truncate the file. The Wii version of the file provides\n  // 8kB of BRAM (and so this pointer contains 0x8000 + 8192 = 0xA000). But for compatibility with other emulators we're going to\n  // truncate the file to 2kB: the size of BRAM in a normal PC Engine. So we'll change this value to 0x8000 + 2048 = 0x8800.\n\n  const outputDataView = new DataView(outputArrayBuffer);\n  outputDataView.setUint16(POINTER_TO_FIRST_BYTE_AFTER_BRAM_OFFSET, BRAM_MEMORY_ADDRESS + BRAM_SIZE, LITTLE_ENDIAN);\n\n  const truncatedSaveData = outputArrayBuffer.slice(BRAM_SIZE);\n  if (!Util.allBytesEqual(truncatedSaveData, 0x00)) {\n    throw new Error('Attempting to truncate save that contains extra data');\n  }\n\n  return {\n    saveData: outputArrayBuffer.slice(0, BRAM_SIZE),\n    fileExtension: 'sav',\n  };\n};\n"
  },
  {
    "path": "frontend/src/save-formats/Wii/ConvertFrom/ConvertFromPlatform.js",
    "content": "/*\nThe Wii save files that we get from the SD card are copied from the Wii's internal NAND memory and then\nencrypted/obfuscated before being written to the SD card.\n\nOnce we've decrypted them, we're left with the file as it was stored on the NAND. However, that file may still be\nin a strange format that needs more massaging before it can be loaded by an emulator.\n\nMore information can be found here:\n\nhttps://github.com/JanErikGunnar/vcromclaim/blob/master/wiimetadata.py#L473\n*/\n\nimport ConvertFromN64 from './ConvertFromN64';\nimport ConvertFromSega from './ConvertFromSega';\nimport ConvertFromPcEngine from './ConvertFromPcEngine';\n\nexport default (arrayBuffer, fileName, platformType, gameId) => {\n  let output = null;\n\n  switch (platformType) {\n    case 'VC-NES':\n      output = {\n        saveData: arrayBuffer.slice(64), // NES games have a 64 byte header: https://github.com/JanErikGunnar/vcromclaim/blob/master/nes_extract.py#L242\n        fileExtension: 'sav',\n      };\n      break;\n\n    case 'VC-PCE':\n      output = ConvertFromPcEngine(arrayBuffer);\n      break;\n\n    case 'VC-MD':\n    case 'VC-SMS':\n      output = ConvertFromSega(arrayBuffer, platformType, gameId);\n      break;\n\n    case 'VC-N64':\n      output = ConvertFromN64(arrayBuffer, fileName);\n      break;\n\n    case 'VC-C64': // A few of these games offered saving, usually of high scores. Impossible Mission II (PAL regions) offered saving the game. I couldn't find any Wii VC save files online to test with\n    case 'VC-SNES': // https://github.com/JanErikGunnar/vcromclaim/blob/master/wiimetadata.py#L482\n    case 'VC-NEOGEO': // https://github.com/JanErikGunnar/vcromclaim/blob/master/wiimetadata.py#L501 Haven't been able to find any saves online to test this with. Partial (?) list of Neo Geo games that supported saves: https://www.nintendolife.com/forums/virtual_console/neogeo_games_that_allow_saves#reply-05\n    case 'VC-Arcade': // Do these even have saves?\n    case 'Wii':\n    case 'WiiWare':\n    case 'Homebrew':\n    case 'Unknown':\n      // Nothing needs to be done for these platforms\n      output = {\n        saveData: arrayBuffer,\n        fileExtension: 'sav',\n      };\n      break;\n\n    default:\n      throw new Error(`Unknown Wii platform: '${platformType}'`);\n  }\n\n  return output;\n};\n"
  },
  {
    "path": "frontend/src/save-formats/Wii/ConvertFrom/ConvertFromSega.js",
    "content": "// Converts from the Sega Genesis and Master System format on the Wii NAND to something that can\n// be used by an emulator like Gens/Kega Fusion\n//\n// Based on:\n// - // https://github.com/JanErikGunnar/vcromclaim/blob/master/gensave.py\n//\n// The format is:\n// 4 bytes: 'VCSD'\n// 4 bytes: total size\n// 4 or 5 bytes: magic number relating to the specific game the save is for\n// 4 bytes: 'SRAM'\n// 4 bytes: inner size\n// if next bytes are 'compound data':\n//   4 bytes: 'SRAM'\n//   4 bytes: inner inner size\n//   4 bytes: size of the save\n// else the inner size above is the size of the save\n// N bytes: save data\n//\n// The Genesis and Master System output is slightly different: just whether it's written out as\n// shorts or bytes\n\nimport GenesisUtil from '../../../util/Genesis';\n\nconst MAGIC = 'VCSD';\nconst SRAM = 'SRAM';\nconst COMPOUND_DATA = 'compound data'.concat(String.fromCharCode(0, 0, 0));\nconst CHARSET = 'US-ASCII';\nconst LITTLE_ENDIAN = true; // Little endian file inside a big endian file (the original Wii file written to an SD card)\n\n// I don't see a better way of determining whether a Genesis game has SRAM/EEPROM/FRAM saving than by\n// just having a hardcoded list of game IDs. The Genesis save files all say \"SRAM\" in them.\n\n// EEPROM list taken from https://krikzz.com/pub/support/everdrive-md/v2/gen_eeprom.pdf\n// FRAM list taken from https://forum.digitpress.com/forum/showthread.php?134961-NES-SNES-Genny-Games-with-Battery-Back-up-Save-feature&p=1614576&viewfull=1#post1614576\n\n// Note that \"Wonder Boy in Monster World\" and \"Wonder Boy V - Moster World III\" are the same game but in different regions\n\nconst GENESIS_EEPROM_GAME_IDS = [\n  // NBA Jam (UE)(J)\n  // Blockbuster World Video Game Championship II (U)\n  // NBA Jam Tournament Edition (UE)(J)\n  // NFL Quarterback Club (JUE)\n  // NFL Quarterback Club 96 (UE)\n  // College Slam (U)\n  // Frank Thomas Big Hurt Baseball (UE)\n\n  // NHLPA Hockey 93 (UE)\n  // Rings of Power (UE)\n\n  // Evander 'Real Deal' Holyfield's Boxing (UE)(J)\n  // Greatest Heavyweights of the Ring (J)(U)(E)\n  'MAVE', // Wonder Boy in Monster World (UE)\n  'MAVJ', // Wonder Boy V - Monster World III (J)\n  // The above game was released in PAL regions as well, but I can't find a code for that one on gametdb\n  // Sports Talk Baseball\n\n  // Megaman - The Wily Wars (E)\n  // Rockman Mega World (J) [alt]\n\n  // Micro Machines 2 - Turbo Tournament (E) (J-Cart)\n  // Micro Machines Military (E) (J-Cart)\n  // Micro Machines Turbo Tournament 96 (E) (J-Cart)\n  // Brian Lara Cricket 96\n  // Shane Warne Cricket\n];\n\nconst GENESIS_FRAM_GAME_IDS = [\n  'MBME', // Sonic the Hedgehog 3 (FRAM) (NTSC)\n  'MBMP', // Sonic the Hedgehog 3 (FRAM) (PAL)\n];\n\nfunction seekEndOfString(desiredString, arrayBuffer, startingByteOffset, textDecoder) {\n  let currentByte = startingByteOffset;\n\n  while ((currentByte + desiredString.length) < arrayBuffer.byteLength) {\n    const textArray = new Uint8Array(arrayBuffer.slice(currentByte, currentByte + desiredString.length));\n    const text = textDecoder.decode(textArray);\n\n    if (text === desiredString) {\n      return currentByte + desiredString.length;\n    }\n\n    currentByte += 1;\n  }\n\n  return -1;\n}\n\nexport default (arrayBuffer, platformType, gameId) => {\n  const textDecoder = new TextDecoder(CHARSET);\n  const dataView = new DataView(arrayBuffer);\n  let currentByte = 0;\n\n  // First look for our MAGIC string\n\n  currentByte = seekEndOfString(MAGIC, arrayBuffer, currentByte, textDecoder);\n\n  if (currentByte < 0) {\n    throw new Error(`Save appears corrupted: could not find magic string ${MAGIC}`);\n  }\n\n  // Then the total size\n\n  const totalSize = dataView.getUint32(currentByte, LITTLE_ENDIAN);\n  currentByte += 4;\n\n  // Next is the SRAM string, which skips over the game-specific magic head value which may be 4 or 5 bytes\n\n  const endOfSramByte = seekEndOfString(SRAM, arrayBuffer, currentByte, textDecoder);\n\n  if (endOfSramByte < 0) {\n    throw new Error(`Save appears corrupted: could not find string ${SRAM}`);\n  }\n\n  const headSize = endOfSramByte - currentByte - SRAM.length;\n  currentByte = endOfSramByte;\n\n  // Then is the inner size,\n\n  const innerSize = dataView.getUint32(currentByte, LITTLE_ENDIAN);\n  currentByte += 4;\n\n  if (innerSize !== (totalSize - headSize - 4)) {\n    throw new Error(`Save appears corrupted: found inner size ${innerSize} but total size found was ${totalSize} and head size was ${headSize}`);\n  }\n\n  let saveSize = innerSize;\n\n  // Next may be the \"compound data\" block which is another series of sizes. If it's missing,\n  // the inner size above is the actual save size and the save data is next\n\n  const endOfCompoundDataByte = seekEndOfString(COMPOUND_DATA, arrayBuffer, currentByte, textDecoder);\n\n  if (endOfCompoundDataByte >= 0) {\n    currentByte = endOfCompoundDataByte;\n\n    // We found a compound data block, so next we have the SRAM string again\n\n    const endOfSram2Byte = seekEndOfString(SRAM, arrayBuffer, currentByte, textDecoder);\n\n    if (endOfSram2Byte < 0) {\n      throw new Error(`Save appears corrupted: could not find string ${SRAM} inside compound data`);\n    }\n\n    currentByte = endOfSram2Byte;\n\n    // Then the inner inner size\n\n    const innerInnerSize = dataView.getUint32(currentByte, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    if (innerInnerSize !== (innerSize - COMPOUND_DATA.length - SRAM.length - 4)) {\n      throw new Error(`Save appears corrupted: found inner inner size ${innerInnerSize} but inner size was ${innerSize}`);\n    }\n\n    // Then the actual save size\n\n    saveSize = dataView.getUint32(currentByte, LITTLE_ENDIAN);\n    currentByte += 4;\n\n    if (saveSize !== (innerInnerSize - 4)) {\n      throw new Error(`Save appears corrupted: found save size ${saveSize} but inner inner size was ${innerInnerSize}`);\n    }\n  }\n\n  // Next we have the actual save data\n  // Only read the number of bytes specified, because the actual file length may be padded out considerably\n\n  if ((currentByte + saveSize) > arrayBuffer.byteLength) {\n    throw new Error(`Save appears corrupted: found save size of ${saveSize} but there are only ${currentByte - arrayBuffer.byteLength} bytes remaining in file`);\n  }\n\n  // Master system data is as-is\n\n  if (platformType === 'VC-SMS') {\n    return {\n      saveData: arrayBuffer.slice(currentByte, currentByte + saveSize),\n      fileExtension: 'sav',\n    };\n  }\n\n  // Genesis data may need a bit more finessing\n\n  // Genesis SRAM/FRAM data needs to be converted from bytes into shorts\n  // Genesis EEPROM data does not.\n\n  // First determine the save type\n\n  let saveType = 'SRAM';\n\n  if (GENESIS_EEPROM_GAME_IDS.indexOf(gameId) >= 0) {\n    saveType = 'EEPROM';\n  } else if (GENESIS_FRAM_GAME_IDS.indexOf(gameId) >= 0) {\n    saveType = 'FRAM';\n  }\n\n  // Then figure out what to do based on the save type\n\n  let saveData = arrayBuffer.slice(currentByte, currentByte + saveSize);\n\n  if ((saveType === 'SRAM') || (saveType === 'FRAM')) {\n    saveData = GenesisUtil.byteExpand(saveData, 0x00);\n  }\n\n  return {\n    saveData,\n    fileExtension: 'srm',\n  };\n};\n"
  },
  {
    "path": "frontend/src/save-formats/Wii/GetPlatform/GetPlatform.js",
    "content": "/* Gets the platform of a Wii Virtual Console game based on its Game ID\n\nNote that we do this by asking gametdb.com\n\nOur options are:\n1) Include their 16 MB file along with our distribution, and download and parse it in the user's browser\n2) Have a build-time process that strips out the unneeded stuff from this file then download that to the user's browser instead\n3) Have a server backend that periodically injests this file\n4) Hit their website\n\nReasons for not doing these:\n1 is a nonstarter because the file is way too big to download\n2 sounds like extra work for a save format I'm not sure will be popular\n3 I'd rather not have a server backend to keep hosting costs to a minimum.\n\nPlus this site gets very little traffic. May need to reevaluate if we start getting lots of traffic but I don't expect that given our tiny niche.\n*/\n\nimport { parse } from 'node-html-parser';\n\n// Here, we proxy our requests through the public service for allOrigins (https://allorigins.win/).\n// This adds CORS headers to the responses from gametdb.com, without seeming to add too much latency on top of gametdb's approx 2 seconds.\n//\n// We may need to reevaluate usage of this proxy (and directly hitting the gametdb service) if our traffic increases.\nconst BASE_URL = 'https://api.allorigins.win/raw?url=https://www.gametdb.com/Wii/';\n\n// Note that these types are listed in the downloadable XML version of the website's data, which can be found at: https://www.gametdb.com/Wii/Downloads\nconst PLATFORMS = [\n  'VC-NES', // Nintendo Entertainment System\n  'VC-SNES', // Super Nintendo Entertainment System\n  'VC-N64', // Nintendo 64\n  'VC-PCE', // PC Engine aka Turbografx 16\n  'VC-SMS', // Sega Master System\n  'VC-MD', // Mega Drive aka Sega Genesis\n  'VC-NEOGEO', // Neo Geo\n  'VC-C64', // Commodore 64\n  'VC-Arcade', // Arcade\n  'WiiWare', // WiiWare\n  'Wii', // Wii native title\n  'Homebrew', // Homebrew title\n];\n\nconst REGIONS = {\n  'NTSC-U': 'North America',\n  'NTSC-J': 'Japan',\n  'PAL': 'Europe', // eslint-disable-line quote-props\n};\n\nconst PLATFORMS_LOWERCASE = PLATFORMS.map((x) => x.toLowerCase());\n\nconst UNKNOWN_PLATFORM = 'Unknown';\nconst UNKNOWN_REGION = 'Unknown region';\n\nexport default class GetPlatform {\n  constructor(httpClient) {\n    this.httpClient = httpClient;\n  }\n\n  static getBaseUrl() {\n    return BASE_URL;\n  }\n\n  static unknownPlatform() {\n    return UNKNOWN_PLATFORM;\n  }\n\n  static unknownRegion() {\n    return UNKNOWN_REGION;\n  }\n\n  async get(gameId) {\n    try {\n      const response = await this.httpClient.get(gameId);\n\n      const root = parse(response.data);\n\n      // The gametdb page looks like:\n      // ...\n      // <table class=\"GameData\">\n      //   <tr>\n      //     <td>TD</td><td>[Game ID]</td>\n      //   </tr>\n      //   <tr>\n      //     <td>region</td><td>[Region]</td>\n      //   </tr>\n      //   <tr>\n      //     <td>type</td><td>[Platform type]</td>\n      //   </tr>\n      //   ...\n      // </table>\n      // ...\n\n      // All done with query selectors to try and accompdate any potential future small changes in the html\n      const gameDataTable = root.querySelector('.GameData');\n\n      // The platform type can be listed on rows 2 or 3. The former happens if the region is omitted,\n      // such as in the case of homebrew titles\n\n      let platformType = null;\n      let region = null;\n\n      for (let i = 3; i >= 1; i -= 1) { // Count backwards because almost every game has it on row 3\n        const row = gameDataTable.querySelector(`tr:nth-child(${i})`);\n\n        let rowName = row.querySelector('td:first-child').firstChild.textContent;\n\n        if (rowName !== null) {\n          rowName = rowName.trim().toLowerCase();\n        }\n\n        if ((rowName === 'type') && (platformType === null)) {\n          platformType = row.querySelector('td:last-child').firstChild.textContent;\n        }\n\n        if ((rowName === 'region') && (region === null)) {\n          region = row.querySelector('td:last-child').firstChild.textContent;\n        }\n      }\n\n      // Make sure our region has every word capitalized, so that we get something like \"North America\"\n\n      if (region !== null) {\n        region = region.trim().toUpperCase();\n\n        if (region in REGIONS) {\n          region = REGIONS[region]; // Turn \"NTSC-U\" into \"North America\", etc\n        } else {\n          region = null;\n        }\n      }\n\n      // Make sure we find the platform we parsed in our list of all possible platforms\n\n      if (platformType !== null) {\n        platformType = platformType.trim().toLowerCase();\n      }\n\n      const platformTypeIndex = PLATFORMS_LOWERCASE.indexOf(platformType);\n\n      let platform = UNKNOWN_PLATFORM;\n\n      if (platformTypeIndex >= 0) {\n        platform = PLATFORMS[platformTypeIndex];\n      }\n\n      if (region === null) {\n        region = UNKNOWN_REGION;\n      }\n\n      return {\n        platform,\n        region,\n      };\n    } catch (error) {\n      if ((error.response !== undefined) && (error.response.status === 404)) {\n        return {\n          platform: UNKNOWN_PLATFORM,\n          region: UNKNOWN_REGION,\n        };\n      }\n\n      return {\n        platform: UNKNOWN_PLATFORM,\n        region: UNKNOWN_REGION,\n      }; // Unsure if we should do something different here\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Wii/GetPlatform/HttpClient.js",
    "content": "import axios from 'axios';\nimport axiosRetry from 'axios-retry';\n\nconst NUM_RETRIES = 3; // Definitely need some retries given that we're dealing with a free proxy and a free website (that's not intended to be an API)\nconst RETRY_DELAY = 500; // ms\n\nexport default function getHttpClient(baseUrl) {\n  const client = axios.create({\n    baseURL: baseUrl,\n  });\n\n  axiosRetry(client, {\n    retries: NUM_RETRIES,\n    retryDelay: () => RETRY_DELAY,\n  });\n\n  return client;\n}\n"
  },
  {
    "path": "frontend/src/save-formats/Wii/Wii.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"|\", \">>>\", \"<<\"] }] */\n\n/*\nThe Wii save data format is documented here: https://wiibrew.org/wiki/Savegame_Files\nEncryption keys are from: https://hackmii.com/2008/04/keys-keys-keys/\n\nThe overall file structure looks like:\n- Main header (contains the banner header size)\n- Banner header (contains the icon that shows up in the Wii UI)\n- Backup header (contains the number of files and their sizes)\n- Then a number of files, each of which contains:\n  - File header (contains the file size and decryption info)\n  - File data\n    - This may also contains a header, depending on which console the save is for\n\nSome parts are encrypted and some aren't\n*/\n\nimport MathUtil from '@/util/Math';\nimport CryptoAes from '../../util/crypto-aes';\n\nconst LITTLE_ENDIAN = false;\nconst GAME_TITLE_ENCODING = 'utf-16be';\nconst GAME_ID_ENCODING = 'US-ASCII';\nconst ENCRYPTION_ALGORITHM = 'aes-128-cbc';\nconst SD_KEY = Buffer.from('ab01b9d8e1622b08afbad84dbfc2a55d', 'hex');\nconst SD_INITIALIZATION_VECTOR = Buffer.from('216712e6aa1f689f95c5a22324dc6a98', 'hex');\n\nconst MAIN_HEADER_SIZE = 0x20;\nconst BANNER_MAGIC = 0x5749424E; // 'WIBN' ('Wii banner'?)\nconst BACKUP_HEADER_SIZE = 0x70;\nconst BACKUP_HEADER_PADDING_SIZE = 0x10;\nconst BACKUP_HEADER_MAGIC = 0x426B; // 'Bk'\nconst FILE_HEADER_SIZE = 0x80;\nconst FILE_HEADER_MAGIC = 0x03ADF17E;\n\nconst INCORRECT_FORMAT_ERROR_MESSAGE = 'This does not appear to be a Wii save file';\n\nfunction getString(arrayBuffer, byteOffset, byteLength, textDecoder) {\n  const bytes = new Uint8Array(arrayBuffer.slice(byteOffset, byteOffset + byteLength));\n  return textDecoder.decode(bytes).replace(/\\0/g, ''); // Remove trailing nulls\n}\n\nfunction getNullTerminatedString(arrayBuffer, byteOffset, textDecoder) {\n  const array = new Uint8Array(arrayBuffer.slice(byteOffset));\n  const nullIndex = array.indexOf(0);\n\n  if (nullIndex === -1) {\n    return '';\n  }\n\n  return getString(arrayBuffer, byteOffset, nullIndex, textDecoder);\n}\n\nfunction parseFile(arrayBuffer, currentByte, asciiDecoder) {\n  // Parse the file header\n\n  const fileHeader = arrayBuffer.slice(currentByte, currentByte + FILE_HEADER_SIZE);\n  const fileHeaderDataView = new DataView(fileHeader);\n\n  if (fileHeaderDataView.getUint32(0, LITTLE_ENDIAN) !== FILE_HEADER_MAGIC) {\n    throw new Error(INCORRECT_FORMAT_ERROR_MESSAGE);\n  }\n\n  const size = fileHeaderDataView.getUint32(0x4, LITTLE_ENDIAN);\n  const name = getNullTerminatedString(fileHeader, 0xB, asciiDecoder);\n  const initializationVector = Buffer.from(fileHeader.slice(0x50, 0x60));\n\n  // Use the info from the file header to decrypt the raw save\n\n  const encryptedData = arrayBuffer.slice(currentByte + FILE_HEADER_SIZE, currentByte + FILE_HEADER_SIZE + size);\n  let decryptedData = null;\n\n  try {\n    decryptedData = CryptoAes.decrypt(encryptedData, ENCRYPTION_ALGORITHM, SD_KEY, initializationVector);\n  } catch (e) {\n    throw new Error(INCORRECT_FORMAT_ERROR_MESSAGE, e); // Error trying to decrypt indicates that something is malformed\n  }\n\n  return {\n    size,\n    name,\n    data: decryptedData,\n    containsSaveData: (\n      (name === 'savedata.bin') // Most games have this filename\n      || (name === 'pcengine.bup') // TG-16/PCE games have this filename\n      || name.startsWith('RAM_') // SRAM games on the N64 (Mario Golf, F-Zero) start with 'RAM_' then the game ID\n      || name.startsWith('EEP_')), // All non-SRAM N64 games (EEPROM, Flash RAM) start with 'EEP_' then the game ID\n  };\n}\n\nexport default class WiiSaveData {\n  static createFromWiiData(wiiArrayBuffer) {\n    return new WiiSaveData(wiiArrayBuffer);\n  }\n\n  static createFromEmulatorData(emulatorArrayBuffer) {\n    const wiiArrayBuffer = emulatorArrayBuffer;\n\n    // A bit inefficient to promptly go and decrypt the save data, but this\n    // has the nice benefit of verifying that we put everything in the correct endianness\n    // and got everything in the right spot. Yes I suppose that should be a test instead.\n    return new WiiSaveData(wiiArrayBuffer);\n  }\n\n  // This constructor creates a new object from a binary representation of a Wii save data file\n  constructor(arrayBuffer) {\n    this.arrayBuffer = arrayBuffer;\n\n    // First, decrypt the file\n\n    const encryptedArrayBuffer = arrayBuffer;\n    let decryptedArrayBuffer = null;\n\n    try {\n      decryptedArrayBuffer = CryptoAes.decrypt(arrayBuffer, ENCRYPTION_ALGORITHM, SD_KEY, SD_INITIALIZATION_VECTOR);\n    } catch (e) {\n      throw new Error(INCORRECT_FORMAT_ERROR_MESSAGE, e); // Error trying to decrypt indicates that something is malformed\n    }\n\n    // Parse the main header\n\n    const mainHeader = decryptedArrayBuffer.slice(0, MAIN_HEADER_SIZE);\n    const mainHeaderDataView = new DataView(mainHeader);\n\n    // Parse the banner\n\n    const bannerSize = mainHeaderDataView.getUint32(0x8, LITTLE_ENDIAN);\n    const banner = decryptedArrayBuffer.slice(MAIN_HEADER_SIZE, MAIN_HEADER_SIZE + bannerSize);\n    const bannerDataView = new DataView(banner);\n\n    if (bannerDataView.getUint32(0, LITTLE_ENDIAN) !== BANNER_MAGIC) {\n      throw new Error(INCORRECT_FORMAT_ERROR_MESSAGE);\n    }\n\n    const gameTitleDecoder = new TextDecoder(GAME_TITLE_ENCODING);\n    this.gameTitle = getString(banner, 0x20, 64, gameTitleDecoder);\n    this.gameSubtitle = getString(banner, 0x60, 64, gameTitleDecoder);\n\n    // Parse the backup header\n\n    const backupHeader = encryptedArrayBuffer.slice(MAIN_HEADER_SIZE + bannerSize, MAIN_HEADER_SIZE + bannerSize + BACKUP_HEADER_SIZE);\n    const backupHeaderDataView = new DataView(backupHeader);\n\n    if (backupHeaderDataView.getUint32(0, LITTLE_ENDIAN) !== BACKUP_HEADER_SIZE) {\n      throw new Error(INCORRECT_FORMAT_ERROR_MESSAGE);\n    }\n\n    if (backupHeaderDataView.getUint16(0x4, LITTLE_ENDIAN) !== BACKUP_HEADER_MAGIC) {\n      throw new Error(INCORRECT_FORMAT_ERROR_MESSAGE);\n    }\n\n    const asciiDecoder = new TextDecoder(GAME_ID_ENCODING);\n    this.numberOfFiles = backupHeaderDataView.getUint32(0xC, LITTLE_ENDIAN);\n    this.sizeOfFiles = backupHeaderDataView.getUint32(0x10, LITTLE_ENDIAN);\n    this.totalSize = backupHeaderDataView.getUint32(0x1C, LITTLE_ENDIAN);\n    this.gameId = getString(backupHeader, 0x64, 4, asciiDecoder);\n\n    // Parse the files\n\n    let currentByte = MAIN_HEADER_SIZE + bannerSize + BACKUP_HEADER_SIZE + BACKUP_HEADER_PADDING_SIZE;\n    this.files = [];\n\n    for (let i = 0; i < this.numberOfFiles; i += 1) {\n      const file = parseFile(encryptedArrayBuffer, currentByte, asciiDecoder);\n      this.files.push(file);\n\n      currentByte += (FILE_HEADER_SIZE + MathUtil.roundUpToNearest64Bytes(file.size));\n    }\n  }\n\n  getGameTitle() {\n    return this.gameTitle;\n  }\n\n  getGameSubtitle() {\n    return this.gameSubtitle;\n  }\n\n  getNumberOfFiles() {\n    return this.numberOfFiles;\n  }\n\n  getSizeOfFiles() {\n    return this.sizeOfFiles;\n  }\n\n  getFiles() {\n    return this.files;\n  }\n\n  getTotalSize() {\n    return this.totalSize;\n  }\n\n  getGameId() {\n    return this.gameId;\n  }\n\n  getArrayBuffer() {\n    return this.arrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/store/index.js",
    "content": "import Vue from 'vue';\nimport Vuex from 'vuex';\n\nVue.use(Vuex);\n\nexport default new Vuex.Store({\n  state: {\n  },\n  mutations: {\n  },\n  actions: {\n  },\n  modules: {\n  },\n});\n"
  },
  {
    "path": "frontend/src/util/Array.js",
    "content": "export default class ArrayUtil {\n  static arraysEqual(a1, a2) {\n    if (a1.length !== a2.length) {\n      return false;\n    }\n\n    for (let i = 0; i < a1.length; i += 1) {\n      if (a1[i] !== a2[i]) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  static createSequentialArray(startValue, numValues) {\n    return Array(numValues).fill().map((_, index) => index + startValue);\n  }\n\n  static createReverseSequentialArray(endValue, numValues) {\n    return ArrayUtil.createSequentialArray(endValue - numValues + 1, numValues).reverse();\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/CompressionGzip.js",
    "content": "// Note that we can potentially remove the dependancy on pako by using the Compression Streams API:\n// https://stackoverflow.com/questions/36185110/is-there-a-way-to-use-browsers-native-gzip-decompression-using-javascript\n//\n// But this requires making these functions async\n\nimport pako from 'pako';\n\nimport Util from './util';\n\nexport default class CompressionGzip {\n  static decompress(arrayBuffer) {\n    try {\n      return Util.bufferToArrayBuffer(pako.ungzip(arrayBuffer));\n    } catch (e) {\n      // pako throws a string rather than an error\n      throw new Error(`Could not decompress the data using gzip: ${e}`);\n    }\n  }\n\n  static compress(arrayBuffer) {\n    try {\n      return Util.bufferToArrayBuffer(pako.gzip(arrayBuffer));\n    } catch (e) {\n      // pako throws a string rather than an error\n      throw new Error(`Could not compress the data using gzip: ${e}`);\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/CompressionLzo.js",
    "content": "import lzo from '../../lib/minlzo-js/lzo1x';\nimport Util from './util';\n\nexport default class CompressionLzo {\n  static decompress(arrayBuffer, uncompressedSize) {\n    const state = {\n      inputBuffer: new Uint8Array(arrayBuffer),\n      outputBuffer: null,\n    };\n\n    lzo.setOutputEstimate(uncompressedSize);\n\n    const returnVal = lzo.decompress(state);\n\n    if (returnVal === lzo.OK) {\n      return Util.bufferToArrayBuffer(state.outputBuffer);\n    }\n\n    throw new Error(`Encountered error ${returnVal} when trying to decompress LZO buffer`);\n  }\n\n  static compress(arrayBuffer) {\n    const state = {\n      inputBuffer: new Uint8Array(arrayBuffer),\n      outputBuffer: null,\n    };\n\n    const returnVal = lzo.compress(state);\n\n    if (returnVal === lzo.OK) {\n      return Util.bufferToArrayBuffer(state.outputBuffer);\n    }\n\n    throw new Error(`Encountered error ${returnVal} when trying to compress buffer with LZO`);\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/CompressionRzip.js",
    "content": "import { RzipJS } from 'rzipjs';\n\nimport Util from './util';\n\nexport default class CompressionRzip {\n  static decompress(arrayBuffer) {\n    try {\n      const rzip = new RzipJS(new Uint8Array(arrayBuffer));\n\n      if (!rzip.is_rzip_compressed()) {\n        throw new Error('Data is not compressed with rzip');\n      }\n\n      return Util.bufferToArrayBuffer(rzip.rzip_inflate());\n    } catch (e) {\n      throw new Error('Could not decompress the data using rzip', e);\n    }\n  }\n\n  static compress(arrayBuffer) {\n    try {\n      const rzip = new RzipJS(new Uint8Array(arrayBuffer));\n\n      if (rzip.is_rzip_compressed()) {\n        throw new Error('Data is already compressed using rzip');\n      }\n\n      return Util.bufferToArrayBuffer(rzip.rzip_deflate());\n    } catch (e) {\n      throw new Error('Could not compress the data using rzip', e);\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/CompressionZlib.js",
    "content": "// Note that we can potentially remove the dependancy on pako by using the Compression Streams API:\n// https://stackoverflow.com/questions/36185110/is-there-a-way-to-use-browsers-native-gzip-decompression-using-javascript\n//\n// But this requires making these functions async\n\nimport pako from 'pako';\n\nexport default class CompressionZlib {\n  static decompress(arrayBuffer) {\n    try {\n      return pako.inflate(arrayBuffer);\n    } catch (e) {\n      // pako throws a string rather than an error\n      throw new Error(`Could not decompress the data using zlib: ${e}`);\n    }\n  }\n\n  static compress(arrayBuffer) {\n    try {\n      return pako.deflate(arrayBuffer);\n    } catch (e) {\n      // pako throws a string rather than an error\n      throw new Error(`Could not compress the data using zlib: ${e}`);\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/Endian.js",
    "content": "function swap2ByteWord(inputDataView, outputDataView) {\n  for (let i = 0; i < inputDataView.byteLength / 2; i += 1) {\n    const n = inputDataView.getUint16(i * 2, true); // As long as the endianness values here are different, it doesn't matter which is which\n    outputDataView.setUint16(i * 2, n, false);\n  }\n}\n\nfunction swap4ByteWord(inputDataView, outputDataView) {\n  for (let i = 0; i < inputDataView.byteLength / 4; i += 1) {\n    const n = inputDataView.getUint32(i * 4, true); // As long as the endianness values here are different, it doesn't matter which is which\n    outputDataView.setUint32(i * 4, n, false);\n  }\n}\n\nfunction swap8ByteWord(inputDataView, outputDataView) {\n  for (let i = 0; i < inputDataView.byteLength / 8; i += 1) {\n    const n = inputDataView.getBigUint64(i * 8, true); // As long as the endianness values here are different, it doesn't matter which is which\n    outputDataView.setBigUint64(i * 8, n, false);\n  }\n}\n\nconst SWAP_FUNCTIONS = {\n  2: swap2ByteWord,\n  4: swap4ByteWord,\n  8: swap8ByteWord,\n};\n\nexport default class EndianUtil {\n  static swap(inputArrayBuffer, wordSizeInBytes) {\n    if ((inputArrayBuffer.byteLength % wordSizeInBytes) !== 0) {\n      throw new Error(`File length must be a multiple of ${wordSizeInBytes} bytes`);\n    }\n\n    if (!(wordSizeInBytes in SWAP_FUNCTIONS)) {\n      throw new Error(`Word size must be one of ${Object.keys(SWAP_FUNCTIONS).join(', ')}`);\n    }\n\n    const outputArrayBuffer = new ArrayBuffer(inputArrayBuffer.byteLength);\n    const inputDataView = new DataView(inputArrayBuffer);\n    const outputDataView = new DataView(outputArrayBuffer);\n\n    SWAP_FUNCTIONS[wordSizeInBytes](inputDataView, outputDataView);\n\n    return outputArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/Genesis.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport PaddingUtil from './Padding';\n\nconst LITTLE_ENDIAN = false;\n\n// Genesis raw files can come in various flavours.\n//\n// SRAM/FRAM saves:\n//\n// The general idea is that each 8 bit byte is \"expanded\" out to be 16 bits (because the Genesis reads over a 16 bit bus I guess).\n// However, there are several ways of doing this, each of which is \"correct\":\n//\n// - Alternate 0x00 bytes: \"HELLO\" -> \" H E L L O\" (emulators and Mega Everdrive do this)\n// - Alternate 0xFF bytes: \"HELLO\" -> \" H E L L O\" (Mega SD does this)\n// - Repeat each byte:     \"HELLO\" -> \"HHEELLLLOO\" (the Retrode cart reader does this)\n//\n// EEPROM saves:\n//\n// Here, it's just the straight data with no byte expanding.\n//\n// My working theory on identifying EEPROM saves vs a non-byte-expanded SRAM save is that EEPROM saves\n// seem to be smaller.\n\nconst SMALLEST_SRAM_SAVE = 512; // Final Fantasy Legend on Gameboy is 512B and is SRAM, but I'm not aware of any Genesis SRAM games that small\n\nexport default class GenesisUtil {\n  static FILL_BYTE_REPEAT = 'repeat';\n\n  static isEepromSave(inputArrayBuffer) {\n    // Hacky check for EEPROM saves that shouldn't be byte expanded\n    // Wonder Boy in Monster World's save is 128 bytes. 512 bytes is the smallest SRAM save I've seen (Final Fantasy Legend on Gameboy)\n    // This hack may well not work on other Genesis EEPROM games: I have no idea how big their saves are, and looking at the list\n    // here https://github.com/euan-forrester/save-file-converter/blob/main/frontend/src/save-formats/Wii/ConvertFromSega.js\n    // there are lots of sports games that may need a bunch of space.\n    return (inputArrayBuffer.byteLength < SMALLEST_SRAM_SAVE);\n  }\n\n  // This will return true for a file that is empty: all 0x00 or all 0xFF\n  // Consider using the function below to check for this case\n  static isByteExpanded(inputArrayBuffer) {\n    const inputDataView = new DataView(inputArrayBuffer);\n\n    for (let i = 0; i < (inputArrayBuffer.byteLength / 2); i += 1) {\n      const highByte = inputDataView.getUint8(i * 2);\n      const lowByte = inputDataView.getUint8((i * 2) + 1);\n\n      if ((highByte !== lowByte) && (highByte !== 0x00) && (highByte !== 0xFF)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  static isEmpty(inputArrayBuffer) {\n    const inputDataView = new DataView(inputArrayBuffer);\n\n    for (let i = 0; i < inputArrayBuffer.byteLength; i += 1) {\n      const byte = inputDataView.getUint8(i);\n\n      if ((byte !== 0x00) && (byte !== 0xFF)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  // fillByte can either be the value you want put into upper byte of each word,\n  // or it can be 'repeat'\n  static byteExpand(inputArrayBuffer, fillByte) {\n    const outputArrayBuffer = new ArrayBuffer(inputArrayBuffer.byteLength * 2);\n\n    const inputDataView = new DataView(inputArrayBuffer);\n    const outputDataView = new DataView(outputArrayBuffer);\n\n    const repeatByte = (fillByte === GenesisUtil.FILL_BYTE_REPEAT);\n\n    for (let i = 0; i < inputDataView.byteLength; i += 1) {\n      const inputByte = inputDataView.getUint8(i);\n      const highByte = repeatByte ? inputByte : fillByte;\n\n      const outputWord = ((highByte & 0xFF) << 8) | inputByte;\n\n      outputDataView.setUint16(i * 2, outputWord, LITTLE_ENDIAN);\n    }\n\n    return outputArrayBuffer;\n  }\n\n  static byteCollapse(inputArrayBuffer) {\n    const outputArrayBuffer = new ArrayBuffer(inputArrayBuffer.byteLength / 2);\n\n    const inputDataView = new DataView(inputArrayBuffer);\n    const outputDataView = new DataView(outputArrayBuffer);\n\n    for (let i = 0; i < (inputArrayBuffer.byteLength / 2); i += 1) {\n      const currByte = inputDataView.getUint8((i * 2) + 1);\n\n      outputDataView.setUint8(i, currByte);\n    }\n\n    return outputArrayBuffer;\n  }\n\n  static changeFillByte(inputArrayBuffer, fillByte) {\n    if (GenesisUtil.isEepromSave(inputArrayBuffer)) {\n      return inputArrayBuffer;\n    }\n\n    const padding = PaddingUtil.getPadFromEndValueAndCount(inputArrayBuffer);\n\n    const needToChangePadding = (fillByte !== GenesisUtil.FILL_BYTE_REPEAT) && (padding.value !== fillByte); // Check if padding was 0xFF and we're trying to fill with 0x00, or vice versa\n\n    const unpaddedInputArrayBuffer = PaddingUtil.removePaddingFromEnd(inputArrayBuffer, padding.count);\n\n    let byteCollapsedArrayBuffer = unpaddedInputArrayBuffer;\n\n    if (GenesisUtil.isByteExpanded(unpaddedInputArrayBuffer)) {\n      byteCollapsedArrayBuffer = GenesisUtil.byteCollapse(unpaddedInputArrayBuffer);\n    }\n\n    let outputArrayBuffer = GenesisUtil.byteExpand(byteCollapsedArrayBuffer, fillByte);\n\n    if (needToChangePadding) {\n      outputArrayBuffer = PaddingUtil.addPaddingToEnd(outputArrayBuffer, { value: fillByte, count: padding.count });\n    } else {\n      outputArrayBuffer = PaddingUtil.addPaddingToEnd(outputArrayBuffer, { value: padding.value, count: padding.count }); // Put the padding back\n    }\n\n    return outputArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/Hash.js",
    "content": "import createHash from 'create-hash';\n\nimport Util from './util';\n\nexport default class HashUtil {\n  static getEncodedHash(arrayBuffer, hashAlgorithm, hashEncoding) {\n    const hash = createHash(hashAlgorithm);\n    hash.update(Buffer.from(arrayBuffer));\n    const hashOutput = hash.digest();\n\n    const hashString = Buffer.from(hashOutput).toString('hex').toLowerCase();\n\n    const textEncoder = new TextEncoder(hashEncoding);\n\n    return Util.bufferToArrayBuffer(textEncoder.encode(hashString));\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/Math.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"&\", \">>=\", \"<<\", \">>\", \">>>\"] }] */\n\nfunction countNumberOfBitsUsed(n) {\n  // Keep removing bits until we're left with 0\n  let count = 0;\n  let x = n;\n\n  while (x !== 0) {\n    x >>= 1;\n    count += 1;\n  }\n\n  return count;\n}\n\nexport default class MathUtil {\n  static getNextLargestPowerOf2(n) {\n    // Input values shouldn't be negative\n    if (n <= 0) {\n      return 0;\n    }\n\n    if (MathUtil.isPowerOf2(n)) {\n      return n;\n    }\n\n    return 1 << countNumberOfBitsUsed(n);\n  }\n\n  static getNextSmallestPowerOf2(n) {\n    // Input values shouldn't be negative\n    if (n <= 0) {\n      return 0;\n    }\n\n    if (MathUtil.isPowerOf2(n)) {\n      return n;\n    }\n\n    return 1 << (countNumberOfBitsUsed(n) - 1);\n  }\n\n  static isPowerOf2(n) {\n    if (n <= 0) {\n      return false;\n    }\n\n    return ((n & (n - 1)) === 0);\n  }\n\n  static getNextMultipleOf16(n) {\n    // Input values shouldn't be negative\n    if (n <= 0) {\n      return 0;\n    }\n\n    return ((n + 0xF) >>> 4) << 4;\n  }\n\n  static roundUpToNearest64Bytes(num) {\n    if (num < 0) {\n      return 0;\n    }\n\n    return (((num + 0x3F) >>> 6) << 6);\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/N64.js",
    "content": "import EndianUtil from './Endian';\n\n// EEPROM saves do not need to be endian swapped, but SRAM and Flash RAM saves do\n\n// From http://micro-64.com/database/gamesave.shtml\nconst EEPROM_SIZES = [512, 2 * 1024];\nconst SRAM_SIZES = [32 * 1024];\nconst FLASH_RAM_SIZES = [128 * 1024];\n\nconst N64_WORD_LENGTH = 4; // 32 bits, not 64\n\nexport default class N64Util {\n  static needsEndianSwap(arrayBuffer) {\n    return !N64Util.isEepromSave(arrayBuffer);\n  }\n\n  static isEepromSave(arrayBuffer) {\n    return (EEPROM_SIZES.indexOf(arrayBuffer.byteLength) >= 0);\n  }\n\n  static isSramSave(arrayBuffer) {\n    return (SRAM_SIZES.indexOf(arrayBuffer.byteLength) >= 0);\n  }\n\n  static isFlashRamSave(arrayBuffer) {\n    return (FLASH_RAM_SIZES.indexOf(arrayBuffer.byteLength) >= 0);\n  }\n\n  static getFileExtension(arrayBuffer) {\n    if (N64Util.isEepromSave(arrayBuffer)) {\n      return 'eep';\n    }\n\n    if (N64Util.isSramSave(arrayBuffer)) {\n      return 'sra';\n    }\n\n    if (N64Util.isFlashRamSave(arrayBuffer)) {\n      return 'fla';\n    }\n\n    throw new Error(`Unrecognized N64 file size: ${arrayBuffer.byteLength} bytes`);\n  }\n\n  static endianSwap(inputArrayBuffer) {\n    if ((inputArrayBuffer.byteLength % N64_WORD_LENGTH) !== 0) {\n      throw new Error(`N64 file size must be a multiple of ${N64_WORD_LENGTH} bytes`);\n    }\n\n    return EndianUtil.swap(inputArrayBuffer, N64_WORD_LENGTH);\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/Padding.js",
    "content": "/* eslint no-bitwise: [\"error\", { \"allow\": [\"&\", \">>=\", \"<<\"] }] */\n\nimport MathUtil from './Math';\n\nfunction fixCountSoSaveSizeIsPowerOf2(arrayBuffer, count) {\n  // Most raw save files (for cartridges anyway) have sizes that are a power of 2,\n  // because it's stored on a chip of one type or another and that's how they're manufactured.\n  //\n  // So, if we see apparent padding that seems to take our size below a power of 2 it's probable that\n  // some of that \"padding\" was legit data so we don't want to trim it.\n\n  const apparentRemainingSize = arrayBuffer.byteLength - count;\n  const realRemainingSize = MathUtil.getNextLargestPowerOf2(apparentRemainingSize);\n\n  return count - (realRemainingSize - apparentRemainingSize);\n}\n\nexport default class PaddingUtil {\n  static attemptFix(testSaveArrayBuffer, brokenSaveArrayBuffer) {\n    // First, temporarily remove any padding from the start of the 2 saves\n\n    const testSavePadding = PaddingUtil.getPadFromStartValueAndCount(testSaveArrayBuffer);\n    const brokenSavePadding = PaddingUtil.getPadFromStartValueAndCount(brokenSaveArrayBuffer);\n\n    const testSaveNoPaddingAtStart = PaddingUtil.removePaddingFromStart(testSaveArrayBuffer, testSavePadding.count);\n    const brokenSaveNoPaddingAtStart = PaddingUtil.removePaddingFromStart(brokenSaveArrayBuffer, brokenSavePadding.count);\n\n    // Now make the remainder of the broken save be the same length as the remainder of the good save\n\n    let brokenSaveNoPaddingAtStartCorrectLength = brokenSaveNoPaddingAtStart;\n\n    if (brokenSaveNoPaddingAtStart.byteLength < testSaveNoPaddingAtStart.byteLength) {\n      const endPadding = {\n        value: 0x00,\n        count: testSaveNoPaddingAtStart.byteLength - brokenSaveNoPaddingAtStart.byteLength,\n      };\n\n      brokenSaveNoPaddingAtStartCorrectLength = PaddingUtil.addPaddingToEnd(brokenSaveNoPaddingAtStart, endPadding);\n    } else if (brokenSaveNoPaddingAtStart.byteLength > testSaveNoPaddingAtStart.byteLength) {\n      brokenSaveNoPaddingAtStartCorrectLength = PaddingUtil.removePaddingFromEnd(brokenSaveNoPaddingAtStart, brokenSaveNoPaddingAtStart.byteLength - testSaveNoPaddingAtStart.byteLength);\n    }\n\n    // Now add back any padding to the start that was present in the good save\n\n    const brokenSaveFixed = PaddingUtil.addPaddingToStart(brokenSaveNoPaddingAtStartCorrectLength, testSavePadding);\n\n    return brokenSaveFixed;\n  }\n\n  static fileSizeAndPaddingFromStartIsSame(arrayBuffer1, arrayBuffer2) {\n    if (arrayBuffer1.byteLength !== arrayBuffer2.byteLength) {\n      return false;\n    }\n\n    const padding1 = PaddingUtil.getPadFromStartValueAndCount(arrayBuffer1);\n    const padding2 = PaddingUtil.getPadFromStartValueAndCount(arrayBuffer2);\n\n    if ((padding1.count !== padding2.count) || (padding1.value !== padding2.value)) {\n      return false;\n    }\n\n    return true;\n  }\n\n  static getPadFromStartValueAndCount(arrayBuffer) {\n    const pad00Count = PaddingUtil.countPaddingFromStart(arrayBuffer, 0x00);\n    const padFFCount = PaddingUtil.countPaddingFromStart(arrayBuffer, 0xFF);\n\n    let value = 0x00;\n    let count = pad00Count;\n\n    if (padFFCount > 0) {\n      value = 0xFF;\n      count = padFFCount;\n    }\n\n    count = fixCountSoSaveSizeIsPowerOf2(arrayBuffer, count);\n\n    return {\n      value,\n      count,\n    };\n  }\n\n  static getPadFromEndValueAndCount(arrayBuffer) {\n    const pad00Count = PaddingUtil.countPaddingFromEnd(arrayBuffer, 0x00);\n    const padFFCount = PaddingUtil.countPaddingFromEnd(arrayBuffer, 0xFF);\n\n    let value = 0x00;\n    let count = pad00Count;\n\n    if (padFFCount > 0) {\n      value = 0xFF;\n      count = padFFCount;\n    }\n\n    count = fixCountSoSaveSizeIsPowerOf2(arrayBuffer, count);\n\n    return {\n      value,\n      count,\n    };\n  }\n\n  static removePaddingFromStart(arrayBuffer, paddingCount) {\n    return arrayBuffer.slice(paddingCount);\n  }\n\n  static removePaddingFromEnd(arrayBuffer, paddingCount) {\n    return arrayBuffer.slice(0, arrayBuffer.byteLength - paddingCount);\n  }\n\n  static addPaddingToStart(arrayBuffer, padding) {\n    const newArrayBuffer = new ArrayBuffer(arrayBuffer.byteLength + padding.count);\n    const newUint8Array = new Uint8Array(newArrayBuffer);\n    const oldUint8Array = new Uint8Array(arrayBuffer);\n\n    for (let i = 0; i < padding.count; i += 1) {\n      newUint8Array[i] = padding.value;\n    }\n\n    newUint8Array.set(oldUint8Array, padding.count);\n\n    return newArrayBuffer;\n  }\n\n  static addPaddingToEnd(arrayBuffer, padding) {\n    const newArrayBuffer = new ArrayBuffer(arrayBuffer.byteLength + padding.count);\n    const newUint8Array = new Uint8Array(newArrayBuffer);\n    const oldUint8Array = new Uint8Array(arrayBuffer);\n\n    newUint8Array.set(oldUint8Array, 0);\n\n    for (let i = 0; i < padding.count; i += 1) {\n      newUint8Array[arrayBuffer.byteLength + i] = padding.value;\n    }\n\n    return newArrayBuffer;\n  }\n\n  static padAtEndToMinimumSize(arrayBuffer, paddingValue, minimumPaddingCount) {\n    return PaddingUtil.addPaddingToEnd(arrayBuffer, { value: paddingValue, count: Math.max(minimumPaddingCount - arrayBuffer.byteLength, 0) });\n  }\n\n  static countPaddingFromStart(arrayBuffer, padValue) {\n    const uint8Array = new Uint8Array(arrayBuffer);\n    let count = 0;\n\n    for (let i = 0; i < uint8Array.length; i += 1) {\n      if (uint8Array[i] !== padValue) {\n        break;\n      }\n      count += 1;\n    }\n\n    // If everything looks like padding, then nothing is. This can happen, for example,\n    // when a user quickly creates a test save file without actually saving in-game. Not\n    // much we can do in that case other than to assume the whole thing is the correct size.\n    // Should flag the user that they need to provide a better file.\n    if (count === arrayBuffer.byteLength) {\n      count = 0;\n    }\n\n    return count;\n  }\n\n  static countPaddingFromEnd(arrayBuffer, padValue) {\n    const uint8Array = new Uint8Array(arrayBuffer);\n    let count = 0;\n\n    for (let i = uint8Array.length - 1; i >= 0; i -= 1) {\n      if (uint8Array[i] !== padValue) {\n        break;\n      }\n      count += 1;\n    }\n\n    // If everything looks like padding, then nothing is. This can happen, for example,\n    // when a user quickly creates a test save file without actually saving in-game. Not\n    // much we can do in that case other than to assume the whole thing is the correct size.\n    // Should flag the user that they need to provide a better file.\n    if (count === arrayBuffer.byteLength) {\n      count = 0;\n    }\n\n    return count;\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/PcEngine.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport Util from './util';\n\nconst BRAM_SIZE = 2048;\n\nconst MAGIC = 'HUBM'; // Marker at the beginning that signifies correctly-formatted BRAM\nconst MAGIC_ENCODING = 'US-ASCII';\nconst MAGIC_OFFSET = 0;\n\nexport default class PcEngineUtil {\n  static verifyPcEngineData(arrayBuffer) {\n    if (arrayBuffer.byteLength !== BRAM_SIZE) {\n      throw new Error(`File is the incorrect size: expected ${BRAM_SIZE} bytes but found ${arrayBuffer.byteLength} bytes`);\n    }\n\n    return Util.checkMagic(arrayBuffer, MAGIC_OFFSET, MAGIC, MAGIC_ENCODING);\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/SaveFiles.js",
    "content": "export default class SaveFilesUtil {\n  static resizeRawSave(arrayBuffer, newSize, fillValue = 0) {\n    let newArrayBuffer = arrayBuffer;\n\n    if (newSize < arrayBuffer.byteLength) {\n      newArrayBuffer = arrayBuffer.slice(0, newSize);\n    } else if (newSize > arrayBuffer.byteLength) {\n      newArrayBuffer = new ArrayBuffer(newSize);\n\n      const newArray = new Uint8Array(newArrayBuffer);\n      const oldArray = new Uint8Array(arrayBuffer);\n\n      newArray.fill(fillValue);\n      newArray.set(oldArray, 0);\n    }\n\n    return newArrayBuffer;\n  }\n\n  static getEraseCartridgeSave(arrayBuffer) {\n    // Just a new ArrayBuffer that's the same size as the known-working save, just filled with zeros\n\n    const newArrayBuffer = new ArrayBuffer(arrayBuffer.byteLength);\n    const newArray = new Uint8Array(newArrayBuffer);\n\n    newArray.fill(0); // Redundant but let's be explicit\n\n    return newArrayBuffer;\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/SegaCd.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport PlatformSaveSizes from '../save-formats/PlatformSaveSizes';\nimport Util from './util';\n\n// Thanks to ekeeke on github for their help understanding this!\n// https://github.com/ekeeke/Genesis-Plus-GX/issues/449\n\nconst LITTLE_ENDIAN = false;\n\n// This signature appears at the end of every BRAM file\n// From https://github.com/ekeeke/Genesis-Plus-GX/blob/master/sdl/sdl1/main.c#L37\n// and https://github.com/superctr/buram/blob/master/buram.c#L702\nconst BRAM_FORMAT = [\n  0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x40, // Volume name: \"___________\", followed by 5 unknown bytes (maybe block size?): https://github.com/superctr/buram/blob/master/buram.c#L707\n  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // First 8: num free blocks, second 8: num files\n  0x53, 0x45, 0x47, 0x41, 0x5f, 0x43, 0x44, 0x5f, 0x52, 0x4f, 0x4d, 0x00, 0x01, 0x00, 0x00, 0x00, // \"SEGA_CD_ROM\"\n  0x52, 0x41, 0x4d, 0x5f, 0x43, 0x41, 0x52, 0x54, 0x52, 0x49, 0x44, 0x47, 0x45, 0x5f, 0x5f, 0x5f, // \"RAM_CARTRIDGE___\"\n];\n\nconst BRAM_FORMAT_FIXED_OFFSET = 0x20; // The offset within BRAM_FORMAT where the values don't change even when the file size is different\n\nconst DIRECTORY_REPEAT_COUNT = 4;\nconst DIRECTORY_NUM_FREE_BLOCKS_OFFSET = 0x10;\nconst DIRECTORY_NUM_FILES_OFFSET = 0x18;\n\nconst BLOCK_SIZE = 0x40;\nconst NUM_RESERVED_BLOCKS = 2; // The first block is reserved, the last block contains the BRAM_FORMAT\nconst NUM_INITIAL_RESERVED_BLOCKS = NUM_RESERVED_BLOCKS + 1; // and there's one more reserved when the file is created for save room for the directory entry for the eventual first file. This happens whenever the number of save files is even: https://github.com/superctr/buram/blob/master/buram.c#L713\n\nconst DIRECTORY_SIZE = 0x40; // A block\nconst DIRECTORY_ENTRY_SIZE = 0x20; // Half a block\n\n// Taken from https://github.com/superctr/buram/blob/master/buram.c#L470\nfunction readRepeatCode(arrayBuffer, offsetFromDirectory) {\n  const startOffset = arrayBuffer.byteLength - DIRECTORY_SIZE + offsetFromDirectory;\n  const dataView = new DataView(arrayBuffer);\n  const codesFound = new Uint16Array(DIRECTORY_REPEAT_COUNT);\n\n  let currentOffset = startOffset;\n\n  for (let i = 0; i < DIRECTORY_REPEAT_COUNT; i += 1) {\n    codesFound[i] = dataView.getUint16(currentOffset, LITTLE_ENDIAN);\n    currentOffset += 2;\n  }\n\n  for (let i = 0; i < (DIRECTORY_REPEAT_COUNT / 2); i += 1) {\n    let repeats = 0;\n\n    for (let j = i + 1; j < DIRECTORY_REPEAT_COUNT; j += 1) {\n      if (codesFound[i] === codesFound[j]) {\n        repeats += 1;\n      }\n    }\n\n    if (repeats > (DIRECTORY_REPEAT_COUNT / 2)) {\n      return codesFound[i];\n    }\n  }\n\n  throw new Error(`Unable to find repeat code at offset from directory 0x${offsetFromDirectory.toString(16)}`);\n}\n\n// Taken from https://github.com/superctr/buram/blob/master/buram.c#L498\nfunction writeRepeatCode(arrayBuffer, offsetFromDirectory, value) {\n  const startOffset = arrayBuffer.byteLength - DIRECTORY_SIZE + offsetFromDirectory;\n  const dataView = new DataView(arrayBuffer);\n\n  let currentOffset = startOffset;\n\n  for (let i = 0; i < DIRECTORY_REPEAT_COUNT; i += 1) {\n    dataView.setUint16(currentOffset, value, LITTLE_ENDIAN);\n    currentOffset += 2;\n  }\n}\n\nexport default class SegaCdUtil {\n  static INTERNAL_SAVE_SIZE = 8192; // Regardless of platform (mister/flash cart/emulator/etc the internal save size is always the same: it was 8kB in the original hardware. Although only one size of RAM cart was manufactured, many sizes are theoretically possible and so different platforms choose different ones)\n\n  static getActualSize(inputArrayBuffer) {\n    // We can have files that are padded out at the end, despite having the signature earlier in the file. Such a file\n    // can only store data up until its signature, making that its 'true' size.\n    //\n    // So, try to find the second half of BRAM_FORMAT (which doesn't change) where the end would be for each possible save size\n    const inputUint8Array = new Uint8Array(inputArrayBuffer);\n\n    const sizeIndex = PlatformSaveSizes.segacd.findIndex(\n      (size) => BRAM_FORMAT.slice(BRAM_FORMAT_FIXED_OFFSET).every(\n        (byte, index) => (byte === inputUint8Array[size - BRAM_FORMAT_FIXED_OFFSET + index]),\n      ),\n    );\n\n    if (sizeIndex === -1) {\n      throw new Error('This does not appear to be a Sega CD save file');\n    }\n\n    return PlatformSaveSizes.segacd[sizeIndex];\n  }\n\n  static isCorrectlyFormatted(inputArrayBuffer) {\n    try {\n      SegaCdUtil.getActualSize(inputArrayBuffer);\n    } catch (e) {\n      return false;\n    }\n\n    return true;\n  }\n\n  static truncateToActualSize(inputArrayBuffer) {\n    return inputArrayBuffer.slice(0, SegaCdUtil.getActualSize(inputArrayBuffer));\n  }\n\n  static makeEmptySave(size) {\n    // An empty save buffer is all 0's with the BRAM_FORMAT at the end and the file size correctly encoded:\n    // https://github.com/ekeeke/Genesis-Plus-GX/issues/449\n    // https://github.com/superctr/buram/blob/master/buram.c#L702\n    const initialData = Util.getFilledArrayBuffer(size - BRAM_FORMAT.length, 0x00);\n    const bramFormat = new ArrayBuffer(BRAM_FORMAT.length);\n    const bramFormatUint8Array = new Uint8Array(bramFormat);\n\n    BRAM_FORMAT.forEach((byte, index) => { bramFormatUint8Array[index] = byte; });\n\n    const totalFreeBlocks = (size / BLOCK_SIZE) - NUM_INITIAL_RESERVED_BLOCKS;\n\n    SegaCdUtil.setNumFreeBlocks(bramFormat, totalFreeBlocks);\n\n    return Util.concatArrayBuffers([initialData, bramFormat]);\n  }\n\n  static getNumFiles(inputArrayBuffer) {\n    return readRepeatCode(inputArrayBuffer, DIRECTORY_NUM_FILES_OFFSET);\n  }\n\n  static getNumFreeBlocks(inputArrayBuffer) {\n    return readRepeatCode(inputArrayBuffer, DIRECTORY_NUM_FREE_BLOCKS_OFFSET);\n  }\n\n  static setNumFiles(inputArrayBuffer, value) {\n    writeRepeatCode(inputArrayBuffer, DIRECTORY_NUM_FILES_OFFSET, value);\n  }\n\n  static setNumFreeBlocks(inputArrayBuffer, value) {\n    writeRepeatCode(inputArrayBuffer, DIRECTORY_NUM_FREE_BLOCKS_OFFSET, value);\n  }\n\n  static getTotalAvailableBlocks(inputArrayBuffer) {\n    return Math.ceil(inputArrayBuffer.byteLength / BLOCK_SIZE) - NUM_RESERVED_BLOCKS;\n  }\n\n  static resize(inputArrayBuffer, newSize) {\n    if (PlatformSaveSizes.segacd.indexOf(newSize) === -1) {\n      throw new Error(`${newSize} bytes is not a valid size for a Sega CD save`);\n    }\n\n    const inputArrayBufferActualSize = SegaCdUtil.truncateToActualSize(inputArrayBuffer);\n\n    if (newSize === inputArrayBufferActualSize.byteLength) {\n      return inputArrayBufferActualSize;\n    }\n\n    // We need to change the size\n\n    // Begin by finding out how many saves are in the file. This determines the length of the footer info\n    // at the end of the file\n\n    const numFiles = SegaCdUtil.getNumFiles(inputArrayBufferActualSize);\n    const numApparentDirectoryEntries = ((numFiles % 2) === 1) ? (numFiles + 1) : numFiles; // Our directory entries get interleaved in pairs, so if there's an odd number it will still take an entire block to encode\n\n    const footerLength = numApparentDirectoryEntries * DIRECTORY_ENTRY_SIZE;\n\n    // Next divide up the file into its components\n\n    const bramFormatOffset = inputArrayBufferActualSize.byteLength - BRAM_FORMAT.length;\n    const footerOffset = bramFormatOffset - footerLength;\n    const initialData = inputArrayBufferActualSize.slice(0, footerOffset);\n    const footerData = inputArrayBufferActualSize.slice(footerOffset, footerOffset + footerLength);\n    const bramFormat = inputArrayBufferActualSize.slice(bramFormatOffset);\n\n    // Set the new number of free blocks. Note that we could calculate this by parsing the entire file and\n    // adding up all the save sizes within it. But we'll just trust that the previous number was correct.\n    const previousFreeBlocks = SegaCdUtil.getNumFreeBlocks(inputArrayBufferActualSize);\n    const sizeDifferenceBlocks = (newSize - inputArrayBufferActualSize.byteLength) / BLOCK_SIZE; // Positive or negative\n    const newFreeBlocks = previousFreeBlocks + sizeDifferenceBlocks;\n\n    if (newFreeBlocks < 0) {\n      const prevTotalBlocks = inputArrayBufferActualSize.byteLength / BLOCK_SIZE;\n      const newTotalBlocks = newSize / BLOCK_SIZE;\n      throw new Error(`Insufficient free blocks in file to change size from ${prevTotalBlocks} to ${newTotalBlocks} blocks. Previous free blocks: ${previousFreeBlocks}`);\n    }\n\n    SegaCdUtil.setNumFreeBlocks(bramFormat, newFreeBlocks);\n\n    if (newSize > inputArrayBufferActualSize.byteLength) {\n      // Make the file bigger by splicing in a blank block just before the footer and BRAM_FORMAT\n      const blankArrayBuffer = Util.getFilledArrayBuffer(newSize - inputArrayBufferActualSize.byteLength, 0x00);\n\n      return Util.concatArrayBuffers([initialData, blankArrayBuffer, footerData, bramFormat]);\n    }\n\n    // Make the file smaller by removing the last portion of initialData\n\n    const numBytesToRemove = inputArrayBufferActualSize.byteLength - newSize;\n    const initialDataSmallerLength = initialData.byteLength - numBytesToRemove;\n\n    const initialDataSmaller = initialData.slice(0, initialDataSmallerLength);\n\n    // Throw an error if the removed portion contains any data\n\n    const dataRemoved = initialData.slice(initialDataSmallerLength);\n    const dataRemovedUint8Array = new Uint8Array(dataRemoved); // Could use a bigger data type to require less iterations, but then need to check if the length here is a multiple of that datatype\n    dataRemovedUint8Array.forEach((byte) => {\n      if ((byte !== 0x00) && (byte !== 0xFF)) throw new Error(`Cannot resize file down to ${newSize} bytes because it would remove a portion that contains game data`);\n    });\n\n    // All good, so put the file back together\n\n    return Util.concatArrayBuffers([initialDataSmaller, footerData, bramFormat]);\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/crypto-aes.js",
    "content": "// Put our crypto utils in a separate file because the 'crypto' package is quite big and we don't want\n// to have to include it every time we need a small function from our Util class\n\n// Also, rather than importing the node crypto module, which is huge, we're going to use\n// just a portion of it as implemented in https://github.com/crypto-browserify/browserify-aes\n\nimport browserifyAes from 'browserify-aes';\nimport Util from './util';\n\nexport default class CryptoAes {\n  static decrypt(encryptedArrayBuffer, algorithm, key, initializationVector) {\n    const decipher = browserifyAes.createDecipheriv(algorithm, key, initializationVector);\n    decipher.setAutoPadding(false); // Different platforms have different default padding: https://github.com/nodejs/node/issues/2794#issuecomment-139436581\n\n    const encryptedBuffer = Buffer.from(encryptedArrayBuffer);\n    const decryptedBuffer = Buffer.concat([decipher.update(encryptedBuffer), decipher.final()]);\n\n    return Util.bufferToArrayBuffer(decryptedBuffer);\n  }\n\n  static encrypt(decryptedArrayBuffer, algorithm, key, initializationVector) {\n    const cipher = browserifyAes.createCipheriv(algorithm, key, initializationVector);\n    cipher.setAutoPadding(false); // See note above. When encrypting for the Wii, for example, we don't want to add Node's PKCS padding\n\n    const decryptedBuffer = Buffer.from(decryptedArrayBuffer);\n    const encryptedBuffer = Buffer.concat([cipher.update(decryptedBuffer), cipher.final()]);\n\n    return Util.bufferToArrayBuffer(encryptedBuffer);\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/crypto-des.js",
    "content": "// Put our crypto utils in a separate file because the 'crypto' package is quite big and we don't want\n// to have to include it every time we need a small function from our Util class\n\n// Also, rather than importing the node crypto module, which is huge, we're going to use\n// just a portion of it as implemented in https://github.com/crypto-browserify/browserify-des\n\nimport DES from 'browserify-des';\nimport Util from './util';\n\nexport default class CryptoDes {\n  static decrypt(encryptedArrayBuffer, algorithm, key, initializationVector) {\n    const decipher = new DES({\n      mode: algorithm,\n      key,\n      iv: initializationVector,\n      decrypt: true,\n    });\n\n    const encryptedBuffer = Buffer.from(encryptedArrayBuffer);\n    const decryptedBuffer = Buffer.concat([decipher.update(encryptedBuffer), decipher.final()]);\n\n    return Util.bufferToArrayBuffer(decryptedBuffer);\n  }\n\n  static encrypt(decryptedArrayBuffer, algorithm, key, initializationVector) {\n    const cipher = new DES({\n      mode: algorithm,\n      key,\n      iv: initializationVector,\n      decrypt: false,\n    });\n\n    const decryptedBuffer = Buffer.from(decryptedArrayBuffer);\n    const encryptedBuffer = Buffer.concat([cipher.update(decryptedBuffer), cipher.final()]);\n\n    return Util.bufferToArrayBuffer(encryptedBuffer);\n  }\n}\n"
  },
  {
    "path": "frontend/src/util/util.js",
    "content": "import path from 'path';\nimport Encoding from 'encoding-japanese'; // Should we consider splitting this out? Almost every page depends on this file, but very few need japanese encodings\n\n// Comment to trigger build\n\nexport default class Util {\n  static clampValue(value, min, max) {\n    return Math.min(Math.max(value, min), max);\n  }\n\n  static changeFilenameExtension(filename, newExtension) {\n    return `${path.basename(filename, path.extname(filename))}.${newExtension}`;\n  }\n\n  static removeFilenameExtension(filename) {\n    return `${path.basename(filename, path.extname(filename))}`;\n  }\n\n  static getFilename(filename) {\n    return path.basename(filename);\n  }\n\n  static getExtension(filename) {\n    return path.extname(filename);\n  }\n\n  static appendToFilename(filename, stringToAppend) {\n    return `${Util.removeFilenameExtension(filename)}${stringToAppend}${path.extname(filename)}`;\n  }\n\n  static convertDescriptionToFilename(description) {\n    // First, remove everything but A-Z, a-z, 0-9, dash, underscore, space\n    // Then check how many A-Z, a-z, 0-9 there are. If > 0 then done, if 0 then return 'output'\n    // This is to prevent a filename of just being a single space, or a dash, etc, if the\n    // original description is all japanese characters plus a space, for example\n\n    const descriptionStripped = description.replace(/[^0-9a-z_\\- ]/gi, '');\n    const descriptionStrippedAlphanumeric = descriptionStripped.replace(/[^0-9a-z]/gi, '');\n\n    if (descriptionStrippedAlphanumeric.length > 0) {\n      return descriptionStripped;\n    }\n\n    return 'output';\n  }\n\n  static bufferToArrayBuffer(b) {\n    return b.buffer.slice(b.byteOffset, b.byteOffset + b.byteLength); // https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer/31394257#31394257\n  }\n\n  static concatArrayBuffers(arrayBufferList) {\n    const bufferList = arrayBufferList.map((ab) => Buffer.from(ab));\n\n    return Util.bufferToArrayBuffer(Buffer.concat(bufferList));\n  }\n\n  static setString(arrayBuffer, offset, string, stringEncoding, maxLengthWhenEncoded) {\n    let stringArrayBuffer = null;\n\n    if (stringEncoding === 'shift-jis') {\n      const unicodeArray = Encoding.stringToCode(string);\n\n      stringArrayBuffer = Util.bufferToArrayBuffer(new Uint8Array(Encoding.convert(unicodeArray, { to: 'SJIS', from: 'UNICODE' })));\n    } else {\n      // TextEncoder can actually only encode to UTF8. US-ASCII is a subset of that, so\n      // this happens to work when we specify US-ASCII. TextDecoder is able to decode a wide variety of formats\n      const textEncoder = new TextEncoder(stringEncoding);\n\n      stringArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(string));\n    }\n\n    return Util.setArrayBufferPortion(arrayBuffer, stringArrayBuffer, offset, 0, Math.min(stringArrayBuffer.byteLength, maxLengthWhenEncoded));\n  }\n\n  static setMagic(arrayBuffer, offset, magic, magicEncoding) {\n    return Util.setString(arrayBuffer, offset, magic, magicEncoding, Number.MAX_SAFE_INTEGER);\n  }\n\n  // Check magic that's provided by a nice, human-readable string\n  static checkMagic(arrayBuffer, offset, magic, magicEncoding) {\n    const magicTextDecoder = new TextDecoder(magicEncoding);\n    const magicFound = magicTextDecoder.decode(arrayBuffer.slice(offset, offset + magic.length));\n\n    if (magicFound !== magic) {\n      throw new Error(`Save appears corrupted: found '${magicFound}' instead of '${magic}'`);\n    }\n  }\n\n  // Check magic that contains problematic bytes that aren't human-readable\n  static checkMagicBytes(arrayBuffer, offset, magic) {\n    const dataView = new DataView(arrayBuffer);\n\n    for (let i = 0; i < magic.length; i += 1) {\n      const magicFound = dataView.getUint8(offset + i);\n      if (magicFound !== magic[i]) {\n        throw new Error(`Save appears corrupted: found 0x${magicFound.toString(16)} instead of 0x${magic[i].toString(16)}`);\n      }\n    }\n  }\n\n  static setMagicBytes(arrayBuffer, offset, magic) {\n    const outputArrayBuffer = Util.copyArrayBuffer(arrayBuffer);\n    const dataView = new DataView(outputArrayBuffer);\n\n    for (let i = 0; i < magic.length; i += 1) {\n      dataView.setUint8(offset + i, magic[i]);\n    }\n\n    return outputArrayBuffer;\n  }\n\n  static findMagic(arrayBuffer, magic, magicEncoding, startOffset = 0) {\n    const magicTextDecoder = new TextDecoder(magicEncoding);\n\n    for (let offset = startOffset; offset < (arrayBuffer.byteLength - magic.length); offset += 1) {\n      const magicFound = magicTextDecoder.decode(arrayBuffer.slice(offset, offset + magic.length));\n\n      if (magicFound === magic) {\n        return offset;\n      }\n    }\n\n    throw new Error(`Save appears corrupted: could not find magic '${magic}'`);\n  }\n\n  static trimNull(s) {\n    return s.replace(/\\0[\\s\\S]*$/g, ''); // https://stackoverflow.com/questions/22809401/removing-a-null-character-from-a-string-in-javascript\n  }\n\n  static getNullTerminatedArray(uint8Array, startOffset, maxLength = -1) {\n    let end = uint8Array.length;\n\n    if (maxLength >= 0) {\n      end = Math.min(end, startOffset + maxLength);\n    }\n\n    for (let i = startOffset; i < end; i += 1) {\n      if (uint8Array[i] === 0) {\n        return uint8Array.slice(startOffset, i);\n      }\n    }\n\n    return uint8Array.slice(startOffset, end);\n  }\n\n  static readString(uint8Array, startOffset, encoding, length) {\n    const textDecoder = new TextDecoder(encoding);\n\n    return textDecoder.decode(uint8Array.slice(startOffset, startOffset + length));\n  }\n\n  static readNullTerminatedString(uint8Array, startOffset, encoding, maxLength = -1) {\n    const textDecoder = new TextDecoder(encoding);\n\n    return textDecoder.decode(Util.getNullTerminatedArray(uint8Array, startOffset, maxLength));\n  }\n\n  static uint8ArrayToHex(uint8Array) {\n    return Buffer.from(uint8Array).toString('hex').toUpperCase();\n  }\n\n  static copyArrayBuffer(source) {\n    const destination = new ArrayBuffer(source.byteLength);\n\n    new Uint8Array(destination).set(new Uint8Array(source));\n\n    return destination;\n  }\n\n  static padArrayBuffer(inputArrayBuffer, desiredLength, fillValue) {\n    if (inputArrayBuffer.byteLength === desiredLength) {\n      return inputArrayBuffer;\n    }\n\n    if (inputArrayBuffer.byteLength > desiredLength) {\n      throw new Error(`Cannot pad array buffer of length ${inputArrayBuffer.byteLength} to length ${desiredLength}`);\n    }\n\n    const outputArrayBuffer = Util.getFilledArrayBuffer(desiredLength, fillValue);\n\n    return Util.setArrayBufferPortion(outputArrayBuffer, inputArrayBuffer, 0, 0, inputArrayBuffer.byteLength);\n  }\n\n  static setArrayBufferPortion(destination, source, destinationOffset, sourceOffset, length) {\n    const destinationArray = new Uint8Array(destination);\n    const sourceArray = new Uint8Array(source.slice(sourceOffset, sourceOffset + length));\n\n    const output = new ArrayBuffer(destination.byteLength);\n    const outputArray = new Uint8Array(output);\n\n    outputArray.set(destinationArray);\n    outputArray.set(sourceArray, destinationOffset);\n\n    return output;\n  }\n\n  static fillArrayBufferPortion(arrayBuffer, startIndex, length, fillValue) {\n    const outputArrayBuffer = new ArrayBuffer(arrayBuffer.byteLength);\n    const outputArray = new Uint8Array(outputArrayBuffer);\n    const inputArray = new Uint8Array(arrayBuffer);\n\n    outputArray.set(inputArray);\n    outputArray.fill(fillValue, startIndex, startIndex + length);\n\n    return outputArrayBuffer;\n  }\n\n  static getFilledArrayBuffer(length, fillValue) {\n    const outputArrayBuffer = new ArrayBuffer(length);\n    const outputArray = new Uint8Array(outputArrayBuffer);\n\n    outputArray.fill(fillValue);\n\n    return outputArrayBuffer;\n  }\n\n  static fillArrayBuffer(arrayBuffer, fillValue) {\n    return Util.getFilledArrayBuffer(arrayBuffer.byteLength, fillValue);\n  }\n\n  static arrayBuffersEqual(arrayBuffer1, arrayBuffer2) {\n    if (arrayBuffer1.byteLength !== arrayBuffer2.byteLength) {\n      return false;\n    }\n\n    const u81 = new Uint8Array(arrayBuffer1);\n    const u82 = new Uint8Array(arrayBuffer2);\n\n    const unequalIndex = u81.find((element, index) => u81[index] !== u82[index]);\n\n    return (unequalIndex === undefined);\n  }\n\n  static allBytesEqual(arrayBuffer, value) {\n    const u8 = new Uint8Array(arrayBuffer);\n\n    const unequalIndex = u8.find((element) => element !== value);\n\n    return (unequalIndex === undefined);\n  }\n\n  static copyHeaderFromArrayBuffer(sourceArrayBuffer, headerByteCount, destinationArrayBuffer) {\n    const headerArrayBuffer = sourceArrayBuffer.slice(0, headerByteCount);\n    return Util.concatArrayBuffers([headerArrayBuffer, destinationArrayBuffer]);\n  }\n\n  static copyFooterFromArrayBuffer(sourceArrayBuffer, footerByteCount, destinationArrayBuffer) {\n    const footerArrayBuffer = sourceArrayBuffer.slice(-footerByteCount);\n    return Util.concatArrayBuffers([destinationArrayBuffer, footerArrayBuffer]);\n  }\n}\n"
  },
  {
    "path": "frontend/src/views/About.vue",
    "content": "<template>\n  <div class=\"about\">\n\n    <b-row class=\"justify-content-center\">\n      <b-col cols=\"11\" md=\"5\">\n        <b-row class=\"justify-content-center\">\n          <h2>Join us on Discord</h2>\n        </b-row>\n        <b-row class=\"justify-content-center\">\n          <b-col>\n            <b-row class=\"justify-content-center\">\n              <b-link href=\"https://discord.gg/wtJ7xUKKTR\">\n                <b-img src=\"discord-channels.png\"/>\n              </b-link>\n            </b-row>\n            <b-row class=\"justify-content-center\">\n              <b-link href=\"https://discord.gg/wtJ7xUKKTR\">\n                https://discord.gg/wtJ7xUKKTR\n              </b-link>\n            </b-row>\n          </b-col>\n        </b-row>\n      </b-col>\n    </b-row>\n\n    <b-row class=\"justify-content-center\">\n\n      <b-col cols=\"11\" md=\"4\">\n        <b-row class=\"justify-content-center header-row\">\n          <h2>Contact by email</h2>\n        </b-row>\n        <b-row class=\"justify-content-center info-row\">\n          savefileconverter{{'\\xa0'}}(at) gmail{{'\\xa0'}}(dot){{'\\xa0'}}com\n        </b-row>\n      </b-col>\n\n      <b-col cols=\"11\" md=\"3\">\n        <b-row class=\"justify-content-center header-row\">\n          <h2>Donate</h2>\n        </b-row>\n        <b-row class=\"justify-content-center info-row\">\n          Everything on this site is free and open source with no advertising. If you find the site helpful and want to donate you can here:\n          <div class=\"donate-button\">\n            <form action=\"https://www.paypal.com/donate\" method=\"post\" target=\"_top\">\n              <input type=\"hidden\" name=\"hosted_button_id\" value=\"DHDERHCQVLGPJ\" />\n              <input type=\"image\" src=\"https://www.paypalobjects.com/en_US/i/btn/btn_donate_LG.gif\" border=\"0\" name=\"submit\" title=\"Donate with PayPal\" alt=\"Donate with PayPal button\" />\n            </form>\n          </div>\n        </b-row>\n      </b-col>\n\n      <b-col cols=\"11\" md=\"4\">\n        <b-row class=\"justify-content-center header-row\">\n          <h2>Contribute code</h2>\n        </b-row>\n        <b-row class=\"justify-content-center info-row\">\n          <b-link href=\"https://github.com/euan-forrester/save-file-converter\">\n            https://github.com/euan-forrester/save-file-converter\n          </b-link>\n        </b-row>\n      </b-col>\n\n    </b-row>\n\n  </div>\n</template>\n\n<style scoped>\n.header-row {\n  padding-top: 2em;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.info-row {\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.donate-button {\n  padding-top: 1em;\n}\n</style>\n\n<script>\nexport default {\n  name: 'AboutView',\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/AdvancedView.vue",
    "content": "<template>\n  <div class=\"home\">\n    <AdvancedUtils\n      :initialTab=\"this.initialTab\"\n    />\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport AdvancedUtils from '@/components/AdvancedUtils.vue';\n\nexport default {\n  name: 'AdvancedView',\n  components: {\n    AdvancedUtils,\n  },\n  props: {\n    initialTab: {\n      type: String,\n      default: 'resize',\n    },\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/DownloadSaves.vue",
    "content": "<template>\n  <div>\n    <b-row>\n      <b-col>\n        <h2>\n          Download saves\n        </h2>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <div class=\"d-none d-md-block\">\n      <b-row align-h=\"center\">\n        <b-col cols=5 lg=5 xl=4>\n          <h5>Site</h5>\n        </b-col>\n        <b-col cols=5 lg=5 xl=4>\n          <h5>Notes</h5>\n        </b-col>\n      </b-row>\n    </div>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://gamefaqs.gamespot.com/\">GameFAQs</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Lots of saves for lots of games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://www.thetechgame.com/Downloads.html\">The{{'\\xa0'}}Tech{{'\\xa0'}}Game</b-link><br>(registration{{'\\xa0'}}required)\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Lots of games available. Also has save states for specific emulators/flash carts.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://www.brewology.com/\">Brewology</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Has saves for some specific systems:\n        <b-link href=\"https://psp.brewology.com/gamesaves/savedgames.php\">PSP</b-link>,{{'\\xa0'}}<b-link href=\"https://ps3.brewology.com/gamesaves/savedgames.php\">PS3</b-link>,{{'\\xa0'}}<b-link href=\"https://wii.brewology.com/gamesaves/savedgames.php\">Wii</b-link>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/bucanero/apollo-saves\">Apollo Save Game Database</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Has saves for some specific systems:\n        <b-link href=\"https://github.com/bucanero/apollo-saves/tree/master/PS1\">PS1</b-link>,{{'\\xa0'}}\n        <b-link href=\"https://github.com/bucanero/apollo-saves/tree/master/PS2\">PS2</b-link>,{{'\\xa0'}}\n        <b-link href=\"https://bucanero.github.io/apollo-saves/PS3/\">PS3</b-link>,{{'\\xa0'}}\n        <b-link href=\"https://bucanero.github.io/apollo-saves/PS4/\">PS4</b-link>,{{'\\xa0'}}\n        <b-link href=\"https://bucanero.github.io/apollo-saves/PSP/\">PSP</b-link>,{{'\\xa0'}}\n        <b-link href=\"https://bucanero.github.io/apollo-saves/PSV/\">PS Vita</b-link>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://www.zophar.net/savestates.html\">Zophar's{{'\\xa0'}}Domain</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Mostly save states, but some save files as well.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://gbatemp.net/download/categories/oldies-retro.1139/\">GBAtemp</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Have to dig through lots of hacks, tools, etc., but there's also saves for various games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/Pezz82/MemCard-Pro-Packs/tree/main/Individual%20Games\">MemCard Pro Packs</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Lots of PS1 games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://www.ps2-home.com/forum/viewforum.php?f=70\">PS2 Game Saves</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Lots of PS2 games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://codetwink.com/saves.php\">CodeTwink</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Lots of PSP and PS2 saves.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://bucanero.github.io/dreamcast-saves/\">bucanero</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Lots of Dreamcast games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"http://www.fightingstreet.com/folders/downloadsfolder/dreamcast/dreamcastsaves.html\">Fighting Street</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        A small selection of Dreamcast games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://gc-saves.com/\">GC Saves</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Lots of GameCube games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/JagDogger2525/RetroPie-Game-Saves\">RetroPie Game Saves</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Selection of VB/DC/GCN/GB/GBA/N64/NES/PS1/SNES/PSP saves\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/madmodder123/retropie_saves\">RetroPie Saves</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Selection of DC/GBA/GBC/N64/PS1/SNES saves\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://retromaggedon.com/index.php/about-the-save-archive/\">Retromaggedon</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Small selection of games for various systems.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://cxd4.github.io/saves/\">cdx4</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Small selection of games for various systems.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://www.emunations.com/gamesave\">EmuNations</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Selection of games for various systems in various emulator formats.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"http://n64.icequake.net/mirror/64scener.parodius.com/dexdrive.htm\">64scener</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Selection of Nintendo 64 games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://bucanero.github.io/saturn-save-tools/\">bucanero</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Selection of Sega Saturn games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://ppcenter.webou.net/pskai/savedata/\">PPcenter</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Selection of Sega Saturn games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/slinga-homebrew/Save-Game-Copier/tree/master/cd/SATSAVES\">slinga-homebrew</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Selection of Sega Saturn games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://www.360haven.com/forums/archive/index.php/f-14.html\">360 Haven</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        XBox 360 games\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://www.xpgamesaves.com/resources/\">XP Game Saves</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        XBox 360 games\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://fantasyanime.com/games\">Fantasy Anime</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Small selection of 8- 16- and 32-bit RPGs.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://themushroomkingdom.net/sub-space/saves\">The{{'\\xa0'}}Mushroom{{'\\xa0'}}Kingdom</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Small selection of Mario games.\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"http://www.zeldalegends.net/index.php?n=saves\">Zelda{{'\\xa0'}}Legends</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Selection of Zelda games.\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.blank-line {\n  min-height: 1em;\n}\n</style>\n\n<script>\n\nexport default {\n  name: 'DownloadSavesView',\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Dreamcast.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertDreamcast/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertDreamcast from '@/components/ConvertDreamcast.vue';\n\nexport default {\n  name: 'DreamcastView',\n  components: {\n    ConvertDreamcast,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/EraseSaveView.vue",
    "content": "<template>\n  <div class=\"home\">\n    <EraseSave/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport EraseSave from '@/components/EraseSave.vue';\n\nexport default {\n  name: 'EraseSaveView',\n  components: {\n    EraseSave,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/FlashCarts.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertFlashCarts/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertFlashCarts from '@/components/ConvertFlashCarts.vue';\n\nexport default {\n  name: 'FlashCartsView',\n  components: {\n    ConvertFlashCarts,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/GameCube.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertGameCube/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertGameCube from '@/components/ConvertGameCube.vue';\n\nexport default {\n  name: 'GameCubeView',\n  components: {\n    ConvertGameCube,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/GbaActionReplay.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertGbaActionReplay/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertGbaActionReplay from '@/components/ConvertGbaActionReplay.vue';\n\nexport default {\n  name: 'GbaActionReplayView',\n  components: {\n    ConvertGbaActionReplay,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/GbaGameShark.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertGbaGameShark/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertGbaGameShark from '@/components/ConvertGbaGameShark.vue';\n\nexport default {\n  name: 'GbaGameSharkView',\n  components: {\n    ConvertGbaGameShark,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/GbaGameSharkSP.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertGbaGameSharkSP/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertGbaGameSharkSP from '@/components/ConvertGbaGameSharkSP.vue';\n\nexport default {\n  name: 'GbaGameSharkSPView',\n  components: {\n    ConvertGbaGameSharkSP,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Mister.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertMister/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertMister from '@/components/ConvertMister.vue';\n\nexport default {\n  name: 'MisterView',\n  components: {\n    ConvertMister,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/N64DexDrive.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertN64DexDrive/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertN64DexDrive from '@/components/ConvertN64DexDrive.vue';\n\nexport default {\n  name: 'N64DexDriveView',\n  components: {\n    ConvertN64DexDrive,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/N64Mempack.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertN64Mempack/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertN64Mempack from '@/components/ConvertN64Mempack.vue';\n\nexport default {\n  name: 'N64MempackView',\n  components: {\n    ConvertN64Mempack,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/NintendoSwitchOnline.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertNintendoSwitchOnline/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertNintendoSwitchOnline from '@/components/ConvertNintendoSwitchOnline.vue';\n\nexport default {\n  name: 'NintendoSwitchOnlineView',\n  components: {\n    ConvertNintendoSwitchOnline,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/OnlineEmulators.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertOnlineEmulators/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertOnlineEmulators from '@/components/ConvertOnlineEmulators.vue';\n\nexport default {\n  name: 'OnlineEmulatorsView',\n  components: {\n    ConvertOnlineEmulators,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/OriginalHardware.vue",
    "content": "<template>\n  <div>\n    <b-row>\n      <b-col>\n        <h2>\n          Copy saves to/from original hardware\n        </h2>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <div class=\"d-none d-md-block\"/>\n    <b-table\n      striped\n      responsive=\"lg\"\n      :items=\"items\"\n      :fields=\"fields\"\n      :sort-compare=\"sortCompare\"\n      primary-key=\"index\"\n      :sort-by=\"sortBy\"\n      :sticky-header=\"$mq | mq({ xs: 'calc(100vh - 4em)', sm: 'calc(100vh - 4em)', md: 'calc(100vh - 4em)', lg: false, xl: false })\"\n    > <!-- Need a primary key to make sure Vue updates all columns of our table when sorting-->\n      <template #cell(hardware)=\"data\">\n        <div v-if=\"data.value.hasOwnProperty('link')\">\n          <b-link :class=\"`original-hardware-${data.item.gtmClass}`\" :href=\"data.value.link\">{{ data.value.name }}</b-link> <!-- Add in a class for tracking clicks in google tag manager -->\n        </div>\n        <div v-else>\n          {{ data.value.name }}\n        </div>\n      </template>\n      <template #cell()=\"data\">\n        <div v-if=\"typeof data.value === 'string'\">\n          <!-- Note that we choose a button because we need to render out an <a> element in order for the focus trigger to work for mobile:\n          https://bootstrap-vue.org/docs/components/popover#caveats-with-focus-trigger-on-button-elements -->\n          <b-button variant=\"link\" :id=\"`${data.field.key}-${data.item.index}-popover-target`\" href=\"#\" tabindex=\"0\">\n            <font-awesome-icon :icon=\"['fas', 'exclamation-triangle']\" size=\"2x\" class=\"supported-with-caveat\"/>\n          </b-button>\n          <b-popover :target=\"`${data.field.key}-${data.item.index}-popover-target`\" triggers=\"focus hover\" placement=\"bottom\">\n            {{ data.value }}\n          </b-popover>\n        </div>\n        <div v-else>\n          <i :class=\"data.value ? 'fas fa-check fa-2x supported' : 'fas fa-times fa-2x not-supported'\"></i>\n        </div>\n      </template>\n      <template #cell(show_details)=\"row\">\n        <div v-if=\"row.item.hasOwnProperty('software')\">\n          <b-button size=\"sm\" @click=\"row.toggleDetails\" class=\"mr-2\">\n            {{ row.detailsShowing ? 'Less' : 'More'}} info\n          </b-button>\n        </div>\n      </template>\n      <template #row-details=\"row\">\n        <div :v-if=\"row.item.software !== undefined\">\n          <b-card class=\"text-left\">\n            <b-row align-h=\"start\">\n              <b-col cols=\"2\"/>\n              <b-col cols=\"2\"><b>Software:</b></b-col>\n              <b-col><b-link :href=\"row.item.software.link\">{{ row.item.software.name }}</b-link></b-col>\n            </b-row>\n            <div v-if=\"row.item.software.hasOwnProperty('howToRun')\">\n              <b-row align-h=\"start\">\n                <b-col cols=\"2\"/>\n                <b-col cols=\"2\"><b>How to run:</b></b-col>\n                <div v-if=\"row.item.software.hasOwnProperty('howToRunLink')\">\n                  <b-col><b-link :href=\"row.item.software.howToRunLink\">{{ row.item.software.howToRun }}</b-link></b-col>\n                </div>\n                <div v-else>\n                  <b-col>{{ row.item.software.howToRun }}</b-col>\n                </div>\n              </b-row>\n            </div>\n          </b-card>\n        </div>\n      </template>\n      <template #table-caption>\n        <p class=\"contact-info\">Anything missing? Found a mistake? Product discontinued? Visit <b-link href=\"https://discord.gg/wtJ7xUKKTR\">https://discord.gg/wtJ7xUKKTR</b-link> or email savefileconverter (at) gmail (dot) com</p>\n      </template>\n    </b-table>\n  </div>\n</template>\n\n<style scoped>\n.blank-line {\n  min-height: 1em;\n}\n\n.supported {\n  color: green;\n}\n\n.not-supported {\n  color: lightgrey;\n}\n\n.supported-with-caveat {\n  color: goldenrod;\n}\n\n.contact-info {\n  margin-left: 3em;\n}\n\n.mydude {\n  color: hotpink;\n}\n\n</style>\n\n<script>\nimport {\n  BTable,\n  BCard,\n  BPopover,\n} from 'bootstrap-vue';\n\nexport default {\n  name: 'OriginalHardwareView',\n  components: {\n    BTable,\n    BCard,\n    BPopover,\n  },\n  props: {\n    initialSortBy: {\n      type: String,\n      default: 'hardware',\n    },\n  },\n  methods: {\n    sortCompare(aRow, bRow, key, sortDesc, formatter, compareOptions, compareLocale) {\n      const a = aRow[key];\n      const b = bRow[key];\n\n      // Having a string for a value means \"true with caveat\" and we want to sort them as if they're true\n\n      const aType = typeof a;\n      const bType = typeof b;\n\n      const aBoolean = (aType === 'boolean') || (aType === 'string');\n      const bBoolean = (bType === 'boolean') || (bType === 'string');\n\n      const aValue = aBoolean && !!a;\n      const bValue = bBoolean && !!b;\n\n      if (aBoolean && bBoolean) {\n        if (aValue === bValue) {\n          return aRow.hardware.name.localeCompare(bRow.hardware.name, compareLocale, compareOptions); // Sort all of the boolean trues together by name, and the falses by name, so it's easier to read and everything is in a deterministic order\n        }\n\n        return aValue ? -1 : 1;\n      }\n\n      if (key === 'hardware') {\n        return a.name.localeCompare(b.name, compareLocale, compareOptions);\n      }\n\n      return 0;\n    },\n  },\n  computed: {\n    sortBy() {\n      const possibleSortKeys = this.fields.filter((i) => i.sortable).map((i) => i.key);\n\n      if (possibleSortKeys.indexOf(this.initialSortBy) >= 0) {\n        return this.initialSortBy;\n      }\n\n      return 'hardware';\n    },\n  },\n  data() {\n    return {\n      fields: [\n        {\n          key: 'hardware',\n          label: 'Hardware',\n          sortable: true,\n          stickyColumn: true,\n        },\n        {\n          key: 'show_details',\n          label: 'More info',\n        },\n        {\n          key: 'nes',\n          label: 'NES / FC',\n          sortable: true,\n        },\n        {\n          key: 'snes',\n          label: 'SNES / SFC',\n          sortable: true,\n        },\n        {\n          key: 'n64',\n          label: 'N64',\n          sortable: true,\n        },\n        {\n          key: 'gcn',\n          label: 'GCN',\n          sortable: true,\n        },\n        {\n          key: 'gb',\n          label: 'GB / GBC',\n          sortable: true,\n        },\n        {\n          key: 'gba',\n          label: 'GBA',\n          sortable: true,\n        },\n        {\n          key: 'lynx',\n          label: 'Lynx',\n          sortable: true,\n        },\n        {\n          key: 'gamegear',\n          label: 'Game Gear',\n          sortable: true,\n        },\n        {\n          key: 'sms',\n          label: 'SMS',\n          sortable: true,\n        },\n        {\n          key: 'genesis',\n          label: 'Genesis',\n          sortable: true,\n        },\n        {\n          key: 'segacd',\n          label: 'Sega CD',\n          sortable: true,\n        },\n        {\n          key: 'saturn',\n          label: 'Sega Saturn',\n          sortable: true,\n        },\n        {\n          key: 'dc',\n          label: 'DC',\n          sortable: true,\n        },\n        {\n          key: 'tg16',\n          label: 'TG-16',\n          sortable: true,\n        },\n        {\n          key: 'ps1',\n          label: 'PS1',\n          sortable: true,\n        },\n        {\n          key: 'ps2',\n          label: 'PS2',\n          sortable: true,\n        },\n      ],\n      items: [\n        {\n          index: 0,\n          gtmClass: 'retroblaster',\n          hardware: {\n            name: 'RetroBlaster',\n            link: 'https://retrostage.net/?product=retroblaster-programmer-2-0',\n          },\n          nes: true,\n          snes: true,\n          n64: true,\n          gcn: false,\n          gb: true,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false, // Feb 1, 2022: Not currently possible via a SMS-to-Genesis adapter, although an SMS-specific adapter is in the works\n          genesis: true,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: true,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 1,\n          gtmClass: 'retron5',\n          hardware: {\n            name: 'RetroN 5',\n            link: 'https://www.hyperkin.com/retron-5-hd-gaming-console-for-gba-gbc-gb-snes-nes-super-famicom-famicom-genesis-mega-drive-master-system-black-hyperkin.html',\n          },\n          nes: false, // I never could get this to work with mine, although the device supports NES/FC games\n          snes: true,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: true, // This only partially worked with mine. Some random-seeming games just wouldn't work with it\n          lynx: false,\n          gamegear: true, // This is just an assumption, given that you can play GG games with a RetroN 5 3-in-1 Adapter\n          sms: true, // This is just an assumption, given that you can play SMS games with a RetroN 5 3-in-1 Adapter\n          genesis: true,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 2,\n          gtmClass: 'gb-operator',\n          hardware: {\n            name: 'GB Operator',\n            link: 'https://www.epilogue.co/product/gb-operator',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 3,\n          gtmClass: 'joey-jr',\n          hardware: {\n            name: 'Joey Jr.',\n            link: 'https://bennvenn.myshopify.com/products/usb-gb-c-cart-dumper-the-joey-jr',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 4,\n          gtmClass: 'gbxcart-rw',\n          hardware: {\n            name: 'GBxCart RW',\n            link: 'https://www.gbxcart.com/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 5,\n          gtmClass: 'memcard-pro',\n          hardware: {\n            name: 'Memcard Pro',\n            link: 'https://8bitmods.com/memcard-pro-for-playstation-1-smoke-black/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: false,\n        },\n        {\n          index: 6,\n          gtmClass: 'retrousb-avs',\n          hardware: {\n            name: 'RetroUSB AVS',\n            link: 'https://www.retrousb.com/product_info.php?products_id=78',\n          },\n          software: {\n            name: 'Scoreboard (under Firmware Downloads)',\n            link: 'https://www.retrousb.com/product_info.php?products_id=78',\n            howToRun: 'Requires a Windows or Mac computer',\n            howToRunLink: 'https://twitter.com/retrousb/status/1154136414247882753?lang=en',\n          },\n          nes: true,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 7,\n          gtmClass: 'retrode2',\n          hardware: {\n            name: 'Retrode2',\n            link: 'https://dragonbox.de/en/cartridge-dumper/retrode2.html',\n          },\n          nes: false,\n          snes: true,\n          n64: true,\n          gcn: false,\n          gb: true,\n          gba: true,\n          lynx: false,\n          gamegear: 'There is a Game Gear adapter for the Retrode, but it has been discontinued and may be difficult to find',\n          sms: true,\n          genesis: true,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 8,\n          gtmClass: 'open-source-cartridge-reader',\n          hardware: {\n            name: 'Open Source Cartridge Reader',\n            link: 'https://github.com/sanni/cartreader',\n          },\n          nes: true,\n          snes: true,\n          n64: true,\n          gcn: false,\n          gb: true,\n          gba: true,\n          lynx: false,\n          gamegear: 'Can use the Retrode SMS + Game Gear adapters, but the Game Gear adapter has been discontinued and may be difficult to find',\n          sms: true,\n          genesis: true,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 9,\n          gtmClass: 'raphnet-n64-adapter',\n          hardware: {\n            name: 'Raphnet N64-to-USB controller adapter',\n            link: 'https://www.raphnet-tech.com/products/n64_usb_adapter_gen3/index.php',\n          },\n          software: {\n            name: 'Raphnet Adapter Manager',\n            link: 'https://www.raphnet-tech.com/products/adapter_manager/index.php',\n            howToRun: 'Requires a Windows computer',\n          },\n          nes: false,\n          snes: false,\n          n64: true,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        /* Feb 3, 2022: Contacted raphnet and they say this cart programmer cannot yet read/write sram although it technically is possible. They say they will be adding this feature soon\n        {\n          index: 10,\n          gtmClass: 'raphnet-cartridge-programmer',\n          hardware: {\n            name: 'Raphnet cartridge programmer',\n            link: 'https://www.raphnet-tech.com/products/sms_cartridge_reader_programmer/index.php',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: true,\n          sms: true,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        */\n        {\n          index: 11,\n          gtmClass: 'ps3-memory-card-adapter',\n          hardware: {\n            name: 'PS3 USB Memory Card Adapter',\n            link: 'https://www.psdevwiki.com/ps3/Card_Adapter',\n          },\n          software: {\n            name: 'MemcardRex',\n            link: 'https://github.com/ShendoXT/memcardrex/releases',\n            howToRun: 'Requires a Windows computer',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: false,\n        },\n        {\n          index: 12,\n          gtmClass: 'ps1-dexdrive',\n          hardware: {\n            name: 'PS1 DexDrive',\n            link: 'https://en.wikipedia.org/wiki/DexDrive',\n          },\n          software: {\n            name: 'MemcardRex',\n            link: 'https://github.com/ShendoXT/memcardrex/releases',\n            howToRun: 'Requires a Windows computer',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: false,\n        },\n        {\n          index: 13,\n          gtmClass: 'playstation2-usb-stick',\n          hardware: {\n            name: 'PlayStation 2 + USB stick',\n            link: 'https://en.wikipedia.org/wiki/PlayStation_2',\n          },\n          software: {\n            name: 'uLaunchElf',\n            link: 'http://ps2ulaunchelf.pbworks.com/w/page/19520134/FrontPage',\n            howToRun: 'PS2 memory card with Free MCBoot preinstalled',\n            howToRunLink: 'https://www.google.com/search?q=ps2+mcboot+memory+card',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: true,\n        },\n        {\n          index: 14,\n          gtmClass: 'gba-link-cable-dumper-gcn',\n          hardware: {\n            name: 'GBA + GameCube + GC-to-GBA link cable',\n            link: 'https://en.wikipedia.org/wiki/GameCube_%E2%80%93_Game_Boy_Advance_link_cable',\n          },\n          software: {\n            name: 'GBA Link Cable Dumper',\n            link: 'https://github.com/FIX94/gba-link-cable-dumper',\n            howToRun: 'Various methods for booting homebrew on GameCube',\n            howToRunLink: 'https://www.gc-forever.com/wiki/index.php?title=Booting_homebrew',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 15,\n          gtmClass: 'gba-link-cable-dumper-wii',\n          hardware: {\n            name: 'GBA + Wii + GC-to-GBA link cable',\n            link: 'https://en.wikipedia.org/wiki/GameCube_%E2%80%93_Game_Boy_Advance_link_cable',\n          },\n          software: {\n            name: 'GBA Link Cable Dumper',\n            link: 'https://github.com/FIX94/gba-link-cable-dumper',\n            howToRun: 'Wii softmodding guide',\n            howToRunLink: 'https://wii.guide/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 16,\n          gtmClass: 'nintendo-ds-r4',\n          hardware: {\n            name: 'Nintendo DS + R4 cartridge',\n            link: 'https://en.wikipedia.org/wiki/R4_cartridge',\n          },\n          software: {\n            name: 'GBA Backup Tool',\n            link: 'https://projectpokemon.org/home/tutorials/save-editing/managing-gba-saves/using-gba-backup-tool-r55/',\n            howToRun: 'R4 cartridge',\n            howToRunLink: 'https://www.google.com/search?q=best+r4+card+no+timebomb',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 17,\n          gtmClass: 'gcn-gameboy-player',\n          hardware: {\n            name: 'GameCube + GameBoy Player',\n            link: 'https://en.wikipedia.org/wiki/Game_Boy_Player',\n          },\n          software: {\n            name: 'GameBoy Interface',\n            link: 'https://www.gc-forever.com/wiki/index.php?title=Game_Boy_Interface#GBA_dumper',\n            howToRun: 'Various methods for booting homebrew on GameCube',\n            howToRunLink: 'https://www.gc-forever.com/wiki/index.php?title=Booting_homebrew',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 18,\n          gtmClass: 'turbo-everdrive',\n          hardware: {\n            name: 'Turbo Everdrive',\n            link: 'https://krikzz.com/our-products/cartridges/turbo-everdrive-v2.html',\n          },\n          software: {\n            name: 'TEOS Beta4 firmware',\n            link: 'https://krikzz.com/forum/index.php?topic=9417.msg71671#msg71671',\n            howToRun: 'How to install OS files on Turbo Everdrive',\n            howToRunLink: 'https://youtube.com/clip/UgkxzaGhUNm20tYKK8slOsuMqjbYWvJnU3d5',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: true,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 19,\n          gtmClass: '64drive-ultrasave',\n          hardware: {\n            name: '64drive + UltraSave',\n            link: 'http://64drive.retroactive.be/features.php',\n          },\n          nes: false,\n          snes: false,\n          n64: true,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 20,\n          gtmClass: 'saturn-gamers-cartridge',\n          hardware: {\n            name: 'Saturn Gamer\\'s Cartridge',\n            link: 'https://ppcenter.webou.net/satcart/#gamers',\n          },\n          software: {\n            name: 'Pseudo Saturn Kai',\n            link: 'https://ppcenter.webou.net/pskai/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: true,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 21,\n          gtmClass: 'terraonion-mode-saturn',\n          hardware: {\n            name: 'Terraonion MODE',\n            link: 'https://terraonion.com/en/producto/terraonion-mode/',\n          },\n          software: {\n            name: 'Official firmware update',\n            link: 'https://downloads.terraonion.com/shop/product/terraonion-mode-dreamcast-saturn-ode/view',\n            howToRun: 'Copy the entire Saturn save RAM, or individual saves',\n            howToRunLink: 'https://www.retrorgb.com/mode-saturn-save-restore-backup.html',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: true,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 22,\n          gtmClass: 'satiator-ode',\n          hardware: {\n            name: 'Satiator ODE',\n            link: 'https://www.satiator.net/',\n          },\n          software: {\n            name: 'Pseudo Saturn Kai',\n            link: 'https://ppcenter.webou.net/pskai/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: true,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 23,\n          gtmClass: 'fenrir-ode',\n          hardware: {\n            name: 'Fenrir ODE',\n            link: 'https://www.fenrir-ode.fr/',\n          },\n          software: {\n            name: 'Official firmware',\n            link: 'https://www.fenrir-ode.fr/firmware/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: true,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 24,\n          gtmClass: 'raphnet-n64-adapter-transfer-pak',\n          hardware: {\n            name: 'Raphnet N64-to-USB controller adapter + Transfer Pak',\n            link: 'https://www.raphnet-tech.com/products/n64_usb_adapter_gen3/index.php',\n          },\n          software: {\n            name: 'Raphnet Adapter Manager',\n            link: 'https://www.raphnet.net/programmation/gcn64tools/index_en.php#8',\n            howToRun: 'Requires a Windows computer',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 25,\n          gtmClass: 'gamecube-sd-adapter',\n          hardware: {\n            name: 'GameCube + SD card adapter',\n            link: 'https://www.google.com/search?q=gamecube+sd+card+adapter',\n          },\n          software: {\n            name: 'GameCube Memory Manager',\n            link: 'https://github.com/suloku/gcmm',\n            howToRun: 'Various methods for booting homebrew on GameCube',\n            howToRunLink: 'https://www.gc-forever.com/wiki/index.php?title=Booting_homebrew',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: true,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 26,\n          gtmClass: 'terraonion-mode-dreamcast',\n          hardware: {\n            name: 'Terraonion MODE',\n            link: 'https://terraonion.com/en/producto/terraonion-mode/',\n          },\n          software: {\n            name: 'VMU Tool',\n            link: 'https://bswirl.kitsunet.org/vmutool/release/about/?lg=en&menu=on',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 27,\n          gtmClass: 'gdemu-ode',\n          hardware: {\n            name: 'GDEmu ODE',\n            link: 'https://gdemu.wordpress.com/',\n          },\n          software: {\n            name: 'VMU Tool',\n            link: 'https://bswirl.kitsunet.org/vmutool/release/about/?lg=en&menu=on',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 28,\n          gtmClass: 'usb-gdrom-ode',\n          hardware: {\n            name: 'USB-GDROM ODE',\n            link: 'http://3do-renovation.ru/USB-GDROM_Controller.htm',\n          },\n          software: {\n            name: 'VMU Tool',\n            link: 'https://bswirl.kitsunet.org/vmutool/release/about/?lg=en&menu=on',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 29,\n          gtmClass: 'memcarduino',\n          hardware: {\n            name: 'MemCARDuino',\n            link: 'http://shendohardware.blogspot.com/2013/06/memcarduino.html',\n          },\n          software: {\n            name: 'MemcardRex',\n            link: 'https://github.com/ShendoXT/memcardrex/releases',\n            howToRun: 'Requires a Windows computer',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: false,\n        },\n        {\n          index: 30,\n          gtmClass: 'ps1cardlink',\n          hardware: {\n            name: 'PS1CardLink',\n            link: 'https://github.com/ShendoXT/ps1cardlink',\n          },\n          software: {\n            name: 'MemcardRex',\n            link: 'https://github.com/ShendoXT/memcardrex/releases',\n            howToRun: 'Requires a Windows computer',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: false,\n        },\n        {\n          index: 31,\n          gtmClass: 'raphnet-ps1-adapter-multitap',\n          hardware: {\n            name: 'Raphnet PS1/PS2-to-USB controller adapter + PS1 Multitap',\n            link: 'https://www.raphnet-tech.com/products/psx_to_usb/index.php',\n          },\n          software: {\n            name: 'Raphnet Adapter Manager',\n            link: 'https://www.raphnet-tech.com/products/adapter_manager/index.php',\n            howToRun: 'Requires a Windows computer',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: false,\n        },\n        {\n          index: 32,\n          gtmClass: 'forever-pak-64',\n          hardware: {\n            name: 'Forever Pak 64',\n            link: 'https://4layertech.com/products/forever-pak-64',\n          },\n          nes: false,\n          snes: false,\n          n64: true,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 33,\n          gtmClass: 'joey-n64',\n          hardware: {\n            name: 'Joey N64',\n            link: 'https://bennvenn.myshopify.com/products/joeyn64-cart-flasher',\n          },\n          nes: false,\n          snes: false,\n          n64: true,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 34,\n          gtmClass: 'joey-gg',\n          hardware: {\n            name: 'Joey GG',\n            link: 'https://bennvenn.myshopify.com/products/joeygg-cart-flasher',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: true,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 35,\n          gtmClass: 'joey-sms',\n          hardware: {\n            name: 'Joey SMS',\n            link: 'https://bennvenn.myshopify.com/products/joeysms-cart-flasher',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: true,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 36,\n          gtmClass: 'joey-lynx',\n          hardware: {\n            name: 'Joey Lynx',\n            link: 'https://bennvenn.myshopify.com/products/joeylynx-cart-flasher',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: true,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 37,\n          gtmClass: 'everdrive-64',\n          hardware: {\n            name: 'Everdrive 64',\n            link: 'https://krikzz.com/our-products/cartridges/',\n          },\n          software: {\n            name: 'Official firmware',\n            link: 'https://krikzz.com/pub/support/everdrive-64/x-series/OS/',\n            howToRun: 'Use the Controller Pak menu',\n            howToRunLink: 'https://krikzz.com/pub/support/everdrive-64/x-series/everdrive-64-manual.pdf',\n          },\n          nes: false,\n          snes: false,\n          n64: true,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 38,\n          gtmClass: 'hyperkin-admiral',\n          hardware: {\n            name: 'Hyperkin Admiral',\n            link: 'https://www.hyperkin.com/admiral-premium-bt-controller-for-n64-white-hyperkin.html',\n          },\n          nes: false,\n          snes: false,\n          n64: true,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 39,\n          gtmClass: 'gb64-x7',\n          hardware: {\n            name: 'Everdrive 64 X7 + Transfer Pak',\n            link: 'https://krikzz.com/our-products/cartridges/ed64x7.html',\n          },\n          software: {\n            name: 'gb64-x7',\n            link: 'https://github.com/ragnaroktomorrow/gb64-x7',\n            howToRun: 'Requires a Windows computer',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 40,\n          gtmClass: 'libgbpak',\n          hardware: {\n            name: 'Everdrive 64 + Transfer Pak',\n            link: 'https://krikzz.com/our-products/cartridges/',\n          },\n          software: {\n            name: 'libgbpak',\n            link: 'https://github.com/saturnu/libgbpak',\n            howToRun: 'Choose to dump SRAM',\n            howToRunLink: 'http://micro-64.com/features/gbromdumping.shtml',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 41,\n          gtmClass: 'gameshark-n64',\n          hardware: {\n            name: 'GameShark N64',\n            link: 'https://en.wikipedia.org/wiki/GameShark#Nintendo_64_GameShark',\n          },\n          software: {\n            name: 'The built-in Memory Card Manager',\n            link: 'http://www.gametronik.com/site/rubriques/n64/FAQs/Hardware%20-%20GameShark%20Pro%20(U).pdf',\n            howToRun: 'Choose to copy a save from a game cartridge to a memory card or vice versa. Only works with EEPROM saves',\n          },\n          nes: false,\n          snes: false,\n          n64: true,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 42,\n          gtmClass: 'analogue-super-nt',\n          hardware: {\n            name: 'Analogue Super Nt',\n            link: 'https://www.analogue.co/super-nt',\n          },\n          software: {\n            name: 'CopySNES',\n            link: 'https://github.com/SmokeMonsterPacks/Super-NT-Jailbreak',\n            howToRun: 'Jailbreak the console',\n            howToRunLink: 'https://www.joedynamite.com/article/how-to-jailbreak-your-analogue-super-nt/',\n          },\n          nes: false,\n          snes: 'The Analogue Super Nt can only copy saves from a cartridge, and cannot copy saves to a cartridge',\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 43,\n          gtmClass: 'analogue-nt-mini',\n          hardware: {\n            name: 'Analogue Nt Mini',\n            link: 'https://www.analogue.co/editions/nt-mini-noir',\n          },\n          software: {\n            name: 'Copy NES mini',\n            link: 'https://github.com/SmokeMonsterPacks/Nt-Mini-Noir-Jailbreak',\n            howToRun: 'Jailbreak the console',\n            howToRunLink: 'https://www.mountainouswords.com/mountain-air/dump-nes-roms-copynes-on-the-nt-mini-noir/',\n          },\n          nes: 'The Analogue Nt Mini can only copy saves from a cartridge, and cannot copy saves to a cartridge',\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 44,\n          gtmClass: 'copynes',\n          hardware: {\n            name: 'CopyNES',\n            link: 'https://www.retrousb.com/product_info.php?products_id=36',\n          },\n          nes: true,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 45,\n          gtmClass: 'pico-memcard',\n          hardware: {\n            name: 'PicoMemcard',\n            link: 'https://github.com/dangiu/PicoMemcard',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: false,\n        },\n        {\n          index: 46,\n          gtmClass: 'flashkit-programmer-md',\n          hardware: {\n            name: 'Flashkit programmer MD',\n            link: 'https://krikzz.com/our-products/accessories/flashkitmd.html',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: true,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 47,\n          gtmClass: 'gb-save-dumper-n64',\n          hardware: {\n            name: 'Everdrive 64 X3/X5/X7 + Transfer Pak',\n            link: 'https://krikzz.com/our-products/cartridges/',\n          },\n          software: {\n            name: 'GB Save Dumper N64',\n            link: 'https://github.com/ner01/gb-save-dumper-n64/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: 'It can only read save files from a cartridge and cannot write save files to a cartridge',\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 48,\n          gtmClass: 'dc-vm2',\n          hardware: {\n            name: 'Dreamcast VM2',\n            link: 'https://www.dreammods.net/store/p6/VM2.html',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 49,\n          gtmClass: 'brook-wingman-sd',\n          hardware: {\n            name: 'Brook Wingman SD',\n            link: 'https://www.brookaccessory.com/detail/34308510/',\n          },\n          software: {\n            name: 'Brook Dreamcast VMU Save/Load Tool',\n            link: 'https://www.brookaccessory.com/download/Dreamcast/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 50,\n          gtmClass: 'ps3-and-ps3-memory-card-adapter',\n          hardware: {\n            name: 'PlayStation 3 + PS3 USB Memory Card Adapter',\n            link: 'https://www.psdevwiki.com/ps3/Card_Adapter',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: true,\n        },\n        {\n          index: 51,\n          gtmClass: 'gamecube-wii',\n          hardware: {\n            name: 'Nintendo Wii',\n            link: 'https://en.wikipedia.org/wiki/Wii',\n          },\n          software: {\n            name: 'GameCube Memory Manager',\n            link: 'https://wiibrew.org/wiki/GameCube_Memory_Manager',\n            howToRun: 'Softmod your Wii',\n            howToRunLink: 'https://wii.guide/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: true,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 52,\n          gtmClass: 'mega-everdrive-pro',\n          hardware: {\n            name: 'Mega Everdrive Pro',\n            link: 'https://krikzz.com/our-products/cartridges/mega-everdrive-pro.html',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: true,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 53,\n          gtmClass: 'turbo-everdrive-pro',\n          hardware: {\n            name: 'Turbo Everdrive Pro',\n            link: 'https://krikzz.com/our-products/cartridges/turbo-everdrive-pro.html',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: true,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 54,\n          gtmClass: 'jrodrigo-gameboy-cart-flasher',\n          hardware: {\n            name: 'J. Rodrigo Gameboy Cart Flasher',\n            link: 'https://www.jrodrigo.net/es/project/gameboy-cart-flasher/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 55,\n          gtmClass: 'funnyplaying-burnmaster',\n          hardware: {\n            name: 'Funnyplaying Burnmaster',\n            link: 'https://funnyplaying.com/collections/product/products/portable-cart-flasher-burnmaster',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: true,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 56,\n          gtmClass: 'phoebe-rhea-ode',\n          hardware: {\n            name: 'Phoebe/Rhea ODE',\n            link: 'https://gdemu.wordpress.com/',\n          },\n          software: {\n            name: 'Pseudo Saturn Kai',\n            link: 'https://ppcenter.webou.net/pskai/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: true,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 57,\n          gtmClass: 'saroo',\n          hardware: {\n            name: 'Saroo',\n            link: 'https://www.segasaturnshiro.com/2024/04/04/i-bought-a-saroo/',\n          },\n          software: {\n            name: 'Official firmware',\n            link: 'https://github.com/tpunix/SAROO/releases',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: true,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 58,\n          gtmClass: 'memcard-pro-2',\n          hardware: {\n            name: 'Memcard Pro 2',\n            link: 'https://8bitmods.com/memcard-pro2-for-ps2-and-ps1-smoke-black/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: true,\n          ps2: true,\n        },\n        {\n          index: 59,\n          gtmClass: 'gb-save-manager',\n          hardware: {\n            name: '2 GB/C or GBA consoles + link cable + flash cart',\n            link: 'https://en.wikipedia.org/wiki/Game_Link_Cable',\n          },\n          software: {\n            name: 'Gameboy Save Manager',\n            link: 'https://github.com/Gronis/gb-save-manager',\n            howToRun: 'Use a flash cartridge',\n            howToRunLink: 'https://gbwiki.org/en/other/flashcarts',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: true,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 60,\n          gtmClass: 'sd-loader',\n          hardware: {\n            name: 'SDLoader',\n            link: 'https://www.retrorgb.com/new-sega-saturn-sdloader.html',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: true,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 61,\n          gtmClass: 'memcard-pro-gc',\n          hardware: {\n            name: 'Memcard Pro GC',\n            link: 'https://8bitmods.com/memcard-pro-gc-for-gamecube-smoke-black/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: true,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 62,\n          gtmClass: 'vmu-pro',\n          hardware: {\n            name: 'VMU Pro',\n            link: 'https://8bitmods.com/vmupro-handheld-visual-memory-card-for-dreamcast-classic-white/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 63,\n          gtmClass: 'vmu-disc-builder',\n          hardware: {\n            name: 'VMU Disc Builder',\n            link: 'https://github.com/DerekPascarella/VMU-Disc-Builder',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: 'VMU Disc Builder can only copy saves to a Dreamcast and cannot copy saves from a Dreamcast',\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 64,\n          gtmClass: 'dreamcast-sd-card-adapter',\n          hardware: {\n            name: 'DreamCast SD Card Adaptor',\n            link: 'https://kaicolabs.com/product/sega-dreamcast-dreamshell-serial-adaptor-and-disc/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 65,\n          gtmClass: 'usb-4-maple',\n          hardware: {\n            name: 'USB4MAPLE',\n            link: 'http://usb4maple.wikidot.com/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 66,\n          gtmClass: 'dc-drop',\n          hardware: {\n            name: 'Dreamcast modem or broadband adaptor',\n            link: 'https://en.wikipedia.org/wiki/Dreamcast_online_functionality#Hardware',\n          },\n          software: {\n            name: 'dcdrop',\n            link: 'https://github.com/allycatty/dcdrop',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: true,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 67,\n          gtmClass: 'analogue-pocket',\n          hardware: {\n            name: 'Analogue Pocket',\n            link: 'https://retrohandhelds.gg/how-to-backup-cartridge-saves-on-an-analogue-pocket/',\n          },\n          nes: false,\n          snes: false,\n          n64: false,\n          gcn: false,\n          gb: 'The Analogue Pocket can only copy saves from a cartridge, and cannot copy saves to a cartridge',\n          gba: 'The Analogue Pocket can only copy saves from a cartridge, and cannot copy saves to a cartridge',\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n        {\n          index: 68,\n          gtmClass: 'sn-operator',\n          hardware: {\n            name: 'SN Operator',\n            link: 'https://www.epilogue.co/product/sn-operator',\n          },\n          nes: false,\n          snes: true,\n          n64: false,\n          gcn: false,\n          gb: false,\n          gba: false,\n          lynx: false,\n          gamegear: false,\n          sms: false,\n          genesis: false,\n          segacd: false,\n          saturn: false,\n          dc: false,\n          tg16: false,\n          ps1: false,\n          ps2: false,\n        },\n      ],\n    };\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/OtherConverters.vue",
    "content": "<template>\n  <div>\n    <b-row>\n      <b-col>\n        <h2>\n          Other converters\n        </h2>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <div class=\"d-none d-md-block\">\n      <b-row align-h=\"center\">\n        <b-col cols=5 lg=5 xl=4>\n          <h5>Link</h5>\n        </b-col>\n        <b-col cols=5 lg=5 xl=4>\n          <h5>Notes</h5>\n        </b-col>\n      </b-row>\n    </div>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"http://www.save-editor.com/tools/\">http://www.save-editor.com/tools/</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        PS1/PS2/PSP/DS + various specific games\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://shunyweb.info/convert.php\">https://shunyweb.info/convert.php</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Nintendo DS save formats\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/ShendoXT/memcardrex\">MemcardRex</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Various PS1 formats. Requires{{'\\xa0'}}Windows/Mac. <b-link href=\"https://github.com/ShendoXT/memcardrex/releases\">Download{{'\\xa0'}}here</b-link>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Apollo Save Tool\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Manage saves directly on <b-link href=\"https://github.com/bucanero/apollo-psp/releases\">PSP</b-link>, <b-link href=\"https://github.com/bucanero/apollo-vita/releases\">PS Vita</b-link>, <b-link href=\"https://github.com/bucanero/apollo-ps3/releases\">PS3</b-link>, or <b-link href=\"https://github.com/bucanero/apollo-ps4/releases\">PS4</b-link>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://segaxtreme.net/resources/saturn-save-converter.74/\">Sega Saturn save converter</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Various Saturn formats. Requires{{'\\xa0'}}Windows. <b-link href=\"https://segaxtreme.net/resources/saturn-save-converter.74/download\">Download{{'\\xa0'}}here</b-link>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/bucanero/saturn-save-tools\">Saturn save tools</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Various Saturn formats. Requires{{'\\xa0'}}Windows/Mac/Linux. <b-link href=\"https://github.com/bucanero/saturn-save-tools/releases\">Download{{'\\xa0'}}here</b-link>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://bryc.github.io/mempak/\">MPKEdit</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        N64 DexDrive and .MPK files\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://sav2vc.fm1337.com/\">https://sav2vc.fm1337.com/</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Pokémon Gold/Silver/Crystal save to 3DS Virtual Console\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/libertyernie/goombasav\">Goomba save manager</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        GB/GBC games on various GBA flash carts. Requires{{'\\xa0'}}Windows. <b-link href=\"https://github.com/libertyernie/goombasav/releases\">Download{{'\\xa0'}}here</b-link>\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://thysbelon.github.io/gbaconv-web/\">gbaconv-web</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Convert saves between formats used by different versions of Visual Boy Advance\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://drehren.github.io/ramp64-convert-web/\">RetroArch N64 Save Converter</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Convert to/from Retroarch N64 saves\n      </b-col>\n    </b-row>\n    <div class=\"blank-line\"/>\n    <b-row align-h=\"center\">\n      <b-col cols=12 md=5 lg=5 xl=4>\n        <b-link href=\"https://github.com/bucanero/ps2vmc-tool\">PS2 VMC Tool</b-link>\n      </b-col>\n      <b-col cols=12 md=5 lg=5 xl=4>\n        Manage PS2 emulator memory card images. Requires{{'\\xa0'}}Windows/Mac/Linux. <b-link href=\"https://github.com/bucanero/ps2vmc-tool/releases\">Download{{'\\xa0'}}here</b-link>\n      </b-col>\n    </b-row>\n  </div>\n</template>\n\n<style scoped>\n.blank-line {\n  min-height: 1em;\n}\n</style>\n\n<script>\n\nexport default {\n  name: 'OtherConvertersView',\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Ps1DexDrive.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertPs1DexDrive/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertPs1DexDrive from '@/components/ConvertPs1DexDrive.vue';\n\nexport default {\n  name: 'Ps1DexDriveView',\n  components: {\n    ConvertPs1DexDrive,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Ps1Emulator.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertPs1Emulator/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertPs1Emulator from '@/components/ConvertPs1Emulator.vue';\n\nexport default {\n  name: 'Ps1EmulatorView',\n  components: {\n    ConvertPs1Emulator,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Ps1Ps3.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertPs1Ps3/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertPs1Ps3 from '@/components/ConvertPs1Ps3.vue';\n\nexport default {\n  name: 'Ps1Ps3View',\n  components: {\n    ConvertPs1Ps3,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Ps1Psp.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertPs1Psp/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertPs1Psp from '@/components/ConvertPs1Psp.vue';\n\nexport default {\n  name: 'Ps1PspView',\n  components: {\n    ConvertPs1Psp,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/PspDecrypt.vue",
    "content": "<template>\n  <div class=\"home\">\n    <DecryptPsp/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport DecryptPsp from '@/components/DecryptPsp.vue';\n\nexport default {\n  name: 'PspDecryptView',\n  components: {\n    DecryptPsp,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Retron5.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertRetron5/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertRetron5 from '@/components/ConvertRetron5.vue';\n\nexport default {\n  name: 'Retron5View',\n  components: {\n    ConvertRetron5,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Retron5EraseSaveView.vue",
    "content": "<template>\n  <div class=\"home\">\n    <Retron5EraseSave/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport Retron5EraseSave from '@/components/Retron5EraseSave.vue';\n\nexport default {\n  name: 'Retron5EraseSaveView',\n  components: {\n    Retron5EraseSave,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/SegaCd.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertSegaCd/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertSegaCd from '@/components/ConvertSegaCd.vue';\n\nexport default {\n  name: 'SegaCdView',\n  components: {\n    ConvertSegaCd,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/SegaSaturnEmulator.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertSegaSaturnEmulator/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertSegaSaturnEmulator from '@/components/ConvertSegaSaturnEmulator.vue';\n\nexport default {\n  name: 'SegaSaturnEmulatorView',\n  components: {\n    ConvertSegaSaturnEmulator,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/SegaSaturnSaroo.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertSegaSaturnSaroo/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertSegaSaturnSaroo from '@/components/ConvertSegaSaturnSaroo.vue';\n\nexport default {\n  name: 'SegaSaturnSarooView',\n  components: {\n    ConvertSegaSaturnSaroo,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/SrmSav.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertSrmSav/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertSrmSav from '@/components/ConvertSrmSav.vue';\n\nexport default {\n  name: 'SrmSavView',\n  components: {\n    ConvertSrmSav,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Troubleshooting.vue",
    "content": "<template>\n  <div class=\"home\">\n    <TroubleshootingUtils/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport TroubleshootingUtils from '@/components/TroubleshootingUtils.vue';\n\nexport default {\n  name: 'TroubleshootingView',\n  components: {\n    TroubleshootingUtils,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/src/views/Wii.vue",
    "content": "<template>\n  <div class=\"home\">\n    <ConvertWii/>\n  </div>\n</template>\n\n<script>\n// @ is an alias to /src\nimport ConvertWii from '@/components/ConvertWii.vue';\n\nexport default {\n  name: 'WiiView',\n  components: {\n    ConvertWii,\n  },\n};\n</script>\n"
  },
  {
    "path": "frontend/tests/config.js",
    "content": "const defaultConfig = {\n  testPspIsos: true,\n  testPspRetailIsos: false, // We don't have these committed to the repo for obvious reasons, so we don't want the continuous deployment tests to test for them\n  testFlashCartRetailGames: false, // These are also not committed to the repo for obvious reasons\n};\n\nexport default class Config {\n  static Create() {\n    try {\n      const localOverrides = require('./config.local.js'); // eslint-disable-line global-require, import/no-unresolved, import/extensions\n\n      return new Config({\n        ...defaultConfig,\n        ...localOverrides.default,\n      });\n    } catch {\n      // Fall though\n    }\n\n    return new Config(defaultConfig);\n  }\n\n  constructor(configData) {\n    this.configData = configData;\n  }\n\n  get() {\n    return this.configData;\n  }\n}\n"
  },
  {
    "path": "frontend/tests/config.local.js.example",
    "content": "export default {\n  testPspIsos: true,\n  testPspRetailIsos: false,\n  testFlashCartRetailGames: true,\n};\n"
  },
  {
    "path": "frontend/tests/data/rom-formats/psp/encrypted-executable-alternative-boot - EBOOT.DNR",
    "content": "~PSPThis is a test encrypted executable in an alternative boot location with magic0"
  },
  {
    "path": "frontend/tests/data/rom-formats/psp/encrypted-executable-other-alternative-boot - GBL",
    "content": "~PSPThis is a test encrypted executable in an other alternative boot location with magic0"
  },
  {
    "path": "frontend/tests/data/save-formats/flashcarts/n64/neon64emulator/Zelda II - The Adventure of Link (USA)-neon.srm",
    "content": "yx;JV&\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Z\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Z\u0000Z\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 j\u000b \u0001 Z \u0001   \u0006 \u0007!\u0010\u000b!p\u000b!\u000b\"F\u0012!)\u0003!\u0003!\u0003\"\u0010\"\u0001\"Z\"\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0003Ey9"
  },
  {
    "path": "frontend/tests/data/save-formats/flashcarts/n64/neon64emulator/Zelda II - The Adventure of Link-cart-to-neon.srm",
    "content": "yx;JV&\u0007\b\b\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0003\u0004\u0005\u0006\u0004\u0000\u0000\u0016\u0004\u0012\u0001H\u00059N\u0000\t\u0001\b\b\b\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b\b\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0003\u0004\u0005\u0006\u0004\u0000\u0000\u0014\u0000\u0010\u0000\b\u0000\u0000\b\u0000\u0007\u0002\u0001\b\b\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0003\u0004\u0005\u0006\u0004\u0000\u0000\u0014\u0000\u0010\tH%)\u0000\r\u0000߿99{iyouͼz\u001c_ܝy՛^){uͼ[<ܝ{_9x){youͼ[\u001c_ܝ{_BBBBBBBBBBRBBRBBBBBBBBBBSSSSSSBBBBBBRRRRSSSSSSRB~!\u0010?\u0010\u0004\u0012\u000f\u000f\u000f ʃ\u0003\u0000\u0001\u0002\u0000\n\n\n\n\n\u0003\u0000\u0001\u0002\u0000\u0001\u0002\u0003\u0000\u0002\u000b\u000b\u000b\u000b\u000b\u0006\u0006\u0006\u0006\u0006\u0000\u0001\u0002\u0003\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0001\u0002\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0012\u0016*\u0016\u000f\u000f0\u00011\u0001\u0018\u0001\u0012!0!6!0\u00011\u0001*\u00114 *<V@M9G\\).:>>E>`fRWaa@CWLMNMD\u0000f\u0000\u0000\u0000\u0000\u0000\u0000\u0000ض\u0000ˠ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0017\u001d%\u0010\u0014>\u0015=\b00w\u0001C&\t62{\u0010\u001a\u001ab\u0007\u0011!\u0014\u0011\u0013\u0017%\u0000&\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000=\n\u00152n\u0000B\bH\u0015|>\u000b9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000k-nflFsx\u0007\t\f\u000e\u0010\u0012\u0001\u0002\u0004TUVWW9\u0000\u0000\u0000\u0000\u0000\u0000\u0000()*+<\u0000\u0006\u0018\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@@@@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0001\u0001\u0004\u0004\u0004\u0004\u0004\u0004\u0004\u0004\f\f\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0014\u0013\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000('\u0000\u0000,+\u0000\u0000\u0000\u000043\u0000\u0000\u0000\u0000<;\u0000\u0000\u0000\u0000DC\u0000\u0000\u0000\u0000LK\u0000\u0000\u0010\u0011\u0002\u0003\u0004\u0003\u0002\u0003\u0018|v}~}\u0000\u0001\u0002\u0003\u0002\u001e\u0007\u0018\u0007\u0013\n\u000e\u000f\u0000\u000b\u000e\u0010`9GZ4>d9\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000AIB\u0000\u0000\u0000\u0000\u0000\u0003\u0003\u0003\b\u0003\u0000\u0000\b\u0002\u0002\u0003\u0004\u0003\u0003\u0004\u0004\u0000\u0004\f\u0012\u0012\u0018\f\u000e\u0012\u0004\u0003\u0003\u0004\b\u0000\u0002\u0000 NN%%N11111111NlN\u0000\u0000\u001eYّG\f+SۘS\u0015O֏B؈rrr\u0015\u0015rrrØ1~/O\u0000\u0000@@@\u0010\u0010\u0002@DHE\u0000QÃ\u0000P\u0002000A@@B@11B00@@1AAA0AAAaa@0\u0000AQ0@\u0000\u000f\u000f\u0004\u0002\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0003\u0001\u0001\u0001\u0001\u0000\u0005FFF\u0006@\u0006@\u0006\u0006\u0006\u0006\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0006\u0006\u0000\u0000\u0000\u0000\u0012:~~\u0000\u0000\u0000\u0000''𭕹G卵eiooo񝭕\fC\u0000\u0000`\u0000\r\u0000\u0000\u0002\u0001\u0002\u0001\u0003\u0001\u0001\u0000\u0000\u0000\u0000Y{mm\u0001\u0003\u0005\u0007\u0001\u0003\u000b\u0005\t\u000f\u0011\u0017\u0019%'\u000f\u0011\u0013\u0015%'\u001b\u001d\u001f!%'\u001b#\u001f!%'\u001b#\u001f!%'\u0011`*\u0005\u0018i`\u0005`֯` \u0000\u0005\u0005\u0005L\u0004L\u0004L\u0004)\u0010\u0002wL L9\u0001\u0004 떥\u0012J\u0014\u00050\b\tބ\u0005ބ\u0005\u0005L\u00040/*X\u0004b\u0005R\u0004w\u0018y_w\u0002\u00000\u0001\u0001\u0001\u0003z\\\u0001\u000bo\u0011rQuQzQv\u0001\u000by\u001cu\\\\{}\u0001\u0007\t\u0007\r\u0007\bJ\u0001\rz\u001fp_r_zY|p\u0001\t}\u0003pxz\u0001\tv\\{\\\\q\u0001\u0007\fG\u000eG\u0002\u0001\tw\u001aMQb\u0002\u0001\r\u000f\u001d{\u0011~\u0011sw\u000f\u0001\u0003t\u0001\u0005\u000f\u0001\r\u000f\u000b\\\u001c^\\]P\u000f\u0001\u0007 U$6\u0001\u0007\u000f\u000b,X\u0000\u0001\u0005\u000b\u0001\u000b|\u0004~\u0004[\u001bps\u0001\u0005\fp\u000f\u000e\fv\u00048 <`6xp\u000b|\u0004~\u0005qty\u000b\u000f!r\u0005pEr\u0000\u000b\u000f!\u0014\r\u0013M\u0017\u0000\t{\u0014\u0015v\u001c\u000f\f: > \u001a`18p\tg\u001cZ\u001bVj\t~\u0004p_~Dq\u0007v\u001f`YoY\u0011r\u0006H\u0006~\u0006`F-FoFI^\r5\u0006y\u0018m\u0006_FE:\u000bt\u0012w\u0011\u0011s{\u000f\u000f\u001dx\u0011qQsw}\u0000\u000bw\u0015\u001b\u000e\u001dM\u0017y\r\u000f\u001du\u0016\u0017\u000e\u0015y\u0000\u000f{\u001f~\u001f`_b`b\u0001\r\u000f\u000fV\\^\\X[\u0000\u0001\u0005H@H\u0001\u000by\u001f~\u001f~_qx\u0001\u000by\u001f~\u001fp_qx\u0001\u000by\u001f~\u001f~_qx\u0001\u000by\u001f~\u001fp_qx\u0001\u0007o\u0017ae\rV\\Z\\^\\nad\u000fh\u001fj\u001fn\u001ffocj\u0005v\u0001v\u0001\u0003v\u0001\u0001\u00119\u001f;\u001f=\u001fD_\\_d|~\u000fj\u0004\\\u0004}UoDvlt\u000fl\u0011N\u0011 Qp/Ac\u000f\r\u0007\u0003G\nJ{\\\u0001t\u0005\u000b{\u0012cR[RC=\u0005\u000f\u000f\u0000\u000fz_}__p\u0000\u0003u\r`QcQfQilo\t-\u0016KRV<\tv\\yZ|\\p\u0005\u000f\u000f\u0000\r\t\u0007k\u0004\u000e\u0007aD\u0004Gu\u000b%D9A-Dq+\r`QcQfQilo\r\b\u0007\u000e\u0007\\\u0017\u0002G\u0006\u000f:\u0005EENWd~cu\u000fv\u0001~\u0004SWfDB)%\u000f\u0011sQuQy|~q\u000bvX\u0007y}\b\u0005vW\u000fx_y_{_s}r\tm\u0003PXvC{\u0003P\t2Q<QG-\u000bn\u0014`RFN!\tWX@:$\u000fn\u0014QTXTA8<#\u000bj\u0018hXlXfc\tj\u0014`db\u0005\u0006W\u0001\u000b:\u0004hXjXH`\r\u001d\u0011/\u0014PX:M\tj\u0018dhi\u0003x\u000bw\u0015\u001b\u000e\u001dM\u0017y\r\u000f\u001du\u0016\u0017\u000e\u0015y\u0000\u000f\f: > \u001a`18p\tg\u001cZ\u001bVj\u0011r\u0006H\u0006~\u0006`F-FoFI^\r5\u0006y\u0018m\u0006_FE:\u0018`\u0000\u0014\t2\n(\t\u0006\nH\t\u0018\t2\n(\t\u0006\nH\t\u0014H`\u0006\u0004\u0002\b\u0006\n\u0004\u0002\u0014H`\b\u0006\u0006\u0002\b\u0006\n\n\u001aH`\u0014\t2\n(\t\u0006\nH\t\u0004\u0014\t2\n(\t\u0006\nH\t\u0012\u000eH\t\u0000\u000fZ\u0000\u0007\b\b\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0003\u0004\u0005\u0006\u0004\u0000\u0000\u0016\u0004\u0012\u0001H\u00059N\u0000\t\u0001\b\b\b\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b\b\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0003\u0004\u0005\u0006\u0004\u0000\u0000\u0014\u0000\u0010\u0000\b\u0000\u0000\b\u0000\u0007\u0002\u0001\b\b\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\b\b\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0003\u0004\u0005\u0006\u0004\u0000\u0000\u0014\u0000\u0010\tH%)\u0000\r\u0000Z\u0000߿99{iyouͼz\u001c_ܝy՛^){uͼ[<ܝ{_9x){youͼ[\u001c_ܝ{_Z\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000̖̹\u0000\u000f0\u0012\u0016\u000f6\u0016\u0007\u000f\u0000\u00100\u000f#\u0003\u000f\u000f0\u0012\u0016\u000f7'\u0006\u000f'\u0016\u000f\u000f0\u0010\u0000\"0\u0012\u0016\")\u0017\t\"06'\"0\u0010\u0000!0\u0012\u0016!0\u0000\u000f!)\u0019\t!0\u0010\u0000\u000f0\u0012\u0016\u000f\u0017\u0007\b\u000f)\u0019\t\u000f0\u0010\u0000!0\u0012\u0016!7\u0018\u000f!)\u001c\f!0\u0010\u0000\u00030\u0012\u0016\u0003\u0019\t\u000f\u0003'\u0016\u000f\u00030\u0000\u000f!0\u0012\u0016!7\u0018\u000f!0\u0011\u0001!0\u0010\u0000\u000f0\u0012\u0016\u000f\u0012\u0001\u000f\u000f\u000f\u000f\u000f\u000f\u000f\u000f\u000f\u00186*\u0016'0\u000f\u00160\u000f,0\u00186*\u0016'0\u0007\u00160\f,0\u00186*\u0016'0\u000f\u001c,\u000f\u0015%\u00186*\u0016'0\u000f*0\u000f\u0016&\u0001!\u0011\u0016'0\u000f\u000f\u000f\u000f\u000f\u000f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000t\u0014˼$+D|4lD\u000b\u0001\u000bTL4\u0002\u0004+\u001c\u0004<T+t,dY4\ft\u0019\u0000)Dĉ{d|\f[tl\fY\u001b$L\u0004\f\t{YTU\u0014<\u0014\f\t{\u0006\u0019$\u001cK\u0001\u001b\f\t{\u0016\u0019\u0004e\u0006%t\u001c\t{&\u0015D\u001c\tV9\u000b$\u001c\tI6\u0014\u001c\t)%)6+\u0001;\u0004,\t5f\u0019e\u0019f;\u0004,\tU6,\u0019\tVK\u0004,\tu\\\u001956\u0015\tVK\u0004,\u0019ue\u0019%V\u0015\tF[\u0004,\u000b\u0019[<)<E\u0019%V\u0015\u00196[\u0014,\u000b)[u<\t\u0002%f\u0015\t6k\u0014,9{U<)<V%\t&\t,9Euf\u0015\u0000\t\u0016\t,9Uuv%\t\t,9U<%uF[\u0005\t\u0019\u001c9\u0015;U\u0016\u000e\t\u001c\u000b\u0001e%\t\u0015\u0019\f5\u0015\tE\t\f\u00015\tU{\u0019U\tU\t+\u0001'\u001b\u0001\u001bU\tE\u000e\u0001{\t\u001b5;\tUk&\u000bU\u0006\u001b\u0007\u0002g\u0019\u0017˥\tUk\u0006\u0005\u00065G\u001b7\t{\u0019E{&\u0015gK)\u0015\tU\u0015Wg[G\tE\u0005g{7\u0019w\t5\u0005g\u000b\u0001k\t\u0015\u0005w\u000e\u0007K\t\u000b\u0005\u001bK\t$\f\u0015ۗk\tD\f%\u0015k\tT\u001c5Ek\u0016k\u0019kt\u001c%5\u0015gk\tK\u0000,\u0015wU5W[\u0019+,\u00157UG+I\u000e\u0003\u001c,\u0017\u0019[,\u001b\u001c\u0016i&\u001c+\u001c\u0019E{\u001c;,\u0019U{\u0004\f[\u0003\fe{\u0014k\u0005u\t<E{\u0019Tk5Y%<\u0015k\u0019T{\u0015\u0019,k\u0019T\u0019\u00065\u001c6DK)4\u001c{\u0019\u0003T\u0006\u0004K\u0019h)X$,{\t|$;\u0004\tx\t\b\tX$,|\u0000\f+\u0014\tx)X\u0014<kD\t\b\u0004L{\u00009<+4\t\b\\{y;44\tl{y+T4\t|YKD4\t،\u00014$\u0019,$,K\u00014$\u0019\u0004,D\u001ck$9\u0014,\u0014+\u0014\fT<\u0004\u0002+$T\\\u0004K\u0014Dxl\u0004K\u0014 j\u000b \u0001 Z \u0001   \u0006 \u0007!\u0010\u000b!p\u000b!\u000b\"F\u0012!)\u0003!\u0003!\u0003\"\u0010\"\u0001\"Z\"\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0003Ey9"
  },
  {
    "path": "frontend/tests/data/save-formats/gba/gameshark-sp/final-fantasy-tactics-advance.22864.srm",
    "content": "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0003*\u0000\u0002\u0000/\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0003\u000e\u0000\u0003\u000b\u0005\u0001\u0010\u0000\b\u0003\u0002\u0017\u0004\u0003\u0000\u0000\u0000\u0010\u0000v\u0017\u0000\u0000\r\u0003\u000b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000#\u0000,\u0000\u0002\u0005\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u0000P\u0000\u0006\u0000`\u0000\u0006@D\u0000\u0002lE\u0000\u0002\u0003\u0002\u0019\u0006\u0000\b \u000b\r\u0000\u0003\u0000\u0003\u0002\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0006\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0006\u0003@\u0000\u0002ƀۀҀ݀@s؀߀΀@s؀Հ@s܀ʀ߀@s̀ʀ݀ʀ@n@S\u0011Ȁ΀܀\u0000?\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000w\n\u0000\u0000\u0000\u0000g\u0000\u0000a\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0000\u0001\u0000\u0001B\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u001e\u001e\u001e\u001e\u0000\u0013\u0000\u0000\u0000\u0000\u0000\u0000\f)\u0018\u0014\u000e\u000f\u001c!.\u0004\u0010\u0002)\u0014\u0019-(\u0018$\u0019\u0007\u0005\u001bO\u0002\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000d)\u0000\u0002\r\u0001\u0000\u0000(#\u0000\u0000m\u0000\t\u0000\u0002\u0003\u0000\u0000\u0000\u000b\u0000v\u0013\\3\u0015\u0002\b~/fPG\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000E\u0005oKDZ\u0001\u0000\u0000\u0000\u0000\u0003\u0007\u0000\u0000\u0000\u0000G\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ހ݀܀\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u001eD\nA\u0014T\u0014C(B\u001eJ\nF<EZ\u0005\u0000o\u0000\u0004\u0011\u0000\u0000\u0000\u0001\u0000\u0000_\u0000\u0000\u0000o\u0001\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\f\u0013\u0000\u0000\u001b\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\b\u0004\u0016\u0000\u00003\u0001\u0001\u0000\u0000\u0000\u0000\u0000\b\f\t\u0000\u0000w\u0000\u0001\u0000A\u0000\u0000\u0000\f\u0004\u0012\u0000\u0000.\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000,\u0000\u0004\u000e\u0000\u0000\u0000\u0000Q\u0000\u0016\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0004#\u0000\u0000{\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000<\u0004\u0019\u0000\u0000q\u0000\u0001^\u0000w\u0000\u0000\u0000p\u0005\b\u0000\u0000i\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\f\u000e\u0000\u0000\u0000y\u0001\u0006\u0000B\u0000\u0000\u0000\u0004\f\t\u0000\u0000\u0000\u0001\u0000X\u0000\u0000\u0000(\f\t\u0000\u0000\u0000\u0001\u0000\u0000^\u0000\u0000\u0000q\u0005\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000<\u0000\f\u000e\u0000\u0000\u000e\u0001\u0001X\u0001g\u0000\u0000\u0000\b\u0004\t\u0000\u0000+\u0001\u0001)\u0001)\u0000\u0000\u0000\u0004\u0004\u000e\u0000\u0000\u001b\u0001x\u00017\u0001e\u0000\u0000\u0000(\u0004\t\u0000\u0000G\u0000\u0001\u0000\u0000\u0000\u0000(\u0004\t\u0000\u0000\u0004\u0001\u0001\u0006\u0000\u0000\u0000\u0000<\f\t\u0000\u0000\u0000\u0001&\u0001\u000e\u0000\u0000\u0000(\f\t\u0000\u0000\u0000\u0001#\u0000\u0019\u0000\u0000\u0000\u0017\u0005\f\t\u0000\u0000i\u0000\n\u0000]\u0000\u0000\u0000\u0000\u0000\u0004\u0004\t\u0000\u0000\u0016\u0001\u0001'\u0001'\u0000\u0000\u0000(\u0004\t\u0000\u0000\u0000\u0001\u0000\u0000a\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000m\u0001\b\u0000\u0000X\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000u\t\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\t\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000t\t\b\u0000\u0000\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000F\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000r\u0005\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000n\u0001\b\u0000\u0000g\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0000\u0002&\u0000\u0002\u0004&\u0000\u0002!\u0000\u0002T'\u0000\u0002@&\u0000\u0002!\u0000\u0002'\u0000\u0002%\u0000\u0002!\u0000\u0002\u0004&\u0000\u00024&\u0000\u0002\b\"\u0000\u0002%\u0000\u0002L&\u0000\u0002\u0018\"\u0000\u0002%\u0000\u0002%\u0000\u0002(\"\u0000\u0002\u0000\u0000\u0000\u0000|&\u0000\u00028\"\u0000\u0002(&\u0000\u0002\u0000\u0000\u0000\u0000H\"\u0000\u0002&\u0000\u0002\u001c&\u0000\u0002X\"\u0000\u0002%\u0000\u0002&\u0000\u0002h\"\u0000\u0002%\u0000\u0002p&\u0000\u0002x\"\u0000\u0002%\u0000\u0002X&\u0000\u0002\"\u0000\u0002L&\u0000\u0002d&\u0000\u0002\"\u0000\u0002X&\u0000\u0002&\u0000\u0002\"\u0000\u0002@&\u0000\u0002\f'\u0000\u0002\"\u0000\u0002\u0010&\u0000\u0002'\u0000\u0002\"\u0000\u00024&\u0000\u0002&\u0000\u0002\"\u0000\u0002&\u0000\u0002&\u0000\u0002\"\u0000\u0002&\u0000\u0002&\u0000\u0002\"\u0000\u0002&\u0000\u0002&\u0000\u0002\b#\u0000\u0002d&\u0000\u0002&\u0000\u0002\u0018#\u0000\u0002&\u0000\u0002&\u0000\u0002(#\u0000\u0002&\u0000\u0002%\u0000\u00028#\u0000\u0002&\u0000\u0002&\u0000\u0002H#\u0000\u0002&\u0000\u0002(&\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002\u0018'\u0000\u0002\u0000\u0000\u0000\u0000L&\u0000\u0002%\u0000\u0002x#\u0000\u0002p&\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002$'\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002<'\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000d&\u0000\u0002`'\u0000\u0002#\u0000\u0002'\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000d&\u0000\u0002l'\u0000\u0002\u0000\u0000\u0000\u0000d&\u0000\u0002x'\u0000\u0002\u0000\u0000\u0000\u0000d&\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002d&\u0000\u0002($\u0000\u0002(\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000H'\u0000\u0002'\u0000\u0002H$\u0000\u0002'\u0000\u0002\b(\u0000\u0002\u0000\u0000\u0000\u0000H'\u0000\u00024&\u0000\u0002h$\u0000\u0002\f'\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000<'\u0000\u00024&\u0000\u0002$\u0000\u0002|&\u0000\u0002T'\u0000\u0002\u0000\u0000\u0000\u0000<'\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000<'\u0000\u0002d&\u0000\u0002\u0000\u0000\u0000\u0000%\u0000\u0002&\u0000\u0002$\u0000\u0002'\u0000\u0002(\u0000\u0002\u0000\u0000\u0000\u0000l'\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000'\u0000\u0002L&\u0000\u0002\u0000\u0000\u0000\u0000'\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000'\u0000\u00024&\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002&\u0000\u0002\u0000\u0000\u0000\u0000'\u0000\u0002&\u0000\u0002\u0000\u0000\u0000\u0000\u0000'\u0000\u0002h(\u0000\u0002\u0000\u0000\u0000\u0000\u0000'\u0000\u0002t(\u0000\u0002\u0000\u0000\u0000\u0000\u0000'\u0000\u0002(\u0000\u0002\u0000\u0000\u0000\u0000\u0000'\u0000\u0002d&\u0000\u0002\u0000\u0000\u0000\u0000%\u0000\u0002(\u0000\u0002\u0000\u0000\u0000\u0000 (\u0000\u0002(\u0000\u0002%\u0000\u0002\b(\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000 (\u0000\u0002&\u0000\u0002\u0000\u0000\u0000\u0000%\u0000\u0002d&\u0000\u0002\u0010&\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000΀@sǀ\u0000\u0000\u0000\u0000B\u000f\u0001\u0000\u0000\u0000\u0001\u0000ʀЀ׀ʀۀ؀\u0000\u0000\u0000\u0000&\u0010\u0001\u0000\u0002\u0000X\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\u0000\u0000\u0000:\u0000\u0000\u0000x\u0000\u0000\u0000\u0015\u0000\u0000\u0000@\u0000\u0000\u0000Q\u0000\u0000\u0000;\u0000\u0000\u0000\u0014\u0000\u0000\u0000[\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u001b\u0000\u0000\u00000\u0000\u0000\u0000d\u0000\u0000\u0000O\u0000\u0000\u0000.\u0000\u0000\u0000\u0006\u0000\u0000\u0000:\u0000\u0000\u0000{\u0000\u0000\u0000T\u0000\u0000\u0000e\u0000\u0000\u0000\u0017\u0000\u0000\u00004\u0000\u0000\u0000A\u0000\u0000\u0000\f\u0000\u0000\u0000P\u0000\u0000\u0000\u0016\u0000\u0000\u0000\n\u0000\u0000\u0000v\u0000\u0000\u0000|\u0000\u0000\u00003\u0000\u0000\u0000\u0000\u0000\u0000i\u0000\u0000\u0000z\u0000\u0000\u0000<\u0000\u0000\u0000\t\u0000\u0000\u0000=\u0000\u0000\u0000G\u0000\u0000\u0000-\u0000\u0000\u0000>\u0000\u0000\u0000\u001e\u0000\u0000\u0000\u0002\u0000\u0000\u0000b\u0000\u0000\u0000\u0001\u0000\u0000\u0000H\u0000\u0000\u0000$\u0000\u0000\u0000`\u0000\u0000\u0000C\u0000\u0000\u0000v\u0000\u0000\u0000,\u0000\u0000\u0000\u001a\u0000\u0000\u0000\u0005\u0000\u0000\u0000.\u0000\u0000\u0000-\u0000\u0000\u0000\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000p\u0000\u0000p1w\u0000w\u0000\u0001\u0000\u0000\u0003\\\u0000\u0000\u0000\u0000\u001a\u0003\u001a\u0003\u0000\u0000\u0000\u00008\"\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0003\u0002\u0000\u0010\u0013\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u0000\u0000\u001a\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001c\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001a\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0016\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001d\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u000f\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0018\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0017\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0019\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0015\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0013\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000|\u0000\u0004\u0000\u001dy\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001a\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\t\u0001\b\u0002\u0000\u0000x'\u0003v\u0002&\u000e\u0002\u0011&Vm\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0001\u001b\u0000di\u0004\u0016\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0001\u001c\u0000LDR\u0015e&\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000j\u0002\u0000\u0000\u0001\u001c\u0000%#!r,\u0002\u0000\u0000\u0001\u001d\u0000\u0000MQ\u0016d'\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0001\u001b\u0000dĄ\u0016T+\u0000\u0000\u0003\u0007:\u0000'1\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e4\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000A\u0001A\u0001G\u0001\u0000W\u0001\u0000\u0000\u0000\u0000\u0002\u0001;\u0001V\u0001d\u0001\u000b?\u0001\u0000\u0000\u0000\u0005\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0002\u0000\u0000\u0000\u0004\n\u0002\b\b\b\u0001\u0001\u0002\u0000\u0000\u0000\u0000\u0000\u0001|\u0000\u0000\u0000\u0001\u0018\u0003\u0018\u0000\u0019\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000=\u0001G\u0001\u0000\u0000\u0015\u00011\u0001\u0000d\u0001f\u0001_\u0013\u0000\u0001\u0000\u0000\u00005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000z\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\b\u0001\u0000\u0000\n\u0001\u0002\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000^s\u0017s\u0000 7\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000i\u0001i\u0001<\u0000<\u0000]\u0001\u0001\u000b\u0001a\u0001\u0000\u0000.\u0000%\u0001\r\u0001\u0000_\u0001\tG\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0001\u0001\u0007\u0006\u0007\u0001\u0001\u0002\u0000\u0000\u0000\u0000\u0000\u0001,\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000 \u0001\u0003\u0000\u0000\u0003\u0000\u0002\u0000\u0001\u0000!\u0001\u0001\u0000\"\u0001\u0004\u0000\u0003\u0000\u0002\u0000#\u0001\u0001\u0000\u0004\u0000\u0001\u0000\u0005\u0000\u0001\u0000\u0006\u0000\u0002\u0000\u0007\u0000\u0001\u0000\b\u0000\u0005\u0000S\u0001\u0004\u0001T\u0001\u0007\u0003\t\u0001\u0001\u0000$\u0001\u0002\u0001\t\u0000\u0001\u0000\n\u0000\u0002\u0000\n\u0001\u0001\u0000%\u0001\t\u0001\u000b\u0000\u0001\u0000\f\u0000\u0001\u0001U\u0001\u0001\u0001\r\u0000\u0001\u0000\u000e\u0000\u0002\u0000\u000f\u0000\u0002\u0000\u0010\u0000\u0001\u0000\u0011\u0000\u0003\u0000\u0012\u0000\u0004\u0001\u0000\u0002\u0000\u0000\u0002\u0002\u0000\u0001\u0007\u0000\u0013\u0000\u0002\u0000\u0014\u0000\u0001\u0000\u0015\u0000\u0002\u0000\u0016\u0000\u0003\u0000\u000b\u0001\u0001\u0001\u0017\u0000\u0003\u0000\u0018\u0000\u0002\u0000(\u0001\u0002\u0000\u0019\u0000\u0001\u0000\u001a\u0000\u0001\u0000\u001c\u0000\u0001\u0000\u001d\u0000\u0001\u0000\u001e\u0000\u0001\u0000\u001f\u0000\u0001\u0000 \u0000\u0001\u0000!\u0000\u0001\u0000\"\u0000\u0001\u0000#\u0000\u0003\u0000$\u0000\u0001\u0000V\u0001\u0004\u0001W\u0001\u0006\u0002'\u0000\u0001\u0000\f\u0001\u0001\u0000)\u0001\u0003\u0000(\u0000\u0003\u0000+\u0001\u0007\u0000)\u0000\u0002\u0000*\u0000\u0001\u0000+\u0000\u0002\u0001,\u0000\u0005\u0000,\u0001\u0001\u0001-\u0000\u0002\u0000.\u0000\u0003\u0001/\u0000\u0001\u0000\r\u0001\u0003\u00021\u0000\u0001\u0001\u000f\u0001\u0001\u00002\u0000\u0001\u00013\u0000\u0001\u00004\u0000\u0003\u00005\u0000\b\u0000X\u0001\u0002\u00016\u0000\u0003\u00007\u0000\u0002\u0000-\u0001\u0001\u0001.\u0001\u0001\u00008\u0000\u0001\u0000:\u0000\u0001\u0000;\u0000\u0001\u0000=\u0000\u0001\u0000>\u0000\u0001\u0000\u0001\u0001\u0003\u0000?\u0000\u0005\u0000@\u0000\u0003\u0000\u0010\u0001\u0001\u0000A\u0000\u0002\u0000B\u0000\u0001\u0000\u0011\u0001\u0001\u0001\u0012\u0001\u0001\u0000\u0013\u0001\u0001\u0000/\u0001\u0002\u00000\u0001\u0004\u00001\u0001\u0001\u00012\u0001\u0002\u00003\u0001\u0002\u00004\u0001\u0001\u00015\u0001\u0003\u00026\u0001\u0003\u00017\u0001\u0002\u00008\u0001\u0004\u0000C\u0000\u0001\u0000D\u0000\u0001\u0000E\u0000\u0001\u0000F\u0000\u0001\u0000G\u0000\u0001\u0000\u0002\u0001\u0004\u0001H\u0000\u0001\u0000I\u0000\u0001\u0000J\u0000\u0001\u0000K\u0000\u0002\u0000L\u0000\u0004\u0000M\u0000\u0003\u0000N\u0000\u0003\u0000O\u0000\u0002\u0000P\u0000\u0001\u0000Q\u0000\u0003\u0000R\u0000\u0001\u0000S\u0000\u0004\u0000T\u0000\u0001\u0000V\u0000\u0002\u0000W\u0000\u0001\u0000X\u0000\u0001\u0000Y\u0000\u0001\u0000Y\u0001\u0001\u0001Z\u0000\u0001\u0000:\u0001\u0001\u0000[\u0000\u0002\u0000\\\u0000\u0001\u0000]\u0000\u0002\u0000\u0004\u0001\u0003\u0001\u0014\u0001\u0004\u0004^\u0000\u0006\u0000\u0015\u0001\u0002\u0002_\u0000\u0003\u0000`\u0000\u0007\u0000Z\u0001\u0003\u0001a\u0000\u0003\u0000b\u0000\u0004\u0000c\u0000\u0001\u0000d\u0000\u0004\u0000e\u0000\u0001\u0000f\u0000\u0001\u0000[\u0001\u0001\u0001]\u0001\u0007\u0004;\u0001\u0004\u0002h\u0000\u0001\u0001i\u0000\u0001\u0000j\u0000\u0002\u0000k\u0000\u0002\u0000l\u0000\u0001\u0000<\u0001\u0001\u0000m\u0000\u0002\u0000=\u0001\u0001\u0001n\u0000\t\u0000o\u0000\u0006\u0000\u0016\u0001\u0001\u0000p\u0000\u0004\u0000q\u0000\u0005\u0000r\u0000\u0001\u0000s\u0000\u0003\u0000t\u0000\u0002\u0000u\u0000\u0001\u0000\u0017\u0001\u0001\u0001v\u0000\u0001\u0001^\u0001\u0005\u0000w\u0000\u0001\u0000x\u0000\u0001\u0000>\u0001\u0001\u0000y\u0000\u0001\u0000z\u0000\u0003\u0000{\u0000\u0003\u0000|\u0000\u0003\u0000}\u0000\u0002\u0000_\u0001\u0002\u0002~\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000?\u0001\u0002\u0001\u0000\u0001\u0000\u0000\u0002\u0001\u0000\u0004\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0005\u0001\u0001\u0001\u0000\u0001\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0003\u0000\u0000\u0002\u0000\u0000\u0005\u0000\u0000\u0004\u0000\u0000\u0005\u0000\u0000\u0006\u0001\u0000\u0003\u0000\u0000\u0001\u0000\u0000\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0002\u0001\u0000\u0002\u0000\u0000\u0003\u0001\u0000\u0002\u0000\u0000\u0002\u0001\u0000\u0005\u0001@\u0001\u0002\u0001\u0000\u0004\u0000`\u0001\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000a\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0005\u0000b\u0001\u0001\u0000\u0000\u0005\u0000\u0000\u0001\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0004\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0018\u0001\u0001\u0001\u0000\u0001\u0000A\u0001\u0001\u0001\u0019\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0005\u0000\u0000\u0002\u0000B\u0001\u0001\u0001c\u0001\u0004\u0000\u0000\u0005\u0000C\u0001\u0003\u0000D\u0001\u0002\u0000d\u0001\u0006\u0006\u0000\u0006\u0000\u0000\u0003\u0000e\u0001\u0002\u0001\u0000\u0003\u0000\u0000\u0001\u0000\u0006\u0001\u0001\u0001\u0000\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000E\u0001\u0001\u0000\u001a\u0001\u0001\u0000\u0000\u0002\u0000\u0000\u0004\u0000\u0000\u0002\u0000F\u0001\u0001\u0000\u0000\u0001\u0000G\u0001\u0004\u0000H\u0001\u0002\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0005\u0000\u0000\u0002\u0000\u001b\u0001\u0002\u0001\u001c\u0001\u0002\u0002I\u0001\u0003\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0007\u0001\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\b\u0001\u0001\u0000\u0000\u0001\u0000J\u0001\u0003\u0000f\u0001\t\u0001\u001d\u0001\u0001\u0000g\u0001\u0003\u0000K\u0001\u0002\u0000\u0000\u0002\u0000\u0000\u0006\u0000h\u0001\u0001\u0001\u0000\u0002\u0000L\u0001\u0003\u0001\u0000\u0001\u0000\u0000\u0005\u0000M\u0001\u0004\u0000\u0000\u0006\u0000O\u0001\u0001\u0000\u0000\u0004\u0000P\u0001\u0002\u0000\u0000\u0001\u0000i\u0001\u0001\u0001Q\u0001\u0001\u0001R\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u001e\u0001\u0001\u0001\u0000\u0002\u0000\u0000\u0001\u0000\u001f\u0001\u0001\u0000\u0000\u0001\u0001\u0000\u0006\u0000\u0000\u0005\u0000\u0000\u0003\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0004\u0000\u0000\u0003\u0000\u0000\u0001\u0000\u0000\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0003\u0000\u0000\u0001\u0000\u0000\u0004\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0006\u0000\u0000\u0002\u0000\\\u0001\u0001\u0001\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0001\u0000\u0000\u0001\u0001\u0000\u0001\u00009\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000U\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000j\u0001c\u0000k\u0001c\u0000l\u0001c\u0000m\u0001\u0004\u0000o\u0001c\u0000p\u0001c\u0000q\u0001c\u0000r\u0001c\u0000s\u0001c\u0000t\u0001c\u0000u\u0001c\u0000v\u0001c\u0000w\u0001c\u0000n\u0001O\u0000ʀۀ̀р\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000(\u0000I\u0000N\u0000P\u0000X\u0000a\u0000g\u0000v\u0000x\u0000x\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000j\u0000\u0000\u0018\u001a\u0006\u0006\u0004\u0001\u0000\u0000H\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0001\u000f@\u0002?\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Wz\u0005/\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0003*\u0000\u0002\u0000/\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0003\u000e\u0000\u0003\u000b\u0005\u0001\u0010\u0000\b\u0003\u0002\u0017\u0004\u0003\u0000\u0000\u0000\u0010\u0000v\u0017\u0000\u0000\r\u0003\u000b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000#\u0000,\u0000\u0002\u0002\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u0000P\u0000\u0006\u0000`\u0000\u0006@D\u0000\u0002lE\u0000\u0002\u0003\u0002\u0019\u0006\u0000\b \u000b\r\u0000\u0003\u0000\u0003\u0002\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0006\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0006\u0003@\u0000\u0002ƀۀҀ݀@s؀߀΀@s؀Հ@s܀ʀ߀@s̀ʀ݀ʀ@n@S\u0011Ȁ΀܀\u0000?\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000w\n\u0000\u0000\u0000\u0000g\u0000\u0000a\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0000\u0001\u0000\u0001B\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u001e\u001e\u001e\u001e\u0000\u0013\u0000\u0000\u0000\u0000\u0000\u0000\f)\u0018\u0014\u000e\u000f\u001c!.\u0004\u0010\u0002)\u0014\u0019-(\u0018$\u0019\u0007\u0005\u001bO\u0002\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000d)\u0000\u0002\r\u0001\u0000\u0000(#\u0000\u0000m\u0000\t\u0000\u0002\u0003\u0000\u0000\u0000\u000b\u0000v\u0013\\3\u0015\u0002\b~/fPG\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000E\u0005oKDZ\u0001\u0000\u0000\u0000\u0000\u0003\u0007\u0000\u0000\u0000\u0000G\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ހ݀܀\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u001eD\nA\u0014T\u0014C(B\u001eJ\nF<EZ\u0005\u0000o\u0000\u0004\u0011\u0000\u0000\u0000\u0001\u0000\u0000_\u0000\u0000\u0000o\u0001\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\f\u0013\u0000\u0000\u001b\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\b\u0004\u0016\u0000\u00003\u0001\u0001\u0000\u0000\u0000\u0000\u0000\b\f\t\u0000\u0000w\u0000\u0001\u0000A\u0000\u0000\u0000\f\u0004\u0012\u0000\u0000.\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000,\u0000\u0004\u000e\u0000\u0000\u0000\u0000Q\u0000\u0016\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0004#\u0000\u0000{\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000<\u0004\u0019\u0000\u0000q\u0000\u0001^\u0000w\u0000\u0000\u0000p\u0005\b\u0000\u0000i\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\f\u000e\u0000\u0000\u0000y\u0001\u0006\u0000B\u0000\u0000\u0000\u0004\f\t\u0000\u0000\u0000\u0001\u0000X\u0000\u0000\u0000(\f\t\u0000\u0000\u0000\u0001\u0000\u0000^\u0000\u0000\u0000q\u0005\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000<\u0000\f\u000e\u0000\u0000\u000e\u0001\u0001X\u0001g\u0000\u0000\u0000\b\u0004\t\u0000\u0000+\u0001\u0001)\u0001)\u0000\u0000\u0000\u0004\u0004\u000e\u0000\u0000\u001b\u0001x\u00017\u0001e\u0000\u0000\u0000(\u0004\t\u0000\u0000G\u0000\u0001\u0000\u0000\u0000\u0000(\u0004\t\u0000\u0000\u0004\u0001\u0001\u0006\u0000\u0000\u0000\u0000<\f\t\u0000\u0000\u0000\u0001&\u0001\u000e\u0000\u0000\u0000(\f\t\u0000\u0000\u0000\u0001#\u0000\u0019\u0000\u0000\u0000\u0017\u0005\f\t\u0000\u0000i\u0000\n\u0000]\u0000\u0000\u0000\u0000\u0000\u0004\u0004\t\u0000\u0000\u0016\u0001\u0001'\u0001'\u0000\u0000\u0000(\u0004\t\u0000\u0000\u0000\u0001\u0000\u0000a\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000m\u0001\b\u0000\u0000X\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000u\t\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\t\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000t\t\b\u0000\u0000\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000F\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000r\u0005\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000n\u0001\b\u0000\u0000g\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!\u0000\u0002&\u0000\u0002\u0004&\u0000\u0002!\u0000\u0002T'\u0000\u0002@&\u0000\u0002!\u0000\u0002'\u0000\u0002%\u0000\u0002!\u0000\u0002\u0004&\u0000\u00024&\u0000\u0002\b\"\u0000\u0002%\u0000\u0002L&\u0000\u0002\u0018\"\u0000\u0002%\u0000\u0002%\u0000\u0002(\"\u0000\u0002\u0000\u0000\u0000\u0000|&\u0000\u00028\"\u0000\u0002(&\u0000\u0002\u0000\u0000\u0000\u0000H\"\u0000\u0002&\u0000\u0002\u001c&\u0000\u0002X\"\u0000\u0002%\u0000\u0002&\u0000\u0002h\"\u0000\u0002%\u0000\u0002p&\u0000\u0002x\"\u0000\u0002%\u0000\u0002X&\u0000\u0002\"\u0000\u0002L&\u0000\u0002d&\u0000\u0002\"\u0000\u0002X&\u0000\u0002&\u0000\u0002\"\u0000\u0002@&\u0000\u0002\f'\u0000\u0002\"\u0000\u0002\u0010&\u0000\u0002'\u0000\u0002\"\u0000\u00024&\u0000\u0002&\u0000\u0002\"\u0000\u0002&\u0000\u0002&\u0000\u0002\"\u0000\u0002&\u0000\u0002&\u0000\u0002\"\u0000\u0002&\u0000\u0002&\u0000\u0002\b#\u0000\u0002d&\u0000\u0002&\u0000\u0002\u0018#\u0000\u0002&\u0000\u0002&\u0000\u0002(#\u0000\u0002&\u0000\u0002%\u0000\u00028#\u0000\u0002&\u0000\u0002&\u0000\u0002H#\u0000\u0002&\u0000\u0002(&\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002\u0018'\u0000\u0002\u0000\u0000\u0000\u0000L&\u0000\u0002%\u0000\u0002x#\u0000\u0002p&\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002$'\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002<'\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000d&\u0000\u0002`'\u0000\u0002#\u0000\u0002'\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000d&\u0000\u0002l'\u0000\u0002\u0000\u0000\u0000\u0000d&\u0000\u0002x'\u0000\u0002\u0000\u0000\u0000\u0000d&\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002d&\u0000\u0002($\u0000\u0002(\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000H'\u0000\u0002'\u0000\u0002H$\u0000\u0002'\u0000\u0002\b(\u0000\u0002\u0000\u0000\u0000\u0000H'\u0000\u00024&\u0000\u0002h$\u0000\u0002\f'\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000<'\u0000\u00024&\u0000\u0002$\u0000\u0002|&\u0000\u0002T'\u0000\u0002\u0000\u0000\u0000\u0000<'\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000<'\u0000\u0002d&\u0000\u0002\u0000\u0000\u0000\u0000%\u0000\u0002&\u0000\u0002$\u0000\u0002'\u0000\u0002(\u0000\u0002\u0000\u0000\u0000\u0000l'\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000'\u0000\u0002L&\u0000\u0002\u0000\u0000\u0000\u0000'\u0000\u0002%\u0000\u0002\u0000\u0000\u0000\u0000'\u0000\u00024&\u0000\u0002\u0000\u0000\u0000\u0000&\u0000\u0002&\u0000\u0002\u0000\u0000\u0000\u0000'\u0000\u0002&\u0000\u0002\u0000\u0000\u0000\u0000\u0000'\u0000\u0002h(\u0000\u0002\u0000\u0000\u0000\u0000\u0000'\u0000\u0002t(\u0000\u0002\u0000\u0000\u0000\u0000\u0000'\u0000\u0002(\u0000\u0002\u0000\u0000\u0000\u0000\u0000'\u0000\u0002d&\u0000\u0002\u0000\u0000\u0000\u0000%\u0000\u0002(\u0000\u0002\u0000\u0000\u0000\u0000 (\u0000\u0002(\u0000\u0002%\u0000\u0002\b(\u0000\u0002'\u0000\u0002\u0000\u0000\u0000\u0000 (\u0000\u0002&\u0000\u0002\u0000\u0000\u0000\u0000%\u0000\u0002d&\u0000\u0002\u0010&\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000΀@sǀ\u0000\u0000\u0000\u0000B\u000f\u0001\u0000\u0000\u0000\u0001\u0000ʀЀ׀ʀۀ؀\u0000\u0000\u0000\u0000&\u0010\u0001\u0000\u0002\u0000X\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\u0000\u0000\u0000:\u0000\u0000\u0000x\u0000\u0000\u0000\u0015\u0000\u0000\u0000@\u0000\u0000\u0000Q\u0000\u0000\u0000;\u0000\u0000\u0000\u0014\u0000\u0000\u0000[\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u001b\u0000\u0000\u00000\u0000\u0000\u0000d\u0000\u0000\u0000O\u0000\u0000\u0000.\u0000\u0000\u0000\u0006\u0000\u0000\u0000:\u0000\u0000\u0000{\u0000\u0000\u0000T\u0000\u0000\u0000e\u0000\u0000\u0000\u0017\u0000\u0000\u00004\u0000\u0000\u0000A\u0000\u0000\u0000\f\u0000\u0000\u0000P\u0000\u0000\u0000\u0016\u0000\u0000\u0000\n\u0000\u0000\u0000v\u0000\u0000\u0000|\u0000\u0000\u00003\u0000\u0000\u0000\u0000\u0000\u0000i\u0000\u0000\u0000z\u0000\u0000\u0000<\u0000\u0000\u0000\t\u0000\u0000\u0000=\u0000\u0000\u0000G\u0000\u0000\u0000-\u0000\u0000\u0000>\u0000\u0000\u0000\u001e\u0000\u0000\u0000\u0002\u0000\u0000\u0000b\u0000\u0000\u0000\u0001\u0000\u0000\u0000H\u0000\u0000\u0000$\u0000\u0000\u0000`\u0000\u0000\u0000C\u0000\u0000\u0000v\u0000\u0000\u0000,\u0000\u0000\u0000\u001a\u0000\u0000\u0000\u0005\u0000\u0000\u0000.\u0000\u0000\u0000-\u0000\u0000\u0000\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0014\u0000\u0000p\u0000\u0000p1w\u0000w\u0000\u0001\u0000\u0000\u0003\\\u0000\u0000\u0000\u0000\u001a\u0003\u001a\u0003\u0000\u0000\u0000\u00008\"\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0003\u0002\u0000\u0010\u0013\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e\u0000\u0000\u001a\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001c\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001a\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0016\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001d\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u000f\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0018\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0017\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0019\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0015\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0013\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\r\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000|\u0000\u0004\u0000\u001dy\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001a\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\t\u0001\b\u0002\u0000\u0000x'\u0003v\u0002&\u000e\u0002\u0011&Vm\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0001\u001b\u0000di\u0004\u0016\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0001\u001c\u0000LDR\u0015e&\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000j\u0002\u0000\u0000\u0001\u001c\u0000%#!r,\u0002\u0000\u0000\u0001\u001d\u0000\u0000MQ\u0016d'\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0001\u001b\u0000dĄ\u0016T+\u0000\u0000\u0003\u0007:\u0000'5\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001e4\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000A\u0001A\u0001G\u0001\u0000W\u0001\u0000\u0000\u0000\u0000\u0002\u0001;\u0001V\u0001d\u0001\u000b?\u0001\u0000\u0000\u0000\u0005\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0002\u0000\u0000\u0000\u0004\n\u0002\b\b\b\u0001\u0001\u0002\u0000\u0000\u0000\u0000\u0000\u0001|\u0000\u0000\u0000\u0001\u0018\u0003\u0018\u0000\u0019\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000=\u0001G\u0001\u0000\u0000\u0015\u00011\u0001\u0000d\u0001f\u0001_\u0013\u0000\u0001\u0000\u0000\u00005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000z\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\b\u0001\u0000\u0000\n\u0001\u0002\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000^s\u0017s\u0000 7\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000i\u0001i\u0001<\u0000<\u0000]\u0001\u0001\u000b\u0001a\u0001\u0000\u0000.\u0000%\u0001\r\u0001\u0000_\u0001\tG\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0001\u0001\u0007\u0006\u0007\u0001\u0001\u0002\u0000\u0000\u0000\u0000\u0000\u0001,\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000 \u0001\u0003\u0000\u0000\u0003\u0000\u0002\u0000\u0001\u0000!\u0001\u0001\u0000\"\u0001\u0004\u0000\u0003\u0000\u0002\u0000#\u0001\u0001\u0000\u0004\u0000\u0001\u0000\u0005\u0000\u0001\u0000\u0006\u0000\u0002\u0000\u0007\u0000\u0001\u0000\b\u0000\u0005\u0000S\u0001\u0004\u0001T\u0001\u0007\u0003\t\u0001\u0001\u0000$\u0001\u0002\u0001\t\u0000\u0001\u0000\n\u0000\u0002\u0000\n\u0001\u0001\u0000%\u0001\t\u0001\u000b\u0000\u0001\u0000\f\u0000\u0001\u0001U\u0001\u0001\u0001\r\u0000\u0001\u0000\u000e\u0000\u0002\u0000\u000f\u0000\u0002\u0000\u0010\u0000\u0001\u0000\u0011\u0000\u0003\u0000\u0012\u0000\u0004\u0001\u0000\u0002\u0000\u0000\u0002\u0002\u0000\u0001\u0007\u0000\u0013\u0000\u0002\u0000\u0014\u0000\u0001\u0000\u0015\u0000\u0002\u0000\u0016\u0000\u0003\u0000\u000b\u0001\u0001\u0001\u0017\u0000\u0003\u0000\u0018\u0000\u0002\u0000(\u0001\u0002\u0000\u0019\u0000\u0001\u0000\u001a\u0000\u0001\u0000\u001c\u0000\u0001\u0000\u001d\u0000\u0001\u0000\u001e\u0000\u0001\u0000\u001f\u0000\u0001\u0000 \u0000\u0001\u0000!\u0000\u0001\u0000\"\u0000\u0001\u0000#\u0000\u0003\u0000$\u0000\u0001\u0000V\u0001\u0004\u0001W\u0001\u0006\u0002'\u0000\u0001\u0000\f\u0001\u0001\u0000)\u0001\u0003\u0000(\u0000\u0003\u0000+\u0001\u0007\u0000)\u0000\u0002\u0000*\u0000\u0001\u0000+\u0000\u0002\u0001,\u0000\u0005\u0000,\u0001\u0001\u0001-\u0000\u0002\u0000.\u0000\u0003\u0001/\u0000\u0001\u0000\r\u0001\u0003\u00021\u0000\u0001\u0001\u000f\u0001\u0001\u00002\u0000\u0001\u00013\u0000\u0001\u00004\u0000\u0003\u00005\u0000\b\u0000X\u0001\u0002\u00016\u0000\u0003\u00007\u0000\u0002\u0000-\u0001\u0001\u0001.\u0001\u0001\u00008\u0000\u0001\u0000:\u0000\u0001\u0000;\u0000\u0001\u0000=\u0000\u0001\u0000>\u0000\u0001\u0000\u0001\u0001\u0003\u0000?\u0000\u0005\u0000@\u0000\u0003\u0000\u0010\u0001\u0001\u0000A\u0000\u0002\u0000B\u0000\u0001\u0000\u0011\u0001\u0001\u0001\u0012\u0001\u0001\u0000\u0013\u0001\u0001\u0000/\u0001\u0002\u00000\u0001\u0004\u00001\u0001\u0001\u00012\u0001\u0002\u00003\u0001\u0002\u00004\u0001\u0001\u00015\u0001\u0003\u00026\u0001\u0003\u00017\u0001\u0002\u00008\u0001\u0004\u0000C\u0000\u0001\u0000D\u0000\u0001\u0000E\u0000\u0001\u0000F\u0000\u0001\u0000G\u0000\u0001\u0000\u0002\u0001\u0004\u0001H\u0000\u0001\u0000I\u0000\u0001\u0000J\u0000\u0001\u0000K\u0000\u0002\u0000L\u0000\u0004\u0000M\u0000\u0003\u0000N\u0000\u0003\u0000O\u0000\u0002\u0000P\u0000\u0001\u0000Q\u0000\u0003\u0000R\u0000\u0001\u0000S\u0000\u0004\u0000T\u0000\u0001\u0000V\u0000\u0002\u0000W\u0000\u0001\u0000X\u0000\u0001\u0000Y\u0000\u0001\u0000Y\u0001\u0001\u0001Z\u0000\u0001\u0000:\u0001\u0001\u0000[\u0000\u0002\u0000\\\u0000\u0001\u0000]\u0000\u0002\u0000\u0004\u0001\u0003\u0001\u0014\u0001\u0004\u0004^\u0000\u0006\u0000\u0015\u0001\u0002\u0002_\u0000\u0003\u0000`\u0000\u0007\u0000Z\u0001\u0003\u0001a\u0000\u0003\u0000b\u0000\u0004\u0000c\u0000\u0001\u0000d\u0000\u0004\u0000e\u0000\u0001\u0000f\u0000\u0001\u0000[\u0001\u0001\u0001]\u0001\u0007\u0004;\u0001\u0004\u0002h\u0000\u0001\u0001i\u0000\u0001\u0000j\u0000\u0002\u0000k\u0000\u0002\u0000l\u0000\u0001\u0000<\u0001\u0001\u0000m\u0000\u0002\u0000=\u0001\u0001\u0001n\u0000\t\u0000o\u0000\u0006\u0000\u0016\u0001\u0001\u0000p\u0000\u0004\u0000q\u0000\u0005\u0000r\u0000\u0001\u0000s\u0000\u0003\u0000t\u0000\u0002\u0000u\u0000\u0001\u0000\u0017\u0001\u0001\u0001v\u0000\u0001\u0001^\u0001\u0005\u0000w\u0000\u0001\u0000x\u0000\u0001\u0000>\u0001\u0001\u0000y\u0000\u0001\u0000z\u0000\u0003\u0000{\u0000\u0003\u0000|\u0000\u0003\u0000}\u0000\u0002\u0000_\u0001\u0002\u0002~\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000?\u0001\u0002\u0001\u0000\u0001\u0000\u0000\u0002\u0001\u0000\u0004\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0005\u0001\u0001\u0001\u0000\u0001\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0003\u0000\u0000\u0002\u0000\u0000\u0005\u0000\u0000\u0004\u0000\u0000\u0005\u0000\u0000\u0006\u0001\u0000\u0003\u0000\u0000\u0001\u0000\u0000\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0002\u0001\u0000\u0002\u0000\u0000\u0003\u0001\u0000\u0002\u0000\u0000\u0002\u0001\u0000\u0005\u0001@\u0001\u0002\u0001\u0000\u0004\u0000`\u0001\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000a\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0005\u0000b\u0001\u0001\u0000\u0000\u0005\u0000\u0000\u0001\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0004\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0018\u0001\u0001\u0001\u0000\u0001\u0000A\u0001\u0001\u0001\u0019\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0005\u0000\u0000\u0002\u0000B\u0001\u0001\u0001c\u0001\u0004\u0000\u0000\u0005\u0000C\u0001\u0003\u0000D\u0001\u0002\u0000d\u0001\u0006\u0006\u0000\u0006\u0000\u0000\u0003\u0000e\u0001\u0002\u0001\u0000\u0003\u0000\u0000\u0001\u0000\u0006\u0001\u0001\u0001\u0000\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000E\u0001\u0001\u0000\u001a\u0001\u0001\u0000\u0000\u0002\u0000\u0000\u0004\u0000\u0000\u0002\u0000F\u0001\u0001\u0000\u0000\u0001\u0000G\u0001\u0004\u0000H\u0001\u0002\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0005\u0000\u0000\u0002\u0000\u001b\u0001\u0002\u0001\u001c\u0001\u0002\u0002I\u0001\u0003\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0007\u0001\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\b\u0001\u0001\u0000\u0000\u0001\u0000J\u0001\u0003\u0000f\u0001\t\u0001\u001d\u0001\u0001\u0000g\u0001\u0003\u0000K\u0001\u0002\u0000\u0000\u0002\u0000\u0000\u0006\u0000h\u0001\u0001\u0001\u0000\u0002\u0000L\u0001\u0003\u0001\u0000\u0001\u0000\u0000\u0005\u0000M\u0001\u0004\u0000\u0000\u0006\u0000O\u0001\u0001\u0000\u0000\u0004\u0000P\u0001\u0002\u0000\u0000\u0001\u0000i\u0001\u0001\u0001Q\u0001\u0001\u0001R\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u001e\u0001\u0001\u0001\u0000\u0002\u0000\u0000\u0001\u0000\u001f\u0001\u0001\u0000\u0000\u0001\u0001\u0000\u0006\u0000\u0000\u0005\u0000\u0000\u0003\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0004\u0000\u0000\u0003\u0000\u0000\u0001\u0000\u0000\u0001\u0001\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0003\u0000\u0000\u0001\u0000\u0000\u0004\u0000\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0006\u0000\u0000\u0002\u0000\\\u0001\u0001\u0001\u0000\u0002\u0000\u0000\u0002\u0000\u0000\u0001\u0000\u0000\u0001\u0001\u0000\u0001\u00009\u0000\u0001\u0000\u0000\u0001\u0000\u0000\u0001\u0000U\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000j\u0001c\u0000k\u0001c\u0000l\u0001c\u0000m\u0001\u0004\u0000o\u0001c\u0000p\u0001c\u0000q\u0001c\u0000r\u0001c\u0000s\u0001c\u0000t\u0001c\u0000u\u0001c\u0000v\u0001c\u0000w\u0001c\u0000n\u0001O\u0000ʀۀ̀р\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000(\u0000I\u0000N\u0000P\u0000X\u0000a\u0000g\u0000v\u0000x\u0000x\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000j\u0000\u0000\u0018\u001a\u0006\u0006\u0004\u0001\u0000\u0000H\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0001\u000f@\u0002?\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Wz\u0005/FFTEX000\u0004\u0000\u0000}\u0001\u0003\b\u0007\u0006\u0005\u0000\u0000\u0001\u0001ʀۀ̀р\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000&\u0001:\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ހ݀܀\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000@\u0000,\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002P\u0001\u0003\u0006&\u001f\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u001d\u0001\u001d\u0001M\u0000M\u0000\u0001\u0001V\u0001d\u0001\u0001\u00001\u00002\u0000,\u0001Y\u0001\r\u0001\u0003\u0010\u0000\u0000\u0000 8\u000b\u0004\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0005\u0005\u0002\u0005\u0005\u0000\u0001\u0005\u0002\u0000\u0000\u0000\u0000\u0000\u0002\u0001\b\u0000\u0000\u0000\bR\u0005*\u0001 ;\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0001_\u0001\u0001\u0000\u0000\u001c\u0001B\u0001\u0000d\u0001i\u0001X\n\u0001\u0000\u0000\u0000KL\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0000\u0000\u0000\u0006\n\u0002\u0004\u000b\t\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0002\u0001\u0002\u0000\u001eJ\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u001c\u0001\u001c\u00014\u00004\u0000[\u0001V\u0001\u0000\u001c\u0001\u0000\u0000\f\u0000-\u0001\u000b\u0001\u0004\u0001\\\u0001\u0002\u0001\u0000\u0000\u0000~\t\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000]\u0007\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\b\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0001E\u0000\u0000\u0000\u0001\u0011\u0002\u0011\u0010\u001d\u0014\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000-\u0000-\u00006\u0001\u001f\u0001:\u0001\u0004\u0001\u0000\u0000\u0000A\u0001\u0006\u0001`\u0001T\u0001M\u0016\b\u0000\u0000\u0000)\n6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000J\u0012\u0000\u0000\u0000\u0002\u0000\u0001\u0000\u0000\u000b\u0001\u0002\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\"\u0004\"##\u0017\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00012\u0001u\u0001B\u0001\u0000\u0000v\u00005\u0001\u0014\u0001Z\u0001_\u0001U\u0019\u001a\u0000\u0000\u0000I\u0000J\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000䞊\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0000\u0000\u0000\u0001\u0004\u0000\u0000\u0000\u0002\u0003\u0002\u0004\u0000\u0003\u0000\u0000\u0001\u0000\u0000-\u0001\u0000\u0000\u0001\t\u0001\t\u0000\u001c\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0012\u0001,\u0001.\u0001\u0000\u0000\u0017\u0001L\u0001\u0000d\u0001h\u0001\u0011\u0001\u0000\u0000\u0000YZ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000~\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000#\u0007\u0000\u0000\u0000\u0004\r\u0002\u0000\u0000\b\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001 \u0004 \u001e \"\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000_\u0000_\u0000N\u0001>\u0001Q\u0001?\u0001\u0000\u0000\u0014\u0001Q\u0001\u0000W\u0001e\u0001U\u000e\f\u0000\u0000\u0000\u001e\u001f\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000䞞\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u0007\u0000\u0000\u0000\u0004\u000e\u0002\u0000\u0000\b\u0001\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0001&\u0005&\u0000\u001f@\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000Q\u0000Q\u0000\u0000_\u0001\u0015\u0001_\u0001\u0000\u00005\u0001\u0000]\u0001S\u0001\u0015\u0001X\u001c\u0001\u0000\u0000\u0000\u0000\u001e\u001f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u0004\u0000\u0000\u0000\u0007\u0003\u0000\u0000\u0000\u0003\u0001\u0002\u0002\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001)\u0005)+\u0014$\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000q\u0000q\u0000\u0000\u0000\u0000\u0016\u0001\u0000\u0000\u001b\u00014\u0001\u0000T\u0001]\u0001X\"\r\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000x\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0007\u0000\u0000\u0000\t\u0005\u0000\u0000\u0000\t\u0001\u0002\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0004Q\u0004\u001c\u0000\u001f\u0016\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\b\u0001\b\u0001(\u0000(\u0000R\u0001E\u00010\u0001 \u0001\u0000\u0000\u0014\u0001?\u0001h\u0000\u0007\u0001[\u0001U\u0007\u0001\u0000\u0000\u0000>\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0016\u0000\u0000\u0000\u0000\t\u0007\u0000\u000b\u0005\t\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0001h\f\u0000\u0000\u0000\fU\u0004#\u0000\u001e<\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000P\u0000P\u0000w\u0001\f\u0001'\u0001.\u0001\u0000\u0000\u0000@\u0001\u0014\u0001X\u0001]\u0001U\u001a\u0001\u0000\u0000\u0000S\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\f\u0007\u0000\n\u0006\n\u0001\u0002\u0005\u0000\u0000\u0000\u0000\u0000\u0001\n\u0000\u0000\u0000\nT\u0014T\u0000\u001f\u0011\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000_\u0000_\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u00006\u0001\u001c\u0001d\u0001U\u0001\u000b@\u0001\u0000\u0000\u0000\t\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000|\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0002\u0002\u0000\u0002\u0002\u0001\u0001\u0001\u0002\u0000\u0000\u0000\u0000\u0000\u0001(\u0001\u0000\u0000\u0001\u0013\u0002\u0013\u0000\u00172\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000]\u0000]\u0000\u0013\u0001:\u0001\u0013\u0001\u0000\u0000\u0000]\u0001+\u0000=\u0001\u0011\u0001T\u0001M\u0006\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000j\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u000b\t\u0001\u0000\u0000\n\u0001\u0002\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u001b\u0003\u001b\u0000\u0018\u001a\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001b\u0001\u00000\u0001\u0000\u0000\u0000\u001e\u0001;\u0001\u0000\u0005\u0001d\u0001_\u0012\u0001\u0000\u0000\u0000[\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000f\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0001\u0000\u0000\u0000\t\u0004\u0001\u0000\u0000\n\u0001\u0002\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001%\u0005%\u0000\u0018&\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000T\u0000T\u0000)\u0001B\u0001\u0000\u0013\u0001\u0000\u0000\u0018\u0001$\u0001\u0012\u0000\u0000W\u0001X \u0001\u0000\u0000\u0000\u0013\u0014\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000y\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\n\u0006\u0001\u0000\u0000\n\u0001\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\tS\u0014SFFTEX000~\u0004\u0000\u0000\u0000&&\u0000\u0000\u0003\t\u0004\u0003\u0002\u0000\u0000\u0001\u0001ʀۀ̀р\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000&\u0001:\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ހ݀܀\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000@\u0000,\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002P\u0001\u0003\u0006&\u001f\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u001d\u0001\u001d\u0001M\u0000M\u0000\u0001\u0001V\u0001d\u0001\u0001\u00001\u00002\u0000,\u0001Y\u0001\r\u0001\u0003\u0010\u0000\u0000\u0000 8\u000b\u0004\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0005\u0005\u0002\u0005\u0005\u0000\u0001\u0005\u0002\u0000\u0000\u0000\u0000\u0000\u0002\u0001\b\u0000\u0000\u0000\bR\u0005*\u0001 ;\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0001_\u0001\u0001\u0000\u0000\u001c\u0001B\u0001\u0000d\u0001i\u0001X\n\u0001\u0000\u0000\u0000KL\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0000\u0000\u0000\u0006\n\u0002\u0004\u000b\t\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0002\u0001\u0002\u0000\u001eJ\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u001c\u0001\u001c\u00014\u00004\u0000[\u0001V\u0001\u0000\u001c\u0001\u0000\u0000\f\u0000-\u0001\u000b\u0001\u0004\u0001\\\u0001\u0002\u0001\u0000\u0000\u0000~\t\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000]\u0007\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\b\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0001E\u0000\u0000\u0000\u0001\u0011\u0002\u0011\u0010\u001d\u0014\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000-\u0000-\u00006\u0001\u001f\u0001:\u0001\u0004\u0001\u0000\u0000\u0000A\u0001\u0006\u0001`\u0001T\u0001M\u0016\b\u0000\u0000\u0000)\n6\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000J\u0012\u0000\u0000\u0000\u0002\u0000\u0001\u0000\u0000\u000b\u0001\u0002\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\"\u0004\"##\u0017\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00012\u0001u\u0001B\u0001\u0000\u0000v\u00005\u0001\u0014\u0001Z\u0001_\u0001U\u0019\u001a\u0000\u0000\u0000I\u0000J\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000䞊\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0000\u0000\u0000\u0001\u0004\u0000\u0000\u0000\u0002\u0003\u0002\u0004\u0000\u0003\u0000\u0000\u0001\u0000\u0000-\u0001\u0000\u0000\u0001\t\u0001\t\u0000\u001c\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0012\u0001,\u0001.\u0001\u0000\u0000\u0017\u0001L\u0001\u0000d\u0001h\u0001\u0011\u0001\u0000\u0000\u0000YZ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000~\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000#\u0007\u0000\u0000\u0000\u0004\r\u0002\u0000\u0000\b\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001 \u0004 \u001e \"\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000_\u0000_\u0000N\u0001>\u0001Q\u0001?\u0001\u0000\u0000\u0014\u0001Q\u0001\u0000W\u0001e\u0001U\u000e\f\u0000\u0000\u0000\u001e\u001f\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000䞞\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u0007\u0000\u0000\u0000\u0004\u000e\u0002\u0000\u0000\b\u0001\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u00001\u0001\u0000\u0000\u0001&\u0005&\u0000\u001f@\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000Q\u0000Q\u0000\u0000_\u0001\u0015\u0001_\u0001\u0000\u00005\u0001\u0000]\u0001S\u0001\u0015\u0001X\u001c\u0001\u0000\u0000\u0000\u0000\u001e\u001f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00000\u0004\u0000\u0000\u0000\u0007\u0003\u0000\u0000\u0000\u0003\u0001\u0002\u0002\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001)\u0005)+\u0014$\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000q\u0000q\u0000\u0000\u0000\u0000\u0016\u0001\u0000\u0000\u001b\u00014\u0001\u0000T\u0001]\u0001X\"\r\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000x\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0007\u0000\u0000\u0000\t\u0005\u0000\u0000\u0000\t\u0001\u0002\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0004Q\u0004\u001c\u0000\u001f\u0016\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\b\u0001\b\u0001(\u0000(\u0000R\u0001E\u00010\u0001 \u0001\u0000\u0000\u0014\u0001?\u0001h\u0000\u0007\u0001[\u0001U\u0007\u0001\u0000\u0000\u0000>\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0016\u0000\u0000\u0000\u0000\t\u0007\u0000\u000b\u0005\t\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0001h\f\u0000\u0000\u0000\fU\u0004#\u0000\u001e<\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000P\u0000P\u0000w\u0001\f\u0001'\u0001.\u0001\u0000\u0000\u0000@\u0001\u0014\u0001X\u0001]\u0001U\u001a\u0001\u0000\u0000\u0000S\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\f\u0007\u0000\n\u0006\n\u0001\u0002\u0005\u0000\u0000\u0000\u0000\u0000\u0001\n\u0000\u0000\u0000\nT\u0014T\u0000\u001f\u0011\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000_\u0000_\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u00006\u0001\u001c\u0001d\u0001U\u0001\u000b@\u0001\u0000\u0000\u0000\t\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000|\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0002\u0002\u0000\u0002\u0002\u0001\u0001\u0001\u0002\u0000\u0000\u0000\u0000\u0000\u0001(\u0001\u0000\u0000\u0001\u0013\u0002\u0013\u0000\u00172\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000]\u0000]\u0000\u0013\u0001:\u0001\u0013\u0001\u0000\u0000\u0000]\u0001+\u0000=\u0001\u0011\u0001T\u0001M\u0006\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000j\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u000b\t\u0001\u0000\u0000\n\u0001\u0002\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u001b\u0003\u001b\u0000\u0018\u001a\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u001b\u0001\u00000\u0001\u0000\u0000\u0000\u001e\u0001;\u0001\u0000\u0005\u0001d\u0001_\u0012\u0001\u0000\u0000\u0000[\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000f\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0001\u0000\u0000\u0000\t\u0004\u0001\u0000\u0000\n\u0001\u0002\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001%\u0005%\u0000\u0018&\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000T\u0000T\u0000)\u0001B\u0001\u0000\u0013\u0001\u0000\u0000\u0018\u0001$\u0001\u0012\u0000\u0000W\u0001X \u0001\u0000\u0000\u0000\u0013\u0014\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000y\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\n\u0006\u0001\u0000\u0000\n\u0001\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000\tS\u0014S"
  },
  {
    "path": "frontend/tests/data/save-formats/mister/gba/pokemon-sapphire-mister-fake-rtc.sav",
    "content": "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000ң\u0000\u0000\u0000\u0000Ҥ\u0000\u0000\u0000\u0000ҥ\u0000\u0000\u0000\u0000Ҧ\u0000\u0000\u0000\u0000ҧ\u0000\u0000\u0000\u0000Ҩ\u0000\u0000\u0000\u0000ҩ\u0000\u0000\u0000\u0000Ҫ\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\r\u00001% \u0001\b\u0001\u0000\u0000\u0000̽\u0001\u0000b\u0001\u0012\u0000\u0000\u00006\u001e\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000^% \u0001\b\u0001\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0001\u0002\u0000\u0002\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\f\u0000\n\u0000\u0001\u0003\u0000\u0004\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00008\u0000\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u001f\u0006\u001f\u0006\u001f\u0006\u0017\u0006\u001e\u0006\u001e\u0006n\u0006n\u0006n\u0006\u001e\u0006\u0003\u0003\u0003\u0003\u0003n\u0006o\u0006\t\u0006m\u0006&\u0006&\u0006C\u0006D\u00061\u00062\u0006\u0003\u0003\u0003\u0003\u0003v\u0006w\u0006\u0011\u0002u\u0006x2h>K\u0006L\u00069\u0006:\u0006\u0003\u0003\u0003\u0003\u0003\u00042\u00062\u00052\u00072y2\u00012F2\u00052\u00052\u00052\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00012p>\u0003\f@\u0006A\u0006\u00012\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u0001252.2J2H2I262\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00182\u00192\u001a\u0006\u001b\u0006\u001c2\u001d2\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012 2!2\"\u0006#\u0006$2%2\u0003\u0003\u0003\u0003\u0003\u00042\u0002\u0002\u0003\u0002\u00012(2)2*2+2,2-2\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\r\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Y\u000b\u0000\u0002\u00013\t\u0000\u000f\u0000\t\u0000\u000b\u0000\t\u0000\u000b\u0000\"\u0000\u0000=\u0001\u0000\u0000\u0000\u0002\u0000\u0001\u0000\u0001\u0001\u0000\u0001\u0007\u0000\u0001\u0002\u00010\b\u0000\u000f\u0000\b\u0000\u000f\u0000\b\u0000\u000f\u0000\"\u0000\u0000\u0000\u0000ee\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0002`A\u0000\u0002\u0002\u00013\r\u0000\f\u0000\r\u0000\f\u0000\r\u0000\f\u0000\"\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0003_\u001b\u0000\u0003\u0002\u00013\u0010\u0000\n\u0000\u0010\u0000\n\u0000\u0010\u0000\n\u0000D\u0013\u0000\u0000\u0000\u0000\u0000\u0004\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\u0000\b\u0000\u0003\u0007\u0000\u0000\u0000\u0000\u0000\u0000k\u001b\b\u0002\u0000\u0000\u0002`\u0000\u0000\u0006\u0000\u0005\u0000\u0003A\u0000\u0000\u0000\u0000\u0000\u0000Ll\u001b\b\u0002\u0000\u0000\u0003_\u0000\u0000\t\u0000\u0003\u0000\u0003\u001b\u0003\u0000\u0000\u0000\u0000\u0000_l\u001b\b\u0002\u0000\u0000\u0004\u001a\u0000\u0000\b\u0000\u0007\u0000\u0003\t\u0000\u0000\u0000\u0000\u0000\u0000)\u0015\b\u0011\u0003\u0000\u0000\u0005\u0000\u0000\u0005\u0000\u0006\u0000\u0003\n\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000v% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Xq\u0006Nہ\f=ls\t/G8[\u0000\u0002!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000TE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000$\u0016\u0001\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000y% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\n \u0010\u000e\u0002@\u0012\u0000\u0000\u0000\u0000\u000f\u0010\u0002\n%\u000e\u0003\f\u0003\b\u0000\f\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002[k%\u0015λ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ɼ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000v\u0016\u0014\n\u001a^X\n\u0014\t\u00186]f\u0019\u0014\u001b\u001a\"Wc\u0007>\u0014\u000f\u001a\u0016 \u0005\u0014&\u0018\u0000\u0000\u0000\u0000\u0000\u00000\u0001\u0003λλ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00003\u0001\u0001̿\u0000\u0000\u0000\u0000\u0000ûȻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000<\u0001\u0003\u0000\u0000\u0000\u0000\u0000ǻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000o\u0001\u0002\u0000\u0000\u0000\u0000\u0000ǻÿ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\u0001\u0004Ͼ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000x% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx\u00124Vx"
  },
  {
    "path": "frontend/tests/data/save-formats/mister/gba/pokemon-sapphire-mister-no-rtc.sav",
    "content": "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000ң\u0000\u0000\u0000\u0000Ҥ\u0000\u0000\u0000\u0000ҥ\u0000\u0000\u0000\u0000Ҧ\u0000\u0000\u0000\u0000ҧ\u0000\u0000\u0000\u0000Ҩ\u0000\u0000\u0000\u0000ҩ\u0000\u0000\u0000\u0000Ҫ\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\r\u00001% \u0001\b\u0001\u0000\u0000\u0000̽\u0001\u0000b\u0001\u0012\u0000\u0000\u00006\u001e\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000^% \u0001\b\u0001\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0001\u0002\u0000\u0002\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\f\u0000\n\u0000\u0001\u0003\u0000\u0004\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00008\u0000\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u001f\u0006\u001f\u0006\u001f\u0006\u0017\u0006\u001e\u0006\u001e\u0006n\u0006n\u0006n\u0006\u001e\u0006\u0003\u0003\u0003\u0003\u0003n\u0006o\u0006\t\u0006m\u0006&\u0006&\u0006C\u0006D\u00061\u00062\u0006\u0003\u0003\u0003\u0003\u0003v\u0006w\u0006\u0011\u0002u\u0006x2h>K\u0006L\u00069\u0006:\u0006\u0003\u0003\u0003\u0003\u0003\u00042\u00062\u00052\u00072y2\u00012F2\u00052\u00052\u00052\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00012p>\u0003\f@\u0006A\u0006\u00012\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u0001252.2J2H2I262\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00182\u00192\u001a\u0006\u001b\u0006\u001c2\u001d2\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012 2!2\"\u0006#\u0006$2%2\u0003\u0003\u0003\u0003\u0003\u00042\u0002\u0002\u0003\u0002\u00012(2)2*2+2,2-2\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\r\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Y\u000b\u0000\u0002\u00013\t\u0000\u000f\u0000\t\u0000\u000b\u0000\t\u0000\u000b\u0000\"\u0000\u0000=\u0001\u0000\u0000\u0000\u0002\u0000\u0001\u0000\u0001\u0001\u0000\u0001\u0007\u0000\u0001\u0002\u00010\b\u0000\u000f\u0000\b\u0000\u000f\u0000\b\u0000\u000f\u0000\"\u0000\u0000\u0000\u0000ee\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0002`A\u0000\u0002\u0002\u00013\r\u0000\f\u0000\r\u0000\f\u0000\r\u0000\f\u0000\"\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0003_\u001b\u0000\u0003\u0002\u00013\u0010\u0000\n\u0000\u0010\u0000\n\u0000\u0010\u0000\n\u0000D\u0013\u0000\u0000\u0000\u0000\u0000\u0004\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\u0000\b\u0000\u0003\u0007\u0000\u0000\u0000\u0000\u0000\u0000k\u001b\b\u0002\u0000\u0000\u0002`\u0000\u0000\u0006\u0000\u0005\u0000\u0003A\u0000\u0000\u0000\u0000\u0000\u0000Ll\u001b\b\u0002\u0000\u0000\u0003_\u0000\u0000\t\u0000\u0003\u0000\u0003\u001b\u0003\u0000\u0000\u0000\u0000\u0000_l\u001b\b\u0002\u0000\u0000\u0004\u001a\u0000\u0000\b\u0000\u0007\u0000\u0003\t\u0000\u0000\u0000\u0000\u0000\u0000)\u0015\b\u0011\u0003\u0000\u0000\u0005\u0000\u0000\u0005\u0000\u0006\u0000\u0003\n\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000v% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Xq\u0006Nہ\f=ls\t/G8[\u0000\u0002!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000TE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000$\u0016\u0001\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000y% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\n \u0010\u000e\u0002@\u0012\u0000\u0000\u0000\u0000\u000f\u0010\u0002\n%\u000e\u0003\f\u0003\b\u0000\f\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002[k%\u0015λ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ɼ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000v\u0016\u0014\n\u001a^X\n\u0014\t\u00186]f\u0019\u0014\u001b\u001a\"Wc\u0007>\u0014\u000f\u001a\u0016 \u0005\u0014&\u0018\u0000\u0000\u0000\u0000\u0000\u00000\u0001\u0003λλ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00003\u0001\u0001̿\u0000\u0000\u0000\u0000\u0000ûȻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000<\u0001\u0003\u0000\u0000\u0000\u0000\u0000ǻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000o\u0001\u0002\u0000\u0000\u0000\u0000\u0000ǻÿ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\u0001\u0004Ͼ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000x% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
  },
  {
    "path": "frontend/tests/data/save-formats/mister/gba/pokemon-sapphire-raw.srm",
    "content": "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000ң\u0000\u0000\u0000\u0000Ҥ\u0000\u0000\u0000\u0000ҥ\u0000\u0000\u0000\u0000Ҧ\u0000\u0000\u0000\u0000ҧ\u0000\u0000\u0000\u0000Ҩ\u0000\u0000\u0000\u0000ҩ\u0000\u0000\u0000\u0000Ҫ\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\r\u00001% \u0001\b\u0001\u0000\u0000\u0000̽\u0001\u0000b\u0001\u0012\u0000\u0000\u00006\u001e\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000^% \u0001\b\u0001\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0001\u0002\u0000\u0002\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\f\u0000\n\u0000\u0001\u0003\u0000\u0004\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00008\u0000\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u001f\u0006\u001f\u0006\u001f\u0006\u0017\u0006\u001e\u0006\u001e\u0006n\u0006n\u0006n\u0006\u001e\u0006\u0003\u0003\u0003\u0003\u0003n\u0006o\u0006\t\u0006m\u0006&\u0006&\u0006C\u0006D\u00061\u00062\u0006\u0003\u0003\u0003\u0003\u0003v\u0006w\u0006\u0011\u0002u\u0006x2h>K\u0006L\u00069\u0006:\u0006\u0003\u0003\u0003\u0003\u0003\u00042\u00062\u00052\u00072y2\u00012F2\u00052\u00052\u00052\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00012p>\u0003\f@\u0006A\u0006\u00012\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u0001252.2J2H2I262\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00182\u00192\u001a\u0006\u001b\u0006\u001c2\u001d2\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012 2!2\"\u0006#\u0006$2%2\u0003\u0003\u0003\u0003\u0003\u00042\u0002\u0002\u0003\u0002\u00012(2)2*2+2,2-2\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\r\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Y\u000b\u0000\u0002\u00013\t\u0000\u000f\u0000\t\u0000\u000b\u0000\t\u0000\u000b\u0000\"\u0000\u0000=\u0001\u0000\u0000\u0000\u0002\u0000\u0001\u0000\u0001\u0001\u0000\u0001\u0007\u0000\u0001\u0002\u00010\b\u0000\u000f\u0000\b\u0000\u000f\u0000\b\u0000\u000f\u0000\"\u0000\u0000\u0000\u0000ee\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0002`A\u0000\u0002\u0002\u00013\r\u0000\f\u0000\r\u0000\f\u0000\r\u0000\f\u0000\"\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0003_\u001b\u0000\u0003\u0002\u00013\u0010\u0000\n\u0000\u0010\u0000\n\u0000\u0010\u0000\n\u0000D\u0013\u0000\u0000\u0000\u0000\u0000\u0004\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\u0000\b\u0000\u0003\u0007\u0000\u0000\u0000\u0000\u0000\u0000k\u001b\b\u0002\u0000\u0000\u0002`\u0000\u0000\u0006\u0000\u0005\u0000\u0003A\u0000\u0000\u0000\u0000\u0000\u0000Ll\u001b\b\u0002\u0000\u0000\u0003_\u0000\u0000\t\u0000\u0003\u0000\u0003\u001b\u0003\u0000\u0000\u0000\u0000\u0000_l\u001b\b\u0002\u0000\u0000\u0004\u001a\u0000\u0000\b\u0000\u0007\u0000\u0003\t\u0000\u0000\u0000\u0000\u0000\u0000)\u0015\b\u0011\u0003\u0000\u0000\u0005\u0000\u0000\u0005\u0000\u0006\u0000\u0003\n\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000v% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Xq\u0006Nہ\f=ls\t/G8[\u0000\u0002!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000TE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000$\u0016\u0001\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000y% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\n \u0010\u000e\u0002@\u0012\u0000\u0000\u0000\u0000\u000f\u0010\u0002\n%\u000e\u0003\f\u0003\b\u0000\f\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002[k%\u0015λ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ɼ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000v\u0016\u0014\n\u001a^X\n\u0014\t\u00186]f\u0019\u0014\u001b\u001a\"Wc\u0007>\u0014\u000f\u001a\u0016 \u0005\u0014&\u0018\u0000\u0000\u0000\u0000\u0000\u00000\u0001\u0003λλ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00003\u0001\u0001̿\u0000\u0000\u0000\u0000\u0000ûȻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000<\u0001\u0003\u0000\u0000\u0000\u0000\u0000ǻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000o\u0001\u0002\u0000\u0000\u0000\u0000\u0000ǻÿ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\u0001\u0004Ͼ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000x% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/arcadespot.com/gb/invalid-save-state.save",
    "content": "This is not a valid save state"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/arcadespot.com/gba/advance-wars.sav",
    "content": "wars\t8\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0018\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ArcadeSp\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0001\u0000\u0000\u0001\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0001\u0000\u0004$Q\u0006؄\b \u0000\u001e\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004Uwars\tK\u0001\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00008\u000f\u0001\u0000\u0001\u0000\u0006\u0000\b\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0003\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u000e\u0000\b\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\r\u000e\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0003&\u0000\u0003\u0001\u0000\u0001\u0001\u0001\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0004\u0000\u0001\u0002\u0000\u0000\u0000\u0001\u0002\u0004\u0003\u0000\u0000\u0001\u0002\u0003\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0001\u0006d\u0000c\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0002\u0006d\u0000c\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0003\u0006\u0001F\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0001\u0007\u0001F\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0002\bd\u0000F\u0000\u0000\u0000\u0000\u0004\u0006\u0000\u0001\bd\u0000P\u0000\u0000\u0000\u0000\u0004\u0005\u0000\u0001\u0005\u0004F\u0000\u0000\u0000\u0000\u0004\n\u0000\u0000\u0006\u00042\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u000b\u0004d\u0000c\u0000\u0000\u0000\u0000\u0000\u0001\u0000\f\u0004d\u0000c\u0000\u0000\u0000\u0000\u0000\u0001\u0000\r\u0004d\u0000c\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u000b\u0003\u0001F\u0000\u0000\u0000\u0000\u0000\u0007\u0000\r\u0002d\u0000F\u0000\u0000\u0000\u0000\u0004\u0006\u0000\u000e\u0002d\u0000P\u0000\u0000\u0000\u0000\u0004\u000e\u0000\r\u0005\u0004<\u0000\u0000\u0000\u0000\u0004\u0005\u0000\f\u0002\u0004F\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000*];\u0000\u0000\u000f\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 6/29 15:22\u0000\u0000\u0000\u0000\u0000Uwars\t&\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0018\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Advance\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0001\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0004$Q\u0006؄\b \u0000\u001e\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000U"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/arcadespot.com/gba/golden-sun.sav",
    "content": "CAMELOT\u0000ea\u0001\u0000\u0000\u0000\u0000\u0000Arcad\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\n\u0000\u0016\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\bR\u0016\u0000\u0000\u0000\u0000C`\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000P\u0000\u0000\u0000\b\u0000\u0000\u0000\u0010\u0000\u0000\u0000 \u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000R\u0016\u0000\u0000\u0016\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0004\b\b\b\u0010\u0010\u0010   @@@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u000f\u0000\b\u0000\u0010\u0000\u0003\u0000\u000f\u0000\u0003\u00004\u0000\u0000\u0000\u0002\u0000k-\u0001\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0013\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0001\u0000\u0002\u0000\u0004\u0000\b\u0000\u0000\u0002\u0000\u0001\u0002\u0000\u0013\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\b\u0000\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000R\u0016\u0000\u0000\u0000\u0000\u0000\u0000Arcad\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001&\u0000\u0017\u0000\u0000@\u0000@\u0011\u0000\b\u0000\f\u0000\u0003\u0001\u0000\u0000\u0000\u0000h\u0000r\u0000N\u0000X\u0000L\u0000V\u0000M\u0000W\u0000\u001e\u0000\r\u0000\u001e\u0000\r\u0000\u0019\u0000\r\u0000\r\u0000\u0003\u0001\u0000\u0000\u0000\u0000h\u0000r\u0000N\u0000X\u0000L\u0000V\u0000M\u0000W\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0002Y\u0002\u0002\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Garet\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001)\u0000\u0014\u0000\u0000@\u0000@\u000f\u0000\t\u0000\n\u0000\u0002\u0001\u0000\u0000\u0000\u0000L\u0000V\u0000M\u0000W\u0000h\u0000r\u0000N\u0000X\u0000 \u0000\f\u0000 \u0000\f\u0000\u0015\u0000\u000f\u0000\u0007\u0000\u0002\u0001\u0000\u0000\u0000\u0000L\u0000V\u0000M\u0000W\u0000h\u0000r\u0000N\u0000X\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0002Y\u0002\u0002\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Ivan\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00048\u0000&\u0000\u0000@\u0000@\u0016\u0000\u000b\u0000\u001b\u0000\u0004\u0001\u0000\u0000\u0000\u0000M\u0000W\u0000L\u0000V\u0000N\u0000X\u0000h\u0000r\u0000,\u00005\u0000,\u00005\u0000\u0014\u0000\u001b\u0000#\u0000\u0004\u0001\u0000\u0000\u0000\u0000M\u0000W\u0000L\u0000V\u0000N\u0000X\u0000h\u0000r\u0000E\u0000\u0000N\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00007\u0002Z\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Mia\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ne\u00009\u0000\u0000@\u0000@,\u0000\u0018\u0000,\u0000\u0005\u0001\u0000\u0000\u0000\u0000N\u0000X\u0000h\u0000r\u0000M\u0000W\u0000L\u0000V\u0000Z\u0000J\u0000Z\u0000J\u0000D\u00006\u0000#\u0000\u0006\u0001\u0000\u0000\u0000\u0000N\u0000X\u0000h\u0000r\u0000M\u0000W\u0000L\u0000V\u0000]\u0000\u0000c\u0000\u0000\u0018\u0000\u0000\u0019\u0000\u0000\u001b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00009\u0002h\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0003\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Felix\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Jenna\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001$\u0000\u0016\u0000\u0000@\u0000@\u000e\u0000\t\u0000\r\u0000\u0004\u0001\u0000\u0000\u0000\u0000L\u0000V\u0000M\u0000W\u0000h\u0000r\u0000N\u0000X\u0000$\u0000\u001a\u0000$\u0000\u001a\u0000\u0013\u0000\u000f\u0000\u000f\u0000\u0003\u0001\u0000\u0000\u0000\u0000L\u0000V\u0000M\u0000W\u0000h\u0000r\u0000N\u0000X\u0000-\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00007\u0002g\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Sheba\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000PC07\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000CAMELOT\u0003i\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0016\u0000\u0000\u0000\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b@2\u0001\b\u0000\u0000\u0000k-\u0001\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u00008 \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000p \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000 \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000 \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0018!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000P!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000B\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000B\u0001\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u00000\"\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000.\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000h\"\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0014\u0001\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0002\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\"\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\"\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000k\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0010#\u0000\u0003\u0001\u0000\u0000\u0000\u0000\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001k\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000k\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000H#\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001k\u0002\\\u0018\u0003\u0002\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000#\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000#\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000#\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000($\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000`$\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0005\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/arcadespot.com/gba/invalid-save-state.save",
    "content": "This is not a valid save state"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/arcadespot.com/gba/pokemon-sapphire.sav",
    "content": "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000ң\u0000\u0000\u0000\u0000Ҥ\u0000\u0000\u0000\u0000ҥ\u0000\u0000\u0000\u0000Ҧ\u0000\u0000\u0000\u0000ҧ\u0000\u0000\u0000\u0000Ҩ\u0000\u0000\u0000\u0000ҩ\u0000\u0000\u0000\u0000Ҫ\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\r\u00001% \u0001\b\u0001\u0000\u0000\u0000̽\u0001\u0000b\u0001\u0012\u0000\u0000\u00006\u001e\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000^% \u0001\b\u0001\u0000\u0000\u0000\u0002\u0000\u0004\u0000\u0001\u0002\u0000\u0002\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\f\u0000\n\u0000\u0001\u0003\u0000\u0004\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00008\u0000\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u001f\u0006\u001f\u0006\u001f\u0006\u0017\u0006\u001e\u0006\u001e\u0006n\u0006n\u0006n\u0006\u001e\u0006\u0003\u0003\u0003\u0003\u0003n\u0006o\u0006\t\u0006m\u0006&\u0006&\u0006C\u0006D\u00061\u00062\u0006\u0003\u0003\u0003\u0003\u0003v\u0006w\u0006\u0011\u0002u\u0006x2h>K\u0006L\u00069\u0006:\u0006\u0003\u0003\u0003\u0003\u0003\u00042\u00062\u00052\u00072y2\u00012F2\u00052\u00052\u00052\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00012p>\u0003\f@\u0006A\u0006\u00012\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u0001252.2J2H2I262\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00182\u00192\u001a\u0006\u001b\u0006\u001c2\u001d2\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012 2!2\"\u0006#\u0006$2%2\u0003\u0003\u0003\u0003\u0003\u00042\u0002\u0002\u0003\u0002\u00012(2)2*2+2,2-2\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\r\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Y\u000b\u0000\u0002\u00013\t\u0000\u000f\u0000\t\u0000\u000b\u0000\t\u0000\u000b\u0000\"\u0000\u0000=\u0001\u0000\u0000\u0000\u0002\u0000\u0001\u0000\u0001\u0001\u0000\u0001\u0007\u0000\u0001\u0002\u00010\b\u0000\u000f\u0000\b\u0000\u000f\u0000\b\u0000\u000f\u0000\"\u0000\u0000\u0000\u0000ee\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0002`A\u0000\u0002\u0002\u00013\r\u0000\f\u0000\r\u0000\f\u0000\r\u0000\f\u0000\"\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0003_\u001b\u0000\u0003\u0002\u00013\u0010\u0000\n\u0000\u0010\u0000\n\u0000\u0010\u0000\n\u0000D\u0013\u0000\u0000\u0000\u0000\u0000\u0004\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\u0000\b\u0000\u0003\u0007\u0000\u0000\u0000\u0000\u0000\u0000k\u001b\b\u0002\u0000\u0000\u0002`\u0000\u0000\u0006\u0000\u0005\u0000\u0003A\u0000\u0000\u0000\u0000\u0000\u0000Ll\u001b\b\u0002\u0000\u0000\u0003_\u0000\u0000\t\u0000\u0003\u0000\u0003\u001b\u0003\u0000\u0000\u0000\u0000\u0000_l\u001b\b\u0002\u0000\u0000\u0004\u001a\u0000\u0000\b\u0000\u0007\u0000\u0003\t\u0000\u0000\u0000\u0000\u0000\u0000)\u0015\b\u0011\u0003\u0000\u0000\u0005\u0000\u0000\u0005\u0000\u0006\u0000\u0003\n\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000v% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Xq\u0006Nہ\f=ls\t/G8[\u0000\u0002!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000G\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000TE\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000$\u0016\u0001\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000y% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\n \u0010\u000e\u0002@\u0012\u0000\u0000\u0000\u0000\u000f\u0010\u0002\n%\u000e\u0003\f\u0003\b\u0000\f\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002[k%\u0015λ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ɼ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000v\u0016\u0014\n\u001a^X\n\u0014\t\u00186]f\u0019\u0014\u001b\u001a\"Wc\u0007>\u0014\u000f\u001a\u0016 \u0005\u0014&\u0018\u0000\u0000\u0000\u0000\u0000\u00000\u0001\u0003λλ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00003\u0001\u0001̿\u0000\u0000\u0000\u0000\u0000ûȻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000<\u0001\u0003\u0000\u0000\u0000\u0000\u0000ǻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000o\u0001\u0002\u0000\u0000\u0000\u0000\u0000ǻÿ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\u0001\u0004Ͼ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000x% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/arcadespot.com/genesis/readme",
    "content": "This appears to use the Pico emulator (somehow ported to the browser), judging by the header in the save state. \n\nIf you byte swap the file with a word size of 2 bytes, you can find the header for the in-game save somewhere around offset 0xc716"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/myemulator.online/genesis/readme",
    "content": "This appears to use the Genesis Plus GX emulator (somehow ported to the browser), judging by the header in the save state. I looked through a save state for Phantasy Star IV and couldn't see the SRAM data in any obvious location (SRAM data for this game has a recognizable header)"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/retrogames.onl/gba/advance-wars-gmba.sav",
    "content": "wars\tP\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0018\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000RetroGam\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0001\u0000\u0000\u0001\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0001\u0001\u0000\u0004$Q\u0006؄\b \u0000\u001e\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001Uwars\t\t\u0001\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u00008\u000f\u0001\u0000\u0001\u0000\u0000\u0000\u0006\u0000\u0000\u0004\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0002\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u000e\u0001\b\u0001\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0002\u0001\u0000\u0001\u0000\u0001\u0000\u0000\u0001\u0001\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000p\u0017\u0000\u0000\u0000\u0005\u0000\u0000\u0006\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\r\r\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0002\u0000\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0001\u0000\u0001\u0001\u0001\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0004\u0000\u0001\u0002\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0000\u0006d\u0000c\u0000\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0007d\u0000c\u0000\u0000\u0000\u0000\u0001\u0001\u0000\u0000\bd\u0000c\u0000\u0000\u0000\u0000\u0001\u0001\u0000\u0000\td\u0000c\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0001\u0007\u0001F\u0000\u0000\u0000\u0000\u0001\u0002\u0001\u0001\b\u0001F\u0000\u0000\u0000\u0000\u0001\u0007\u0000\u0002\bd\u0000F\u0000\u0000\u0000\u0000\u0001\u0014\u0000\u0002\u0007d\u0000c\u0000\u0000\u0000\u0000\u0001\n\u0000\u0003\u0006\u00042\u0000\u0000\u0000\u0000\u0001\u000f\u0000\u0003\u0007d\u00032\u0000\u0000\u0000\u0000\u0001\u000b\u0000\u0003\bd\u00032\u0000\u0000\u0000\u0000\u0001\u0013\u0000\u0002\u0005d\u0003c\u0000\u0000\u0000\u0000\u0001\u000e\u0000\u0007\t\u0004<\u0000\u0000\u0000\u0000\u0001\u0003\u0000\u0004\u0006d\u00042\u0000\u0000\u0000\u0000\u0001\u0005\u0000\u0004\b\u0004F\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\r\u0005\u0001F\u0000\u0000\u0000\u0000\u0001\u0002\u0000\r\u0004\u0001F\u0000\u0000\u0000\u0000\u0001\u0001\u0000\n\u0001d\u0000c\u0000\u0000\u0000\u0000\u0001\u0001\u0000\u000e\u0002d\u0000c\u0000\u0000\u0000\u0000\u0001\n\u0000\f\u0003\u00042\u0000\u0000\u0000\u0000\u0001\u000b\u0000\r\u0003d\u00032\u0000\u0000\u0000\u0000\u0000\u0013\u0000\r\u0000d\u0003c\u0000\u0000\u0000\u0000\u0001\u0013\u0000\u0007\u0000d\u0003c\u0000\u0000\u0000\u0000\u0001\u0013\u0000\u000e\u0007d\u0003c\u0000\u0000\u0000\u0000\u0001\u0013\u0000\u000e\u0000d\u0003c\u0000\u0000\u0000\u0000\u0000\u000e\u0000\n\u0003\u0004<\u0000\u0000\u0000\u0000\u0001\u0003\u0000\t\u0001d\u00042\u0000\u0000\u0000\u0000\u0000\u0003\u0000\f\u0004d\u00042\u0000\u0000\u0000\u0000\u0000\u0005\u0000\f\u0005\u0004F\u0000\u0000\u0000\u0000\u0001\u0005\u0000\b\u0001\u0004F\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010o+\bpp+\b\u0019}\u0001\b\u0000\u00000\u0000\u0000\u0002\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000E?\u0000\u0000\u000f\u0000\n\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 8/27 11:50\u0000\u0000\u0000\u0000\u0000Uwars\t&\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0018\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Advance\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0001\u0000\u0000\u0000\f\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0004$Q\u0006؄\b \u0000\u001e\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000U"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/retrogames.onl/gba/golden-sun-gmba.sav",
    "content": "CAMELOT\u0000^a\u0001\u0000\u0000\u0000\u0000\u0000Retro\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\n\u0000\u0017\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\bR\u0016\u0000\u0000\u0000\u0000\nj\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000P\u0000\u0000\u0000\b\u0000\u0000\u0000\u0010\u0000\u0000\u0000 \u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000R\u0016\u0000\u0000\u0017\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0004\u0004\b\b\b\u0010\u0010\u0010   @@@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u000f\u0000\b\u0000\u0010\u0000\u0003\u0000\u000f\u0000\u0003\u00004\u0000\u0000\u0000\u0002\u0000G+\u0001\u0000\u0000\u0000\u0000V/\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0013\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000\u0001\u0001\u0001\u0000\u0000\u0000\u0001\u0000\u0002\u0000\u0004\u0000\b\u0000\u0000\u0002\u0000\u0001\u0002\u0000\u0013\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0010\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\b\u0000\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000R\u0016\u0000\u0000\u0000\u0000\u0000\u0000Retro\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001&\u0000\u0017\u0000\u0000@\u0000@\u0011\u0000\b\u0000\f\u0000\u0003\u0001\u0000\u0000\u0000\u0000h\u0000r\u0000N\u0000X\u0000L\u0000V\u0000M\u0000W\u0000\u001e\u0000\r\u0000\u001e\u0000\r\u0000\u0019\u0000\r\u0000\r\u0000\u0003\u0001\u0000\u0000\u0000\u0000h\u0000r\u0000N\u0000X\u0000L\u0000V\u0000M\u0000W\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0002Y\u0002\u0002\u0010\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Garet\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001)\u0000\u0014\u0000\u0000@\u0000@\u000f\u0000\t\u0000\n\u0000\u0002\u0001\u0000\u0000\u0000\u0000L\u0000V\u0000M\u0000W\u0000h\u0000r\u0000N\u0000X\u0000 \u0000\f\u0000 \u0000\f\u0000\u0015\u0000\u000f\u0000\u0007\u0000\u0002\u0001\u0000\u0000\u0000\u0000L\u0000V\u0000M\u0000W\u0000h\u0000r\u0000N\u0000X\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\u0002Y\u0002\u0002\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Ivan\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00048\u0000&\u0000\u0000@\u0000@\u0016\u0000\u000b\u0000\u001b\u0000\u0004\u0001\u0000\u0000\u0000\u0000M\u0000W\u0000L\u0000V\u0000N\u0000X\u0000h\u0000r\u0000,\u00005\u0000,\u00005\u0000\u0014\u0000\u001b\u0000#\u0000\u0004\u0001\u0000\u0000\u0000\u0000M\u0000W\u0000L\u0000V\u0000N\u0000X\u0000h\u0000r\u0000E\u0000\u0000N\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00007\u0002Z\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0014\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Mia\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\ne\u00009\u0000\u0000@\u0000@,\u0000\u0018\u0000,\u0000\u0005\u0001\u0000\u0000\u0000\u0000N\u0000X\u0000h\u0000r\u0000M\u0000W\u0000L\u0000V\u0000Z\u0000J\u0000Z\u0000J\u0000D\u00006\u0000#\u0000\u0006\u0001\u0000\u0000\u0000\u0000N\u0000X\u0000h\u0000r\u0000M\u0000W\u0000L\u0000V\u0000]\u0000\u0000c\u0000\u0000\u0018\u0000\u0000\u0019\u0000\u0000\u001b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00009\u0002h\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0003\u001e\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Felix\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Jenna\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001$\u0000\u0016\u0000\u0000@\u0000@\u000e\u0000\t\u0000\r\u0000\u0004\u0001\u0000\u0000\u0000\u0000L\u0000V\u0000M\u0000W\u0000h\u0000r\u0000N\u0000X\u0000$\u0000\u001a\u0000$\u0000\u001a\u0000\u0013\u0000\u000f\u0000\u000f\u0000\u0003\u0001\u0000\u0000\u0000\u0000L\u0000V\u0000M\u0000W\u0000h\u0000r\u0000N\u0000X\u0000-\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00007\u0002g\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Sheba\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000PC07\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000CAMELOT\u0003i\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0017\u0000\u0000\u0000\b\t\n\u000b\f\r\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b@2\u0001\b\u0000\u0000\u0000G+\u0001\u0000\u0000\u0000V/\u0003\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0003\u0001\u0003\u0012\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u00008 \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000p \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000 \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000 \u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0018!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000P!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000B\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000!\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000B\u0001\u0005\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u00000\"\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000.\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000h\"\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0005\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0014\u0001\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0002\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\"\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\"\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000k\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0010#\u0000\u0003\u0001\u0000\u0000\u0000\u0000\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001k\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000k\u0002\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000H#\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001k\u0002\\\u0018\u0003\u0002\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000#\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000#\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000#\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000($\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@2\u0001\b\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0001\u0000\b\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000`$\u0000\u0003\u0001\u0003\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0002\u0001\u0002\u0005\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0001\u0001\u0001\u0001\u0001\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
  },
  {
    "path": "frontend/tests/data/save-formats/online-emulators/retrogames.onl/gba/pokemon-sapphire.sav",
    "content": "\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000ң\u0000\u0000\u0000\u0000Ҥ\u0000\u0000\u0000\u0000ҥ\u0000\u0000\u0000\u0000Ҧ\u0000\u0000\u0000\u0000ҧ\u0000\u0000\u0000\u0000Ҩ\u0000\u0000\u0000\u0000ҩ\u0000\u0000\u0000\u0000Ҫ\u0000\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000Ң\u0000\u0000\u0000\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0002\u0003\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\r\u00001% \u0001\b\u0001\u0000\u0000\u0000\u0001\u00006){\u0000\u0000\u0000/\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000!t% \u0001\b\u0001\u0000\u0000\u0000\u0002\u0000\u0005\u0000\u0001\u0002\u0000\u0002\u0000\b\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\f\u0000\n\u0000\u0001\u0003\u0000\u0004\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00008\u0000\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u001f\u0006\u001f\u0006\u001f\u0006\u0017\u0006\u001e\u0006\u001e\u0006n\u0006n\u0006n\u0006\u001e\u0006\u0003\u0003\u0003\u0003\u0003n\u0006o\u0006\t\u0006m\u0006&\u0006&\u0006C\u0006D\u00061\u00062\u0006\u0003\u0003\u0003\u0003\u0003v\u0006w\u0006\u0011\u0002u\u0006x2h>K\u0006L\u00069\u0006:\u0006\u0003\u0003\u0003\u0003\u0003\u00042\u00062\u00052\u00072y2\u00012F2\u00052\u00052\u00052\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00012p>\u0003\f@\u0006A\u0006\u00012\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u0001252.2J2H2I262\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012\u00182\u00192\u001a\u0006\u001b\u0006\u001c2\u001d2\u0003\u0003\u0003\u0003\u0003\u00042\u00012\u00012\u00012 2!2\"\u0006#\u0006$2%2\u0003\u0003\u0003\u0003\u0003\u00042\u0002\u0002\u0003\u0002\u00012(2)2*2+2,2-2\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000\u0000\u0000\u0000\r\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Y\u000b\u0000\u0002\u00013\t\u0000\u000f\u0000\t\u0000\f\u0000\t\u0000\f\u0000\"\u0000\u0000=\u0001\u0000\u0000\u0000\u0002\u0000\u0001\u0000\u0001\u0001\u0000\u0001\u0007\u0000\u0001\u0002\u00010\b\u0000\u000f\u0000\b\u0000\u000f\u0000\b\u0000\u000f\u0000\"\u0000\u0000\u0000\u0000ee\u0002\u0000\u0000\u0000\u0001\u0001\u0000\u0000\u0002`A\u0000\u0002\u0002\u00013\r\u0000\f\u0000\r\u0000\f\u0000\r\u0000\f\u0000\"\u0000\u0000\u0000\u001e\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0003\u0001\u0000\u0000\u0003_\u001b\u0000\u0003\u0002\u00013\u0010\u0000\n\u0000\u000f\u0000\n\u0000\u0010\u0000\n\u00003\u0013\u0000\u0000\n\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0001\u0000\b\u0000\u0003\u0007\u0000\u0000\u0000\u0000\u0000\u0000yk\u001b\b\u0002\u0000\u0000\u0002`\u0000\u0000\u0006\u0000\u0005\u0000\u0003A\u0000\u0000\u0000\u0000\u0000\u00006l\u001b\b\u0002\u0000\u0000\u0003_\u0000\u0000\t\u0000\u0003\u0000\u0003\u001b\u0003\u0000\u0000\u0000\u0000\u0000Il\u001b\b\u0002\u0000\u0000\u0004\u001a\u0000\u0000\b\u0000\u0007\u0000\u0003\t\u0000\u0000\u0000\u0000\u0000\u0000{)\u0015\b\u0011\u0003\u0000\u0000\u0005\u0000\u0000\u0005\u0000\u0006\u0000\u0003\n\u0011\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u00000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000@\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000Xq\u0006Nہ\f=ls\t/G8[\u0000\u0002!\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000 \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000E\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000ʹ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\u0010\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\u0013\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0005\u0002\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0012\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0011\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0015\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0002\u0002\u0002\u0000\u0000\u0000\u0014\u0000\u0003\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0016\u0002\u0002\u0000\u0000\u0000\u0019\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\b\u0002\u0002\u0000\u0000\u0000\u0017\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000\u0007\u0002\u0002\u0000\u0000\u0000$\u0016\u0001\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\u0018\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0006\u0003\u0002\u0000\u0000\u0000\u0003\u0002\u0002\u0000\u0000\u0000\n\u0005\u0002\u0000\u0000\u0000\u0004\u0002\u0002\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0002\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000)\n \u0010\u000e\u0002@\u0012\u0000\u0000\u0000\u0000\u000f\u0010\u0002\n%\u000e\u0003\f\u0003\b\u0000\f\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000f\n)\u0016\u0004\u001a\u0015 \u0015\u000e\u000e \u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000]~\u0000\u0016\u0014\u0016\u001a)\u001b\\&\u0014(\u0018#bR\u0015\u0014'\u0018Q_K8\u0014)\u0018Q/\u0014#\u001a\u0000\u0000\u0000\u0000\u0000\u00000\u0001\u0003λλ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00003\u0001\u0001̿\u0000\u0000\u0000\u0000\u0000ûȻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000:\t% \u0001\b\u0001\u0000\u0000\u0000\u0000\u00006\u0001\u0000ʿƿ\u0000\u0000\u0000\u0000\u0000ÿ̻\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000<\u0001\u0003\u0000\u0000\u0000\u0000\u0000ǻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000o\u0001\u0002\u0000\u0000\u0000\u0000\u0000ǻÿ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000s\u0001\u0004Ͼ\u0000\u0000\u0000\u0000ӻ\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0003\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000x% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0005\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0006\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0007\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\t\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\n\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000b\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0000\f\u0000\u0000\u0000% \u0001\b\u0001\u0000\u0000\u0000"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/C97E.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | C97E - California Games\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>C97E - California Games</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/C97E?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Skylanders: Trap Team (Activision, NTSC-U)\" href=\"https://www.gametdb.com/Wii/SK8E52\"><img src=\"https://art.gametdb.com/wii/cover/US/SK8E52.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">C97E - California Games</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/C96P'>Previous</a> | <a href='https://www.gametdb.com/Wii/C97P'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>C97E\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-C64\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">California Games</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">Welcome to California. Home of the most radical sports in the world. Rad, bad and aggro. You're about to hit the beaches, parks and streets of the Golden State to go for trophies in everything from surfing to bike racing. California Games gives you the hottest sports. And the most aggro competition. You even have to pick your own sponsor.<br clear=\"all\" /><br clear=\"all\" />So pull on those knee pads. You're about to get into the most fun you've ever had since Mom hid your skateboard. California Games is going to take you from surf to the turf. From the pipe to the parks. Are you gonna love it, or what?</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">California Games</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Bienvenido a California. Hogar de los deportes más radicales del mundo. Los excelentes, los malos y los agresivos. Estás a punto de llegar a las playas, parques y calles de la Golden State a ir por todos los trofeos, desde surf a carreras en bicicleta. California Games te ofrece los mejores deportes. Y las competencias más agresivas. Así que ponte los cojines de rodilla. Estás a punto de entrar en lo más divertido que has tenido desde que tu mamá escondió tu patineta. ¡Te va a encantar!</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">캘리포니아 게임즈</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Epyx\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Commodore Gaming\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2009-7-6\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>sports\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>E\n<p><!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>4\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote, classic controller \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk, gamecube pad \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">US</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/US/C97E.png?1400425772\" width=\"160\" height=\"224\" alt=\"California Games VC-C64 cover (C97E)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/US/C97E.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/US/C97E.png?1400425776\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/US/C97E.png?1400425776\" width=\"160\" height=\"224\" alt=\"California Games VC-C64 cover (C97E)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/C97E.png\" alt=\"California Games Wii coverfullHQ (C97E) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/C97E.png?1400425772\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/US/C97E.png?1400425775\" width=\"340\" height=\"224\" alt=\"California Games VC-C64 cover (C97E)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/D40A.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | D40A - Luigi and the Island of Mystery\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>D40A - Luigi and the Island of Mystery</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/D40A?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Puppy Luv: Your New Best Friend (Activision, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RPTE52\"><img src=\"https://art.gametdb.com/wii/cover/US/RPTE52.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">D40A - Luigi and the Island of Mystery</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/D3WA'>Previous</a> | <a href='https://www.gametdb.com/Wii/D42A'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>D40A\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>Homebrew\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Luigi and the Island of Mystery</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">루이지와 미스터리 섬</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2014\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>\n<p><!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>1\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><meta name='thumbnail' content='' />\n</p></td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/DAXE01.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | DAXE01 - The Legend of Zelda: Skyward Sword (Demo)\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>DAXE01 - The Legend of Zelda: Skyward Sword (Demo)</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/DAXE01?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Shaun White Skateboarding (Ubi Soft Entertainment, NTSC-U)\" href=\"https://www.gametdb.com/Wii/SHNE41\"><img src=\"https://art.gametdb.com/wii/cover/US/SHNE41.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">DAXE01 - The Legend of Zelda: Skyward Sword (Demo)</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/DAWA'>Previous</a> | <a href='https://www.gametdb.com/Wii/DAXP01'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>DAXE01\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>Wii\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">The Legend of Zelda: Skyward Sword (Demo)</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">In the chronology of the series, Skyward Sword is a prequel to Ocarina of Time. The incarnation of protagonist Link that appears in the game was born and raised in Skyloft, a group of islands floating above the clouds. Leading an ordinary life there, Link discovers the Skyward Sword one day, which leads him to another, previously unknown land beneath that is ruled by evil forces.Using the sword to travel back and forth between sky and land, the mystery of why the two worlds became separated is gradually revealed to Link. The Skyward Sword becomes the Master Sword at some point in the game, and assumes the form of a female figure while giving Link advice. Producer Eiji Aonuma has stated the game's plot to be comparable to a school drama. Unlike in previous series installments, Zelda is not a princess in Skyward Sword, but a childhood friend of Link. Throughout the course of the game, Zelda disappears and Link has to find her. He is opposed on his quest by the Demon Lord Ghirahim, a mysterious and powerful figure who rules the surface world, who wishes to kidnap Zelda for unknown purposes. Skyward Sword connects to the story of Ocarina of Time, and elaborates on Ganondorf's origins. (Demo version includes Bird Riding, Dungeon, and Boss Battle).<br clear=\"all\" /><br clear=\"all\" />Note:<br clear=\"all\" />The home button can't be used to exit this demo. You will have to power down the Wii to exit.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">The Legend of Zelda: Skyward Sword (Demo)</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Conviértete en el legendario Link y explora tus alrededores como nunca, porque el mando de Wii Plus transforma por completo la experiencia. Empuña las armas de un verdadero héroe y manéjalas con precisión, y prepárate para blandir la espada de forma más estratégica en esta gran aventura épica de Zelda.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">젤다의 전설: 스카이워드 스워드 체험판</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ZHTW)</td><td valign=\"top\" class=\"notranslate\">薩爾達傳說 天空之劍 試玩版(歐)</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ZHTW)</td><td valign=\"top\" class=\"notranslate\">《薩爾達傳說：天空之劍》是迎接推出25周年紀念的《薩爾達傳說》系列最新作，將活用Wii遙控器結合動感強化器所具備的1:1動態偵測功能，讓玩家以Wii遙控器與雙節棍控制器來操作林克的寶劍與盾牌，展開直覺體感的戰鬥解謎冒險。<br clear=\"all\" /><br clear=\"all\" />遊戲以飄浮於天際、受女神祝福的天空群島「天空閣樓」為冒險起點。在天空閣樓營生的居民，會與自己的守護鳥兼坐騎「閣樓鳥」一同生活。遊戲中玩家將扮演居住在天空頂樓的騎士學校青年學生林克，為了在測試人鳥默契的「乘鳥儀式」中獲得優勝，從扮演女神的青梅竹馬少女薩爾達手中接過意義重大的禮物，而不斷磨練身手。<br clear=\"all\" /><br clear=\"all\" />某天夜裡，幻化為人形的傳說聖劍「天空之劍」精靈「菲」出現在林克面前，傳達給他重大命運的訊息。在菲的引導下，林克朝向雲海底下被魔物佔據的未知大地「海拉爾」出發，展開全新冒險，解開「主宰神劍」的由來之謎。</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ZHCN)</td><td valign=\"top\" class=\"notranslate\">萨尔达传说 天空之剑 试玩版(欧)</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ZHCN)</td><td valign=\"top\" class=\"notranslate\">《萨尔达传说：天空之剑》是迎接推出25周年纪念的《萨尔达传说》系列最新作，将活用Wii遥控器结合动感强化器所具备的1:1动态侦测功能，让玩家以Wii遥控器与双节棍控制器来操作林克的宝剑与盾牌，展开直觉体感的战斗解谜冒险。<br clear=\"all\" /><br clear=\"all\" />游戏以飘浮于天际、受女神祝福的天空群岛“天空阁楼”为冒险起点。在天空阁楼营生的居民，会与自己的守护鸟兼坐骑“阁楼鸟”一同生活。游戏中玩家将扮演居住在天空顶楼的骑士学校青年学生林克，为了在测试人鸟默契的“乘鸟仪式”中获得优胜，从扮演女神的青梅竹马少女萨尔达手中接过意义重大的礼物，而不断磨练身手。<br clear=\"all\" /><br clear=\"all\" />某天夜里，幻化为人形的传说圣剑“天空之剑”精灵“菲”出现在林克面前，传达给他重大命运的讯息。在菲的引导下，林克朝向云海底下被魔物占据的未知大地“海拉尔”出发，展开全新冒险，解开“主宰神剑”的由来之谜。</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Nintendo EAD\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Nintendo\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2011-11-1\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>adventure\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>E10+\n<p><!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>1\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote, nunchuk, motion plus \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'> \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr><tr ><td class='head' align='right'  valign='top'>case\n</td><td  valign='top'>\n<table border='1' width='16' height='16' bgcolor='#ffffff' >\n</table>\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">US</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/US/DAXE01.png?1352648176\" width=\"160\" height=\"224\" alt=\"The Legend of Zelda: Skyward Sword (Demo) Wii cover (DAXE01)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/US/DAXE01.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/US/DAXE01.png?1352648179\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/US/DAXE01.png?1352648179\" width=\"160\" height=\"224\" alt=\"The Legend of Zelda: Skyward Sword (Demo) Wii cover (DAXE01)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/DAXE01.png\" alt=\"The Legend of Zelda: Skyward Sword (Demo) Wii coverfullHQ (DAXE01) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/DAXE01.png?1352648176\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/US/DAXE01.png?1352648178\" width=\"340\" height=\"224\" alt=\"The Legend of Zelda: Skyward Sword (Demo) Wii cover (DAXE01)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover2/US/DAXE01.png?1352330055\" width=\"160\" height=\"224\" alt=\"The Legend of Zelda: Skyward Sword (Demo) Wii cover (DAXE01)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D2/US/DAXE01.png?1352330055\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D2/US/DAXE01.png?1352330055\" width=\"160\" height=\"224\" alt=\"The Legend of Zelda: Skyward Sword (Demo) Wii cover (DAXE01)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:180px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/disc/US/DAXE01.png?1352648206\" width=\"160\" height=\"160\" alt=\"The Legend of Zelda: Skyward Sword (Demo) Wii disc (DAXE01)\" /></span>\n</div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/E6ZJ.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | E6ZJ - Star Force\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>E6ZJ - Star Force</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/E6ZJ?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Gunblade NY & LA Machineguns: Arcade Hits Pack (Sega Japan, NTSC-U)\" href=\"https://www.gametdb.com/Wii/SQDE8P\"><img src=\"https://art.gametdb.com/wii/cover/US/SQDE8P.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">E6ZJ - Star Force</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/E6ZE'>Previous</a> | <a href='https://www.gametdb.com/Wii/E6ZP'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>E6ZJ\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-J\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-Arcade\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>JA\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Star Force</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">The classic vertical-scrolling shooter and a huge nationwide hit! Exhilarating play in which you can shoot down enemy units one after another with a single button. Hidden special bonuses scattered in all 25 areas. 1,000,000 bonus points for solving the biggest mystery. Rapid fir gained by docking with an ally unit, the PURSER. With various elements and rapid-fire play requiring strong and agile finger control, this is the mother of all shooters! Various settings (customizing the starting number of Final Stars, the difficulty of the game, etc.) are available! </td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (JA)</td><td valign=\"top\" class=\"notranslate\">Star Force</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (JA)</td><td valign=\"top\" class=\"notranslate\">宇宙空間を舞台に、自機「ファイナルスター」を操って次々にあらわれる敵機の編隊を撃ち落としていく縦スクロールタイプのシューティングゲーム。ワンボタンを駆使して敵機を撃墜する爽快感や全２５エリアの至る所に配置された隠しスペシャルボーナスなど、様々な要素が人気を博しました。ＤＩＰスイッチ設定機能も搭載しており、 自機残数や難易度の変更など、お好みの設定でゲームを遊ぶこともできます。</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">스타 포스</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Tehkan\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Tecmo\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2014-1-1\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>action, shooter\n<p><!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>2\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><meta name='thumbnail' content='' />\n</p></td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/EAEP.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | EAEP - Samurai Shodown\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>EAEP - Samurai Shodown</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/EAEP?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Nickelodeon Dance 2 (2K Play, NTSC-U)\" href=\"https://www.gametdb.com/Wii/SU2E54\"><img src=\"https://art.gametdb.com/wii/cover/US/SU2E54.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">EAEP - Samurai Shodown</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/EAEJ'>Previous</a> | <a href='https://www.gametdb.com/Wii/EAFE'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>EAEP\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>PAL\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-NEOGEO\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Samurai Shodown</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">This first entry in the extremely popular and revolutionary fighting-game series was released in 1993. Choose from twelve swordsmen with highly individualistic characteristics and fight furiously, ultimately confronting the evil Amakusa Shiro Tokisada. Each character wields his/her own specific weapon, but you must be careful not to lose it during the heat of battle. Some of the fighters also bring an animal companion into the fray, offering a unique aspect to the quick-paced action. Another significant feature of the game is the anger gauge, which indicates the level of anger felt by each of the combatants as repeated injuries are suffered. If the anger reaches its maximum level, the attacking ability of the character increases, leading to even more intense confrontations. Through it all, the refined camera system smoothly zooms in and out of the playing field, presenting the frenzy of the battle while showcasing the lively background (watch as the referee scores hits!). Awake the samurai spirit within and get ready for a new kind of fight! </td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (FR)</td><td valign=\"top\" class=\"notranslate\">Samurai Shodown</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (FR)</td><td valign=\"top\" class=\"notranslate\">Samurai Shodown sur Neo Geo est un jeu de combat se déroulant au XVIIIème siècle au Japon. Le titre intègre des modifications par rapport aux classiques du genre telles que l'utilisation d'armes blanches, un système de zoom ainsi qu'une jauge POW se remplissant au fil du combat et débloquant des attaques puissantes.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (DE)</td><td valign=\"top\" class=\"notranslate\">Samurai Shodown</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (DE)</td><td valign=\"top\" class=\"notranslate\">Dieses in der Samurai-Ära handelnde Schwertkampfspiel erschien 1993. Zwölf Schwertkämpfer aus aller Welt, jeder mit einer ausgeprägten Persönlichkeit, kämpfen verbissen miteinander, um endlich dem finsteren Amakusa Shiro Tokisada im Duell gegenüberzustehen.<br clear=\"all\" /><br clear=\"all\" />Die Wutanzeige, die den Zorn der einzelnen Schwertkämpfer über ihre erhaltenen Verletzungen anzeigt, ist vielleicht das originellste Merkmal des Spiels. Wenn die Wut ihr Höchstmaß erreicht, verbessert sich die Angriffsfähigkeit deines Kämpfers enorm und lässt dich voller Raserei über deinen Gegner herfallen.<br clear=\"all\" /><br clear=\"all\" />Mit seiner der entsprechenden Periode nachempfundenen Musik, den detaillierten Charakteren und Hintergründen sowie seiner großen Vielfalt verschiedenster Attacken und Paraden ist Samurai Showdown ein beeindruckendes Stück Prügelspiel-Geschichte.<br clear=\"all\" /><br clear=\"all\" />Englischer Bildschirmtext.<br clear=\"all\" />Unterstützt den Interlace-Modus mit dem Wii-Komponenten-Video-Kabel.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">Samurai Shodown</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Esta primera entrada de la extremadamente popular y revolucionaria serie de juegos de lucha fue lanzada en 1993. Elige entre doce espadas con características muy individualistas y lucha con furia, en última instancia, contra el malvado Amakusa Shiro Tokisada. Cada personaje utiliza su arma específica, pero hay que tener cuidado de no perderlo durante el fragor de la batalla. Algunos de los luchadores también traen un animal de compañía en la refriega, que ofrece un aspecto único a la rápida acción. Otra característica importante del juego es el medidor de ira, lo que indica el nivel de enojo que siente cada uno de los combatientes como lesiones repetidas sufrido. Si la cólera llega a su máximo nivel, la capacidad de atacar aumenta de carácter, dando lugar a enfrentamientos aún más intensos. A pesar de todo, el sistema de cámaras refinado suavemente acerca y se aleja del campo de juego, presentando el frenesí de la batalla al tiempo que muestra el fondo animado (¡vea como el árbitro otorga puntuaciones!). ¡Despierte el espíritu samurai dentro suyo y prepárese para un nuevo tipo de lucha! </td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (IT)</td><td valign=\"top\" class=\"notranslate\">Samurai Shodown</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (IT)</td><td valign=\"top\" class=\"notranslate\">Ambientato all'epoca dei samurai, questo gioco di combattimento frenetico e iperviolento suscitò notevoli discussioni al momento della sua pubblicazione nel 1993. Dodici spadaccini giunti da tutto il mondo e dotati di spiccate caratteristiche individuali si cimentano in furiosi combattimenti per arrivare allo scontro finale con Amakusa Shiro Tokisada.<br clear=\"all\" /><br clear=\"all\" />La funzione principale del gioco è l'indicatore della rabbia, che aumenta mano a mano che un combattente viene colpito. Quando l'indicatore raggiunge il livello massimo, le sue abilità di attacco aumentano e, con esse, l'intensità del combattimento!<br clear=\"all\" /><br clear=\"all\" />Grazie alla colonna sonora, che riprende motivi autenticamente giapponesi, alle ambientazioni e ai personaggi ben definiti e alla grande varietà di mosse a disposizione, Samurai Showdown offre senza dubbio un'intensa esperienza di gioco!<br clear=\"all\" /><br clear=\"all\" />Il testo all'interno del gioco è in inglese.<br clear=\"all\" />Supporta la modalità interlacciata per il cavo AV Component per Wii.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (NL)</td><td valign=\"top\" class=\"notranslate\">Samurai Shodown</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (NL)</td><td valign=\"top\" class=\"notranslate\">Dit snelle en uiterst gewelddadige vechtspel, dat zich afspeelt in Japan ten tijde van de samoerai, werd al snel het onderwerp van discussie toen het in 1993 werd uitgebracht. Twaalf gewapende strijders van over de hele wereld, elk met unieke eigenschappen, vechten vol overgave om uiteindelijk de confrontatie aan te gaan met Amakusa Shiro Tokisada.<br clear=\"all\" /><br clear=\"all\" />Misschien wel het meest opmerkelijke aan dit spel is de ‘woedemeter’, die gevuld wordt naarmate je meer geraakt wordt. Als de meter vol is, neemt je aanvalskracht sterk toe, zodat je je helemaal kunt uitleven op je tegenstander!<br clear=\"all\" /><br clear=\"all\" />Met authentieke, historische Japanse muziek, gedetailleerde personages en achtergronden, en een scala aan aanvallen is Samurai Showdown een geweldig hoofdstuk in de geschiedenis van de vechtspellen.<br clear=\"all\" /><br clear=\"all\" />Het spel is voorzien van Engelse schermteksten.<br clear=\"all\" />Handleiding alleen beschikbaar in Engels, Frans, Duits, Spaans en Italiaans.<br clear=\"all\" />Ondersteunt interlace modus met het componentsnoer voor Wii.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">사무라이 쇼다운</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ZHCN)</td><td valign=\"top\" class=\"notranslate\">侍魂(欧)</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>SNK\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'> D4 Enterprise, Inc.\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2008-5-30\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>fighting\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>12\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>violence\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>2\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk, classic controller, gamecube pad \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n<tr><td class=\"head\" align=\"right\" valign=\"top\">version</td><td valign=\"top\"> (1)</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">size</td><td valign=\"top\">0</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">crc</td><td valign=\"top\">5bd3f1f0</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">md5</td><td valign=\"top\">f5b472291fcf9de692401fbf276d3792</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">sha1</td><td valign=\"top\">353bf7b664bbbe1342cbcd3b4d9a44999716ed79</td></tr>\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">EN</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/EN/EAEP.png?1396556916\" width=\"160\" height=\"224\" alt=\"Samurai Shodown VC-NEOGEO cover (EAEP)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/EN/EAEP.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/EN/EAEP.png?1396556918\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/EN/EAEP.png?1396556918\" width=\"160\" height=\"224\" alt=\"Samurai Shodown VC-NEOGEO cover (EAEP)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/EN/EAEP.png\" alt=\"Samurai Shodown Wii coverfullHQ (EAEP) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/EN/EAEP.png?1396556915\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/EN/EAEP.png?1396556917\" width=\"340\" height=\"224\" alt=\"Samurai Shodown VC-NEOGEO cover (EAEP)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover2/EN/EAEP.png?1317735932\" width=\"160\" height=\"224\" alt=\"Samurai Shodown VC-NEOGEO cover (EAEP)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D2/EN/EAEP.png?1317736099\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D2/EN/EAEP.png?1317736099\" width=\"160\" height=\"224\" alt=\"Samurai Shodown VC-NEOGEO cover (EAEP)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:132px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/wwtitle/EN/EAEP.png?1317737229\" width=\"192\" height=\"112\" alt=\"Samurai Shodown VC-NEOGEO cover (EAEP)\" /></span>\n</div>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">FR</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/FR/EAEP.png?1317735978\" width=\"160\" height=\"224\" alt=\"Samurai Shodown pochette VC-NEOGEO (EAEP)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/FR/EAEP.png?1317736119\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/FR/EAEP.png?1317736119\" width=\"160\" height=\"224\" alt=\"Samurai Shodown pochette VC-NEOGEO (EAEP)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/FR/EAEP.png\" alt=\"Samurai Shodown Wii coverfullHQ (EAEP) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/FR/EAEP.png?1317736607\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/FR/EAEP.png?1317736221\" width=\"340\" height=\"224\" alt=\"Samurai Shodown pochette VC-NEOGEO (EAEP)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/FBNE.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | FBNE - Ninja Gaiden\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>FBNE - Ninja Gaiden</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/FBNE?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Lost in Shadow - Press Disc (Demo) (Hudson Soft, NTSC-U)\" href=\"https://www.gametdb.com/Wii/DDWE18\"><img src=\"https://art.gametdb.com/wii/cover/US/DDWE18.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">FBNE - Ninja Gaiden</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/FBLM'>Previous</a> | <a href='https://www.gametdb.com/Wii/FBNJ'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>FBNE\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-NES\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Ninja Gaiden</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">Players take on the role of Ryu Hayabusa, a rising warrior in his family's clan whose main role in the world is to protect the Dark Dragon Blade from falling into the hands of evil. Ryu travels to America to seek vengeance for his father's death. Players fight their way through 14 challenging side-scrolling levels while defeating gangs of street thugs, battling evil ninjas and fighting barbarian bosses by using the deadly Dragon Sword, ninja skills and Ninpo (ninja magic). Players can run, crouch, jump and climb as they make their way through each stage and collect items to gain points, strength and weapons. </td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">Ninja Gaiden</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">El jugador es Ryu Hayabusa, un guerrero con mucho futuro en el clan de su familia. Su papel en esta vida es proteger la Espada del Dragón Oscuro e impedir que caiga en manos del Mal. Ryu Hayabusa viaja a los Estados Unidos para vengar la muerte de su padre. El jugador debe combatir para abrirse camino a través de seis niveles de desplazamiento horizontal mientras derrota a bandas de delincuentes callejeros, malvados ninja y despiadados jefes de mafias locales utilizando la mortal Espada del Dragón, sus técnicas ninja y el Ninpo, la magia ninja. El jugador puede correr, agacharse, saltar y trepar para superar cada nivel y recoger objetos para ganar puntos, fuerza y armas.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">닌자 가이덴</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Tecmo\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Tecmo\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2007-5-14\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>action, adventure\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>E\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>mild violence\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>1\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk, classic controller, gamecube pad \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">US</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/US/FBNE.png?1390781623\" width=\"160\" height=\"224\" alt=\"Ninja Gaiden VC-NES cover (FBNE)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/US/FBNE.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/US/FBNE.png?1390781625\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/US/FBNE.png?1390781625\" width=\"160\" height=\"224\" alt=\"Ninja Gaiden VC-NES cover (FBNE)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/FBNE.png\" alt=\"Ninja Gaiden Wii coverfullHQ (FBNE) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/FBNE.png?1390757442\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/US/FBNE.png?1390757443\" width=\"340\" height=\"224\" alt=\"Ninja Gaiden VC-NES cover (FBNE)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover2/US/FBNE.png?1317736059\" width=\"160\" height=\"224\" alt=\"Ninja Gaiden VC-NES cover (FBNE)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D2/US/FBNE.png?1317736155\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D2/US/FBNE.png?1317736155\" width=\"160\" height=\"224\" alt=\"Ninja Gaiden VC-NES cover (FBNE)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:132px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/wwtitlealt/US/FBNE.png?1317737236\" width=\"192\" height=\"112\" alt=\"Ninja Gaiden VC-NES cover (FBNE)\" /></span>\n</div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/JECE.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | JECE - Chrono Trigger\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>JECE - Chrono Trigger</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/JECE?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Nat Geo Challenge! Wild Life (D3 Publisher, NTSC-U)\" href=\"https://www.gametdb.com/Wii/SGEEG9\"><img src=\"https://art.gametdb.com/wii/cover/US/SGEEG9.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">JECE - Chrono Trigger</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/JEBP'>Previous</a> | <a href='https://www.gametdb.com/Wii/JECJ'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>JECE\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-SNES\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Chrono Trigger</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">The millennium. A portal is opened. The chain of time is broken.<br clear=\"all\" /><br clear=\"all\" />A young man is transported into the past, altering the course of history and the outcome of the future. He has to find his way home, but first he must travel to the outer edges of time to repair the world’s chronology. On the way, he encounters strange friends and foes, utilizes incredible devices and vehicles, and penetrates and neutralizes the fortresses of the past, present, and future. A paradox has been created. If he does not restore the order of time, nothing will ever be the same. He is the one who will become a hero. He is Crono.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">Chrono Trigger</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Chrono Trigger trata sobre un grupo de aventureros que viajan en el tiempo para salvar al planeta de su terrible futuro. En el camino irán haciendo aliados de otros periodos de tiempo para así destruir al parásito extraterrestre, Lavos, quien destruye lentamente al mundo. El grupo viaja por medio de portales del tiempo y la máquina del tiempo, Epoch, a siete épocas distintas: la Era Prehistórica (65,000,000 B.C.), los Tiempos Oscuros (12,000 B.C.), la Edad Media (600 A.D.), el Presente (1000 A.D.), el día del Apocalipsis (1999 A.D.), el Futuro (2300 A.D.) y el Final del Tiempo.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">크로노 트리거</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Square Enix\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Square Enix\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2011-5-16\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>role-playing\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>E10+\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>mild fantasy violence\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>1\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote, classic controller \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk, gamecube pad \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">US</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/US/JECE.png?1392219903\" width=\"160\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/US/JECE.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/US/JECE.png?1392219904\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/US/JECE.png?1392219904\" width=\"160\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/JECE.png\" alt=\"Chrono Trigger Wii coverfullHQ (JECE) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/JECE.png?1392170105\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/US/JECE.png?1392170106\" width=\"340\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover2/US/JECE.png?1392170295\" width=\"160\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D2/US/JECE.png?1392170299\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D2/US/JECE.png?1392170299\" width=\"160\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ2/US/JECE.png\" alt=\"Chrono Trigger Wii coverfullHQ2 (JECE) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ2/US/JECE.png?1392170295\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull2/US/JECE.png?1392170298\" width=\"340\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/coverB/US/JECE.png?1317736075\" width=\"160\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3DB/US/JECE.png?1317736160\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3DB/US/JECE.png?1317736160\" width=\"160\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQB/US/JECE.png\" alt=\"Chrono Trigger Wii coverfullHQB (JECE) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQB/US/JECE.png?1317736967\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfullB/US/JECE.png?1317736305\" width=\"340\" height=\"224\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:132px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/wwtitle/US/JECE.png?1317737233\" width=\"192\" height=\"112\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></span>\n</div>\n<div style=\"width:350px;height:132px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/wwtitlealt/US/JECE.png?1326312226\" width=\"192\" height=\"112\" alt=\"Chrono Trigger VC-SNES cover (JECE)\" /></span>\n</div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/LADE.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | LADE - Phantasy Star\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>LADE - Phantasy Star</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/LADE?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Marvel: Ultimate Alliance 2 (Activision, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RMSE52\"><img src=\"https://art.gametdb.com/wii/cover/US/RMSE52.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">LADE - Phantasy Star</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/LACP'>Previous</a> | <a href='https://www.gametdb.com/Wii/LADJ'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>LADE\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-SMS\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Phantasy Star</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">Originally released on the Sega Master System, Phantasy Star is a pioneer in the role-playing game genre. Relive this classic, where you play as Alis, the fearless female protoganist out to avenge her brother's death by the cruel dictator King Lassic. Guide Alis and her troop through the sprawling environments of the Agol solar system, in an attempt to defeat King Lassic and liberate the people of Agol. Engage in dynamic turn-based combat with dragons, ghouls, giants, and magicians by using unique weapons such as glowing daggers, crossbows, and of course... magic spells. </td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">Phantasy Star</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Originalmente lanzado para Sega Master System, Phantasy Star es un pionero en el género de los juegos de rol. Reviva este clásico, donde usted juega como Alis, la protagonista sin temor, para vengar la muerte de su hermano por el cruel dictador Rey Lassic. Guíe a Alis y sus tropas a través de los entornos en expansión del sistema solar Agol, en un intento de derrotar al rey Lassic y liberar al pueblo de Agol. Participe dinámicos combates basados en turnos con dragones, demonios, gigantes y magos mediante el uso de únicas armas, tales como dagas brillantes, ballestas, y por supuesto ... hechizos.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">판타지 스타</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>SEGA of America\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>SEGA of America\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2009-8-31\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>role-playing\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>E10+\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>animated blood, mild fantasy violence\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>1\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote, classic controller \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk, gamecube pad \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">US</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/US/LADE.png?1399597269\" width=\"160\" height=\"224\" alt=\"Phantasy Star VC-SMS cover (LADE)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/US/LADE.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/US/LADE.png?1399597271\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/US/LADE.png?1399597271\" width=\"160\" height=\"224\" alt=\"Phantasy Star VC-SMS cover (LADE)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/LADE.png\" alt=\"Phantasy Star Wii coverfullHQ (LADE) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/LADE.png?1399597268\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/US/LADE.png?1399597271\" width=\"340\" height=\"224\" alt=\"Phantasy Star VC-SMS cover (LADE)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:132px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/wwtitle/US/LADE.png?1317737232\" width=\"192\" height=\"112\" alt=\"Phantasy Star VC-SMS cover (LADE)\" /></span>\n</div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/MC4E.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | MC4E - Strider\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>MC4E - Strider</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/MC4E?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Alien Syndrome (Sega of America, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RLSE8P\"><img src=\"https://art.gametdb.com/wii/cover/US/RLSE8P.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">MC4E - Strider</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/MC3P'>Previous</a> | <a href='https://www.gametdb.com/Wii/MC4J'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>MC4E\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-MD\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Strider</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">The year is 2048. The Striders, ninja-like agents and the last defenders of justice on Earth, are the only hope to stop Grandmaster Meio from ruling the world. Hiryu, the youngest Strider to achieve Class A ranking, embarks on a mission to assassinate the evil Grandmaster with his plasma sword, called a Cypher. Guide Hiryu as he jumps, slides and hangs throughout the Eastern European nation of Kazafu in a battle to find the evil dictator.<br clear=\"all\" /><br clear=\"all\" />This hit action Mega Drive game will transport you back to 1990 with all the action you’ve come to expect:<br clear=\"all\" />• Power-ups increase Hiryu’s attack range and help him gain extra lives throughout each level by defeating enemies.<br clear=\"all\" />• Summon help from robotic allies to help you fight enemies.<br clear=\"all\" />• Explore five levels: The nation of Kazafu, the Siberian Wilderness, the Aerial Battleship Ballog, the Amazonian Jungle and the Third Moon (the Grandmaster’s Lair). </td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">Strider</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Es el año 2048. Los Striders, agentes ninja y los últimos defensores de la justicia en la Tierra, son la única esperanza para detener al Gran Maestro Meio, quien ambisiona gobernar el mundo. Hiryu, el más joven de los Strideren obtener una clasificación de Clase A, se embarca en una misión para asesinar al cruel Gran Maestro con su espada de plasma, llamada Cypher. Guía a Hiryu mientras salta, se desliza y cuelga a travez de toda la nación de Kazafu al este de Europa en una batalla para encontrar el malvado dictador.<br clear=\"all\" /><br clear=\"all\" />Este exitoso juego de acción te transportará de nuevo a 1990 con toda la acción que has de esperar:<br clear=\"all\" />• Power-ups incrementan el rango de ataque de Hiryu y le ayudan a ganar vidas extra a lo largo de cada nivel, al derrotar a los enemigos.<br clear=\"all\" />• Convoca la ayuda de aliados robóticos para luchar contra los enemigos.<br clear=\"all\" />• Explora los cinco niveles: la nación de Kazafu, el desierto siberiano, la nave de Batalla aerea Ballog, la selva amazónica y la tercera luna (la Guarida del Gran Maestro).</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">스트라이더</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>SEGA of America\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>SEGA of America\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2012-2-16\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>action, arcade\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>E10+\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>fantasy violence, suggestive themes\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>1\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote, classic controller \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk, gamecube pad \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">US</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/US/MC4E.png?1395529229\" width=\"160\" height=\"224\" alt=\"Strider VC-MD cover (MC4E)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/US/MC4E.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/US/MC4E.png?1395529231\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/US/MC4E.png?1395529231\" width=\"160\" height=\"224\" alt=\"Strider VC-MD cover (MC4E)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/MC4E.png\" alt=\"Strider Wii coverfullHQ (MC4E) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/MC4E.png?1395529228\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/US/MC4E.png?1395529231\" width=\"340\" height=\"224\" alt=\"Strider VC-MD cover (MC4E)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover2/US/MC4E.png?1331160659\" width=\"160\" height=\"224\" alt=\"Strider VC-MD cover (MC4E)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D2/US/MC4E.png?1331160664\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D2/US/MC4E.png?1331160664\" width=\"160\" height=\"224\" alt=\"Strider VC-MD cover (MC4E)\" /></a></span>\n</p></div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/NADJ.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | NADJ - Star Fox 64\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>NADJ - Star Fox 64</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/NADJ?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Block Party 20 Games (Activision, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RRTE52\"><img src=\"https://art.gametdb.com/wii/cover/US/RRTE52.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">NADJ - Star Fox 64</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/NADE'>Previous</a> | <a href='https://www.gametdb.com/Wii/NADP'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>NADJ\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-J\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-N64\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>JA\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Star Fox 64</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">Andross has launched an all-out attack on the Lylat System, and only Fox McCloud and the Star Fox team stand in his way. Jump into your Arwing fighter, Landmaster tank or Blue Marine sub, and blast Andross’s forces into atoms!<br clear=\"all\" /><br clear=\"all\" />Battle through 15 varied levels of air, space, land and undersea combat. Discover hidden paths in forward-scrolling missions and switch into All-Range Mode for full 360-degree manoeuvring missions, performing wild aerial somersaults and daring U-turns to shake off the enemy.<br clear=\"all\" /><br clear=\"all\" />Lylat Wars™ also features a VS. mode for up to four players to battle it out in three thrilling game types: Point Match, Battle Royal and Time Battle.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (JA)</td><td valign=\"top\" class=\"notranslate\">Star Fox 64</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (JA)</td><td valign=\"top\" class=\"notranslate\">スーパーファミコン版「スターフォックス」の豪華版。随所にフルボイスのムービーが流れる臨場感いっぱいの３Ｄシューティングゲームです。プレイヤーはフォックスとなり、仲間たちと協力し、各ステージの作戦をクリアして惑星ベノムを目指します。惑星ベノムまでのルートは特定のステージのクリア条件によって分岐し、また、仲間が戦闘から離脱せず一定数の敵機を撃墜することでもらえる各ステージの勲章をすべて集めれば、難易度の高いエクストラモードのステージが楽しめます。対戦専用のＶＳモードでは４人までのプレイが可能。生き残りを賭けた撃ち合いや対戦相手を撃ち落とした回数を競うこともできます。詳細は、</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">스타 폭스 64</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Nintendo\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Nintendo\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2014-1-1\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>action, shooter\n<p><!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>4\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">JA</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/JA/NADJ.png?1535709825\" width=\"160\" height=\"224\" alt=\"Star Fox 64 VC-N64 cover (NADJ)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/JA/NADJ.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/JA/NADJ.png?1535709827\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/JA/NADJ.png?1535709827\" width=\"160\" height=\"224\" alt=\"Star Fox 64 VC-N64 cover (NADJ)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/NAJE.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | NAJE - Star Fox 64\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>NAJE - Star Fox 64</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wiiu/latest/latestartwork_1620901304.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/WiiU/ALJEWR\" shape=\"rect\" coords=\"0,0,57,80\" title=\"LEGO Jurassic World (Warner Bros. Interactive Entertainment Inc.)\" />\n<area href=\"https://www.gametdb.com/WiiU/WSCE\" shape=\"rect\" coords=\"61,0,118,80\" title=\"Scoop! Around the World in 80 Spaces (BNC Design Studios)\" />\n<area href=\"https://www.gametdb.com/WiiU/WSKE\" shape=\"rect\" coords=\"122,0,179,80\" title=\"Azure Snake (RandomSpin)\" />\n<area href=\"https://www.gametdb.com/WiiU/BRDJQC\" shape=\"rect\" coords=\"183,0,240,80\" title=\"Rodea the Sky Soldier (Kadokawa Shoten)\" />\n<area href=\"https://www.gametdb.com/WiiU/AV5P\" shape=\"rect\" coords=\"244,0,301,80\" title=\"Seasonal Assistant (Ultra Dolphin Revolution)\" />\n<area href=\"https://www.gametdb.com/WiiU/AV5E\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Seasonal Assistant (Ultra Dolphin Revolution)\" />\n<area href=\"https://www.gametdb.com/WiiU/WZ9E\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Crystorld (Toyuro)\" />\n<area href=\"https://www.gametdb.com/WiiU/WSKP\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Azure Snake (RandomSpin)\" />\n<area href=\"https://www.gametdb.com/WiiU/ADJP\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Dying is Dangerous (CarbonFire Studio)\" />\n<area href=\"https://www.gametdb.com/WiiU/ADJE\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Dying is Dangerous (CarbonFire Studio )\" />\n<area href=\"https://www.gametdb.com/WiiU/WUSP\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Super Ultra Star Shooter (Ultra Dolphin Revolution)\" />\n<area href=\"https://www.gametdb.com/WiiU/WUSE\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Super Ultra Star Shooter (Ultra Dolphin Revolution)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/WiiU/NAJE?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'>Wii U Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/WiiU/Search' rel='nofollow'>Wii U Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiU/Downloads' rel='nofollow'>Wii U Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/WiiU/List'>Wii U Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/WiiU/LatestUploads'>Latest Wii U Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/WiiU/Latest'>Latest Wii U Additions</a> <a class='wikilink' href='https://www.gametdb.com/WiiU/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Legend of Kay Anniversary (Nordic Games, NTSC-U)\" href=\"https://www.gametdb.com/WiiU/BLKE6V\"><img src=\"https://art.gametdb.com/wiiu/cover/US/BLKE6V.jpg\" width=160 height=224></a><br/><br/>\n<a title=\"Axiom Verge (Limited Run Games, NTSC-U)\" href=\"https://www.gametdb.com/WiiU/AVEE0W\"><img src=\"https://art.gametdb.com/wiiu/cover/US/AVEE0W.jpg\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">NAJE - Star Fox 64</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/WiiU/NAHP'>Previous</a> | <a href='https://www.gametdb.com/WiiU/NAJJ'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>NAJE\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-N64\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Star Fox 64</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">Players take the controls of their Arwing and complete 15 missions to reach the final objective: a showdown on Venom, the home planet of the interplanetary tyrant, Andross. Throughout the adventure, players have to accomplish challenging objectives in order to reach and conquer every mission. Skim over the surface of an alien sea, weave through the concrete canyons of a futuristic metropolis or dodge planetoids the size of mountains. Between missions, players will be treated to real-time 3-D movies that progress the story of the Star Fox team of space mercenaries in their struggle against the evil ape emperor, Andross.</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Nintendo\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Nintendo\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2016-3-24\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>action, shooter\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>E\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>violence\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>4\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'> \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>pad, pro controller, wiimote, classic controller \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr><tr ><td class='head' align='right'  valign='top'>case\n</td><td  valign='top'>\n<table border='1' width='16' height='16' bgcolor='#0096c9' >\n</table>\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><meta name='thumbnail' content='' />\n</p></td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/QAPN.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | QAPN - Castlevania Rondo of Blood\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>QAPN - Castlevania Rondo of Blood</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625601483.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"0,0,57,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"61,0,118,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"122,0,179,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"183,0,240,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"244,0,301,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Wii Sports (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Wii Sports (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Wii Sports (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/HACA\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Mii Channel (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/HACA\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Mii Channel (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RHAP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Play (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/QAPN?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Dead Space: Extraction (Electronic Arts, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RZJE69\"><img src=\"https://art.gametdb.com/wii/cover/US/RZJE69.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">QAPN - Castlevania Rondo of Blood</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/QAPL'>Previous</a> | <a href='https://www.gametdb.com/Wii/QAPP'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>QAPN\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>VC-PCE\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Castlevania Rondo of Blood</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">This is the tenth action-packed installment in the ever-popular Castlevania series, which depicts the epic struggle between the Belmont clan and the dark forces of Count Dracula! An instant classic, this title is recognized far and wide for its beautifully rendered world, outstanding game balance, and its haunting CD-quality game music!<br clear=\"all\" /><br clear=\"all\" />The player takes control of RICHTER, the clan’s ultimate Vampire Killer, guiding him through a total of 9 stages filled with treacherous traps and hidden secrets.<br clear=\"all\" /><br clear=\"all\" />Using your legendary whip, passed on from generations of Belmonts, and a powerful selection of Item Crash attacks, it’s up to you to destroy Dracula and his evil horde.<br clear=\"all\" /><br clear=\"all\" />What’s more, rescuing MARIA at some juncture in the game allows you to use her as a playable character for even more vampire-slaying fun!<br clear=\"all\" /><br clear=\"all\" />Note:<br clear=\"all\" /><br clear=\"all\" />This game was not previously released on the TurboGrafx16 in the Western hemisphere. There may be nonessential material in the game that is unfamiliar to consumers, including foreign-language audio and text.<br clear=\"all\" /><br clear=\"all\" />Import games may contain foreign language (audio and/or text) or other references that are unknown to consumers. </td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (FR)</td><td valign=\"top\" class=\"notranslate\">Castlevania Rondo of Blood</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (FR)</td><td valign=\"top\" class=\"notranslate\">Castlevania : Rondo of Blood sorti à la base sur TurboGraphx CD débarque sur Console Virtuelle !<br clear=\"all\" /><br clear=\"all\" />Dans ce jeu d'aventure/action vous incarnez Richter <br clear=\"all\" />Belmont qui part au secours de sa fiancée enlevée par <br clear=\"all\" />Dracula. <br clear=\"all\" /><br clear=\"all\" />Au fil des niveaux, vous rencontrez de viles créatures <br clear=\"all\" />et vous devez vous servir de votre précieux fouet pour les <br clear=\"all\" />vaincre. Mais attention, à la fin de chaque niveau un boss <br clear=\"all\" />vous attend. Un bon timing et de bons réflexes ne seront <br clear=\"all\" />pas de trop pour en venir à bout.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">Castlevania Rondo of Blood</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Esta es la décima entrega, llena de acción de la siempre popular serie Castlevania , ¡que representa a la épica lucha entre el clan Belmont y las fuerzas oscuras del Conde Drácula! En un clásico inmediato, este título es reconocido a lo largo y ancho de su mundo bellamente, el balance del juego es pendiente, y su inquietante calidad de CD en la música del juego.<br clear=\"all\" /><br clear=\"all\" />El jugador toma el control de Richter, asesino último del clan vampiro , guiándolo a través de un total de 9 etapas llenas de trampas traicioneras y secretos ocultos.<br clear=\"all\" /><br clear=\"all\" />Usando el látigo legendario que ha pasado de generaciones de Belmonts, y una selección poderosa de ataques, le toca a usted destruir a Drácula y sus hordas del mal.<br clear=\"all\" /><br clear=\"all\" />Lo que es más, el rescate de MARIA en algún momento en el juego le permite su uso como un personaje jugable para más de vampiros matando la diversión!</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">캐슬베이나: 피의 윤회</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Konami\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Konami\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2010-3-15\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>action, platformer\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>T\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>animated blood, fantasy violence\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>1\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk, classic controller, gamecube pad \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n<tr><td class=\"head\" align=\"right\" valign=\"top\">version</td><td valign=\"top\"> (1)</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">size</td><td valign=\"top\">0</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">crc</td><td valign=\"top\">6ff9d053</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">md5</td><td valign=\"top\">0510b0032bc2dbe00f25754ac4d71695</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">sha1</td><td valign=\"top\">90b8271603fc482272607b466b0872aa6c2f337d</td></tr>\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">US</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/US/QAPN.png?1397872393\" width=\"160\" height=\"224\" alt=\"Castlevania Rondo of Blood VC-PCE cover (QAPN)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/US/QAPN.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/US/QAPN.png?1397872396\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/US/QAPN.png?1397872396\" width=\"160\" height=\"224\" alt=\"Castlevania Rondo of Blood VC-PCE cover (QAPN)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/QAPN.png\" alt=\"Castlevania Rondo of Blood Wii coverfullHQ (QAPN) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/QAPN.png?1397872393\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/US/QAPN.png?1397872395\" width=\"340\" height=\"224\" alt=\"Castlevania Rondo of Blood VC-PCE cover (QAPN)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">other</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/other/QAPN.png?1325759946\" width=\"160\" height=\"224\" alt=\"Castlevania Rondo of Blood VC-PCE cover (QAPN)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/other/QAPN.png?1325759949\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/other/QAPN.png?1325759949\" width=\"160\" height=\"224\" alt=\"Castlevania Rondo of Blood VC-PCE cover (QAPN)\" /></a></span>\n</p></div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/R3OP01.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | R3OP01 - Metroid: Other M\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>R3OP01 - Metroid: Other M</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/R3OP01?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Tournament of Legends (Sega Japan, NTSC-U)\" href=\"https://www.gametdb.com/Wii/SGAE8P\"><img src=\"https://art.gametdb.com/wii/cover/US/SGAE8P.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">R3OP01 - Metroid: Other M</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/R3OJ01'>Previous</a> | <a href='https://www.gametdb.com/Wii/R3PEWR'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>R3OP01\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>PAL\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>Wii\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN, FR, DE, ES, IT\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Metroid: Other M</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">Metroid: Other M is reminiscent of 2-D side-scrollers, but players can switch the perspective into 3-D at any time as they explore the twisting passages of a derelict space station and delve deep into a cinematic, never-before-told story of bounty hunter Samus Aran's past.<br clear=\"all\" /><br clear=\"all\" />This new approach uses a new control scheme in which players use the Wii Remote controller held sideways to battle enemies and navigate the expansive, gorgeous environments in classic Metroid fashion, then aim at the screen with the Wii Remote pointer to blast foes in first-person and hunt the world for clues and hidden passages.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (FR)</td><td valign=\"top\" class=\"notranslate\">Metroid : Other M</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (FR)</td><td valign=\"top\" class=\"notranslate\">Je m'étais rendue sur la planète SR388 pour détruire les métroïdes. A l'issue d'un combat acharné, j'avais finalement réussi à vaincre la Reine métroïde, et je m'apprêtais à repartir lorsqu'un jeune métroïde était sorti de l'oeuf sous mes yeux. Parce que j'était le premier être vivant qu'il avait vu, ce bébé m'avait immédiatement considérée comme sa mère. J'avais le sentiment qu'en étudiant ce bébé, il serait peut-être possible de trouver à cette espèce des applications pacifiques. Je l'avais donc ramené à la Fédération galactique. Mais alors qu'il était soumis à diverses expériences, une attaque s'était produite et le bébé métroîd était tombé aux mains des Pirates de l'espace, dirigés par Mother Brain.<br clear=\"all\" /><br clear=\"all\" />Dans l'espoir de récupérer le bébé, je m'étais infiltrée dans la forteresse contrôlée par Mother Brain, sur la planète Zèbes. Malheureusement, face à la puissance phénoménale de Mother Brain, je m'étais retrouvée au seuil de la mort. C'est alors qu'une chose extrêmement étrange s'était produite: une énergie nouvelle s'était mise à affluer en moi, ranimant mon esprit qui était si près de d'éteindre.<br clear=\"all\" /><br clear=\"all\" />\"Pourquoi suis-je encore vivante?\"<br clear=\"all\" />Le bébé m'avait protégée de l'attaque de Mother Brain. Il m'avait transmis des pouvoirs. Et il avait finalement était détruit, juste au dessus de moi...<br clear=\"all\" /><br clear=\"all\" />\"Mother... Ton heure a sonné!\"<br clear=\"all\" />Mother Brain, les Pirates de l'espace et les métroîdes avaient été anéantis, en même temps que la planète Zèbes.<br clear=\"all\" /><br clear=\"all\" />J'ignore combien de temps s'est passé depuis. Je voyageais à travers l'espace à bord de mon vaisseau interstellaire quand je reçus soudain un signal de détresse. Nom de code: \"Pleurs de bébé\"? Un S.O.S. banal, aussi impérieux que les pleurs d'un bébé... Le but d'un tel signal est d'attirer l'attention, d'où ce nom de code.<br clear=\"all\" /><br clear=\"all\" />Cette fois, il provenait d'un recoin éloigné de l'espace. Je modifia aussitôt la trajectoire de mon vaisseau, comme si mon plan de vol avait déjà prévu ce détour.<br clear=\"all\" /><br clear=\"all\" />Pleurs de bébé...<br clear=\"all\" /><br clear=\"all\" />C'était comme si ces pleurs m'étaient spécialement adressés...</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (DE)</td><td valign=\"top\" class=\"notranslate\">Metroid: Other M</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (DE)</td><td valign=\"top\" class=\"notranslate\">Diesmal spielt die Handlung in einem gigantischen Raumschiff der Galaktischen Föderation, das komplette und höchst unterschiedliche Biotope beherbergt. In jedem davon existiert eine eigene Tier- und Pflanzenwelt, in der wiederum sehr spezielle, tückische Gegner auf Samus lauern. Die Story schließt an die von Super Metroid an. Darin hatte ein junges Metroid sein Leben geopfert, um Samus zu schützen. Alles in allem wartet Metroid: Other M mit mehr als einer Stunde prächtig animierter Zwischensequenzen in englischer Sprachausgabe auf. Damit ist der Titel nicht nur spielerisch ein Genuss, sondern auch fantastisch anzuschauen und machen dieses Spiel mehr als alle seine Vorgänger zu einem geradezu cineastischen Erlebnis.<br clear=\"all\" /><br clear=\"all\" />In der Rolle ihrer Heldin Samus Aran können die Spieler Metroid: Other M  zwischen First- und Third-Person-Perspektive wechseln. Das eröffnet ihnen völlig neue Möglichkeiten, zu kämpfen oder ihre Umgebung zu erkunden. Richten sie die Wii-Fernbedienung auf den Bildschirm, sehen sie die virtuelle Umgebung mit Samus’ eigenen Augen: Sie erspähen versteckte Gegenstände, erhalten wichtige Informationen oder können Gegner mit Präzisionsattacken lahmlegen. Halten sie die Fernbedienung dagegen seitwärts wie einen klassischen Controller, blicken sie Samus über die Schulter und haben damit den besseren Überblick. So können sie ganze Scharen angreifender Gegner mit ihrer Strahlenwaffe aufhalten. Eine automatische Zielhilfe macht das Spiel aus diesem Blickwinkel noch schneller, noch wilder und noch mitreißender.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">Metroid: Other M</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Sé testigo del pasado de Samus Aran en la entrega con más acción de la saga Metroid. Utiliza tu mando de Wii horizontalmente para controlar a Samus mientras luchas y exploras, o apunta hacia la TV para ponerte en sus propios ojos y poder disparar a tus enemigos y desentrañar los secretos de cada área.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (IT)</td><td valign=\"top\" class=\"notranslate\">Metroid: Other M</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (IT)</td><td valign=\"top\" class=\"notranslate\">Samus Aran è nota per essere una delle prime, e più enigmatiche, protagoniste femminili di videogame. Abbandonato il suo oscuro passato e intrapresa la carriera solitaria di cacciatrice di taglie, Samus si fa finalmente conoscere per chi è veramente, in questa illuminante storia personale che ripercorre i suoi errori, i suoi fallimenti e, in definitiva, le sue motivazioni. Metroid: Other M è il frutto di una collaborazione senza precedenti, che combina le produzioni improntate all'azione del team di sviluppo di fama mondiale Team Ninja, con l'abile game design dei creatori della serie Metroid originale. Metroid: Other M inaugura una direzione completamente nuova per il leggendario franchise combinando brillantemente filmati, storia e il meglio dell'intrattenimento interattivo.<br clear=\"all\" /><br clear=\"all\" />Metroid: Other M include il meglio dei giochi in prima e terza persona creando una perfetta fusione tra gameplay, storia e cinematografia dinamica e facendo sentire il giocatore al centro di un film che è in grado di controllare. Durante l'esplorazione e i combattimenti in terza persona, il giocatore tiene il telecomando Wii orientato lateralmente, ma può tornare immediatamente a utilizzare il controller nel modo standard, in qualsiasi momento, per esaminare ed esplorare gli ambienti in prima persona.<br clear=\"all\" /><br clear=\"all\" />Se fino ad oggi, i fan di Metroid sapevano tutto dell'equipaggiamento e le armi di Samus, ma ben poco sulle sue motivazioni profonde, tutto questo sta per cambiare. La storia inizia subito dopo gli eventi raccontati in Super Metroid, in cui un piccolo Metroid sacrifica la propria vita per proteggere Samus. Con una trama dettagliata e le voci prestate da attori, i giocatori apprendono l'avvincente storia di Samus affrontando avventure mozzafiato a bordo della Bottle Ship, una nave spaziale dismessa. Mentre si immerge in questa nuova avventura, Samus incontra il suo primo superiore e Comandante della Federazione Galattica, Adam Malkovich.<br clear=\"all\" /><br clear=\"all\" />Lo sviluppo di Metroid: Other M nasce dall'esaltante collaborazione tra Yoshio Sakamoto di Nintendo e Team Ninja. Sakamoto è stato Director di Super Metroid nel 1994. Team Ninja è il celeberrimo sviluppatore di Ninja Gaiden. Metroid: Other M combina l'abilità nel level design e l'attenzione all'esplorazione di Sakamoto che caratterizzano la serie Metroid classica con gli inconfondibili ed eleganti combattimenti senza esclusione di colpi di Team Ninja.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (NL)</td><td valign=\"top\" class=\"notranslate\">Metroid: Other M</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (NL)</td><td valign=\"top\" class=\"notranslate\">Bereid je voor op een ongekend Metroid-avontuur! Verbluffende actie en een persoonlijk verhaal komen op onvergetelijke wijze samen in 'Metroid: Other M'.<br clear=\"all\" /><br clear=\"all\" />Als Samus wisselt de speler voor het eerst in een 'Metroid'-game op vloeiende wijze tussen gameplay in de derde persoon en in de eerste persoon. De speler verkent de wereld en vecht in de derde persoon door de Wii-afstandsbediening horizontaal te houden. En op ieder gewenst moment schakelt de speler direct naar het eerstepersoonsperspectief, door de ogen van Samus, door met de Wii-afstandsbediening op het scherm te richten.<br clear=\"all\" /><br clear=\"all\" />Een andere primeur voor de serie is een fysieke aangelegenheid voor Samus. In 'Metroid: Other M' kan namelijk een aantal mêleeaanvallen uitvoeren in haar Power Suit. De speler springt op vijanden om de krachtige Overblast ('bovenstoot') uit te voeren, gebruikt de 1-knop met precieze timing om te Counter-aanvallen en rekent af met verwondde vijanden middels een Lethal Strike (dodelijke klap). Andere nieuwe moves zijn het ontwijken van vijandige aanvallen met een uitgekiende Sensemove (zintuiglijke beweging) en het levenskracht herstellende Concentration (concentratie), dat de speler activeert door de Wii-afstandsbediening verticaal te houden met de A-knop ingedrukt. Vervolgens is er een nieuw wapen, de Diffusion Beam (diffusiestraal), waardoor Charge Beams na hun impact uiteenvallen en nog meer vijanden raken.<br clear=\"all\" /><br clear=\"all\" />Temidden van al dit nieuws is het ontwikkelteam niet vergeten wat Metroid-games zo overtuigend en memorabel maakt: atmosfeer, verkenning en een meeslepend verhaal. Het spel vindt plaats in één enorm ruimteschip van de Galactic Federation, dat een enorme variëteit aan locaties bevat, ieder met verschillende omgevingen, unieke flora en fauna, en vijanden.<br clear=\"all\" /><br clear=\"all\" />De Biosphere is bijvoorbeeld een enorme broeikas met daarin een jungle, compleet met waterval, regen en ontelbaar veel tropische - en agressieve - wezens en planten. Daarentegen is de Cryosphere een koude, sneeuwrijke omgeving waar de temperatuur zo laag is dat ingangen regelmatig geblokkeerd worden door ijs. Of stel je de Pyrosphere voor, een gebied vol vulkanen en magma. Op sommige plekken is het hier zo warm dat Samus' levenskracht afneemt als ze niet is uitgerust met het hittebestendige Varia Suit.<br clear=\"all\" /><br clear=\"all\" />Tijdens het verkennen van deze vijandige omgevingen wordt de speler steeds dieper getrokken in een zeer persoonlijk verhaal over Samus' afkomst. De speler ontdekt haar gebreken en karakterfouten, en uiteindelijk ook haar motivatie om premiejager te worden.<br clear=\"all\" /><br clear=\"all\" />Het verhaal begint onmiddellijk na de gebeurtenissen in 'Super Metroid', toen een baby-Metroid zijn leven opofferde om Samus te beschermen. Met Engelstalig stemacteerwerk en meer dan een uur aan prachtig gerenderde tussenfilmpjes verspreid door het spel is 'Metroid: Other M' niet alleen leuk om te spelen, maar ook een lust voor het oog. De soepele overgangen van tussenfilmpjes naar gameplay en van derde persoon naar eerste persoon maken dit de meest filmische ervaring die je ooit hebt gehad in een 'Metroid'-game.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (DK)</td><td valign=\"top\" class=\"notranslate\">Metroid: Other M</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (DK)</td><td valign=\"top\" class=\"notranslate\">Efter to drøje dekader får vi endelig rede på, hvem Samus egentlig er. Metroid: Other M er hårdkogt action ladet med mange og lange filmsekvenser, som beretter historien om galaksens sejeste dusørjæger, og hvorfor hun vælger at leve ensom i rummet.<br clear=\"all\" />     <br clear=\"all\" />Fokus på handlingen, men ikke kun handlingsdrevet<br clear=\"all\" /> Det er ingen hemmelighed, at handlingen vil udgøre en stor del af Metroid: Other M. Der findes mange spil, som gør deres bedste for, at spilleren skal føle sig som i en film. Den ambition deler Metroid: Other M, men hvor andre spiludviklere satser al krudtet på at formidle følelser og skabe filmsekvenser, der kan måle sig med Hollywood-produktioner, ved Nintendo og partneren Team Ninja, at det er spiloplevelsen, der altid trækker det lange strå. Metroid: Other M består af lynhurtig action, hvor spilleren det ene sekund ser Samus fra siden og skyder rumpøblen, for i næste sekund at nyde når kameraet zoomer ind på Samus og monstret hun skal lige til at afrette! Som sagt, fokus ligger på filmsekvenser og handling, men der fokuseres endnu mere på veldesignede og sjove verdener!<br clear=\"all\" />     <br clear=\"all\" />Se Samus fra siden eller universet med hendes øjne<br clear=\"all\" /> Det enestående ved Metroid: Other M er, at du når som helst kan skifte perspektiv. Normalt spiller du ved at holde Wii Remote som en NES-kontrol (du styrer Samus med styrekorset), men skifter du greb og retter Wii Remote mod tv'et, skifter spillet perspektiv, så det bliver førstepersonsperspektiv som i Metroid Prime-spillene! I denne position kan Samus ikke bevæge sig, men hun har fuld frihed til at se sig omkring og skyde med præcision mod pøblen, hvilket er særdeles effektivt i kampe mod bosser.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">메트로이드: 다른 M</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ZHTW)</td><td valign=\"top\" class=\"notranslate\">銀河戰士 另一個 M(美)</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ZHTW)</td><td valign=\"top\" class=\"notranslate\">《銀河戰士：另一個 M》是 1986 年 8 月在紅白機磁碟系統登場的《銀河戰士》系列最新作，由 NGC / Wii《銀河戰士 Prime》系列的第一人稱射擊玩法回歸系列作原點的橫向捲軸玩法，並融入活用 Wii 遙控器的主觀視點操作。<br clear=\"all\" /><br clear=\"all\" /> 　　遊戲的故事背景設定在《超級銀河戰士》與《銀河戰士 Fusion》之間，讓玩家深入了解莎姆斯（Samus）離開銀河聯邦軍隊的理由以及上司亞當（Adam）犧牲的真相。<br clear=\"all\" /><br clear=\"all\" /> 　　遊戲結合 2 種操作模式，分別為橫拿 Wii 遙控器使用十字鍵與按鈕操作莎姆斯行動的「紅白機風格（FAMICOM Style）」以及直拿 Wii 遙控器使用光學指標操作視點的「搜尋視點（Searching View）」，系統會根據玩家手持 Wii 遙控器的方式自動切換模式。<br clear=\"all\" /><br clear=\"all\" /> 　　當玩家橫拿 Wii 遙控器時，就會切換為「紅白機風格」操作模式，畫面採用第三人稱橫向捲軸方式呈現，讓玩家使用與紅白機初代作相同的傳統 2D 操作方式遊玩，遊戲進行時會以此模式為主。當玩家直拿 Wii 遙控器將前端指向螢幕時，就會切換為「搜尋視點」操作模式，，畫面會採用第一人稱主觀視點方式呈現，讓玩家透過 Wii 遙控器的光學指標來控制畫面的視點方向，對場景進行精確的觀察搜索與瞄準射擊，不過切換為此模式時無法移動。</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ZHCN)</td><td valign=\"top\" class=\"notranslate\">银河战士 另一个M(欧)</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Team Ninja / Nintendo\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Nintendo\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2010-9-3\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>action, adventure\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>16\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>violence\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>1\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n<tr><td class=\"head\" align=\"right\" valign=\"top\">version</td><td valign=\"top\"> (1)</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">size</td><td valign=\"top\">8511160320</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">crc</td><td valign=\"top\">582dea6c</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">md5</td><td valign=\"top\">c188f8704b96e40e3f86b4f698599b3c</td></tr><tr><td class=\"head\" align=\"right\" valign=\"top\">sha1</td><td valign=\"top\">e169caa7ac194f779cbc3c3c014f86fb90d96e11</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>case\n</td><td  valign='top'>\n<table border='1' width='16' height='16' bgcolor='#ffffff' >\n</table>\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">EN</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/EN/R3OP01.png?1317735920\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/EN/R3OP01.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/EN/R3OP01.png?1317736094\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/EN/R3OP01.png?1317736094\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/EN/R3OP01.png\" alt=\"Metroid: Other M Wii coverfullHQ (R3OP01) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/EN/R3OP01.png?1317736405\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/EN/R3OP01.png?1317736177\" width=\"340\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<div style=\"width:350px;height:180px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/disc/EN/R3OP01.png?1317737029\" width=\"160\" height=\"160\" alt=\"Metroid: Other M Wii disc (R3OP01)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/disccustom/EN/R3OP01.png?1317737127\" width=\"160\" height=\"160\" alt=\"Metroid: Other M Wii disc (R3OP01)\" /></span>\n</p></div>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">FR</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/FR/R3OP01.png?1317735973\" width=\"160\" height=\"224\" alt=\"Metroid : Other M pochette Wii (R3OP01)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/FR/R3OP01.png?1317736116\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/FR/R3OP01.png?1317736116\" width=\"160\" height=\"224\" alt=\"Metroid : Other M pochette Wii (R3OP01)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/FR/R3OP01.png\" alt=\"Metroid : Other M Wii coverfullHQ (R3OP01) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/FR/R3OP01.png?1317736573\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/FR/R3OP01.png?1317736210\" width=\"340\" height=\"224\" alt=\"Metroid : Other M pochette Wii (R3OP01)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">DE</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/DE/R3OP01.png?1317735900\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/DE/R3OP01.png?1317736079\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/DE/R3OP01.png?1317736079\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/DE/R3OP01.png\" alt=\"Metroid: Other M Wii coverfullHQ (R3OP01) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/DE/R3OP01.png?1330966482\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/DE/R3OP01.png?1330966483\" width=\"340\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">IT</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/IT/R3OP01.png?1551893205\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/IT/R3OP01.png?1551893206\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/IT/R3OP01.png?1551893206\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/IT/R3OP01.png\" alt=\"Metroid: Other M Wii coverfullHQ (R3OP01) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/IT/R3OP01.png?1551893166\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/IT/R3OP01.png?1551893167\" width=\"340\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">NL</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/NL/R3OP01.png?1551893070\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/NL/R3OP01.png?1551893074\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/NL/R3OP01.png?1551893074\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/NL/R3OP01.png\" alt=\"Metroid: Other M Wii coverfullHQ (R3OP01) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/NL/R3OP01.png?1551893069\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/NL/R3OP01.png?1551893072\" width=\"340\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">AU</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/AU/R3OP01.png?1317736012\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></span>\n<p><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/AU/R3OP01.png?1317736136\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/AU/R3OP01.png?1317736136\" width=\"160\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</p></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/AU/R3OP01.png\" alt=\"Metroid: Other M Wii coverfullHQ (R3OP01) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/AU/R3OP01.png?1317736732\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/AU/R3OP01.png?1317736255\" width=\"340\" height=\"224\" alt=\"Metroid: Other M Wii cover (R3OP01)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/save-formats/wii/gametdb/WKTE.html",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"en-gb\" lang=\"en-gb\" >\n<head>\n  <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\" />\n  <meta name=\"robots\" content=\"index, follow\" />\n  <meta name=\"title\" content=\" | WKTE - Contra Rebirth\" />\n  <meta name=\"Author\" content=\"lustar\" />\n  <meta name=\"description\" content=\"Nintendo Wii games database, with information and artwork in all languages, including Japanese, Korean and Chinese.\" />\n  <meta name=\"generator\" content=\"\" />\n  <title>WKTE - Contra Rebirth</title>\n  <link rel=\"apple-touch-icon\" sizes=\"57x57\" href=\"/apple-touch-icon-57x57.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"60x60\" href=\"/apple-touch-icon-60x60.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"72x72\" href=\"/apple-touch-icon-72x72.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"76x76\" href=\"/apple-touch-icon-76x76.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"114x114\" href=\"/apple-touch-icon-114x114.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"120x120\" href=\"/apple-touch-icon-120x120.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"144x144\" href=\"/apple-touch-icon-144x144.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"152x152\" href=\"/apple-touch-icon-152x152.png?v=oLLl33Op3k\">\n  <link rel=\"apple-touch-icon\" sizes=\"180x180\" href=\"/apple-touch-icon-180x180.png?v=oLLl33Op3k\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-32x32.png?v=oLLl33Op3k\" sizes=\"32x32\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/android-chrome-192x192.png?v=oLLl33Op3k\" sizes=\"192x192\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-96x96.png?v=oLLl33Op3k\" sizes=\"96x96\">\n  <link rel=\"icon\" type=\"image/png\" href=\"/favicon-16x16.png?v=oLLl33Op3k\" sizes=\"16x16\">\n  <link rel=\"manifest\" href=\"/manifest.json?v=oLLl33Op3k\">\n  <link rel=\"mask-icon\" href=\"/safari-pinned-tab.svg?v=oLLl33Op3k\" color=\"#5bbad5\">\n  <link rel=\"shortcut icon\" href=\"/favicon.ico?v=oLLl33Op3k\">\n  <meta name=\"msapplication-TileColor\" content=\"#2d89ef\">\n  <meta name=\"msapplication-TileImage\" content=\"/mstile-144x144.png?v=oLLl33Op3k\">\n  <meta name=\"theme-color\" content=\"#ffffff\">\n  <link rel=\"stylesheet\" href=\"https://www.gametdb.com/pub/skins/custom/theme_1904270000.css\" type=\"text/css\" />\n  <!--[if lte IE 6]>\n  <link href=\"ie.css\" rel=\"stylesheet\" type=\"text/css\" />\n  <![endif]-->\n  <!--HTMLHeader--><style type='text/css'><!--\n  ul, ol, pre, dl, p { margin-top:0px; margin-bottom:0px; }\n  code.escaped { white-space: nowrap; }\n  .vspace { margin-top:1.33em; }\n  .indent { margin-left:40px; }\n  .outdent { margin-left:40px; text-indent:-40px; }\n  a.createlinktext { text-decoration:none; border-bottom:1px dotted gray; }\n  a.createlink { text-decoration:none; position:relative; top:-0.5em;\n    font-weight:bold; font-size:smaller; border-bottom:none; }\n  img { border:0px; }\n  \ntable.DQedit td.head {font-weight:bold; vertical-align:middle;}\n\ntable.DQedit td.headtop {font-weight:bold;}\n\ntable.DQedit span.required {color:red;}\n\n  table.markup { border:2px dotted #ccf; width:90%; }\n  td.markup1, td.markup2 { padding-left:10px; padding-right:10px; }\n  table.vert td.markup1 { border-bottom:1px solid #ccf; }\n  table.horiz td.markup1 { width:23em; border-right:1px solid #ccf; }\n  table.markup caption { text-align:left; }\n  div.faq p, div.faq pre { margin-left:2em; }\n  div.faq p.question { margin:1em 0 0.75em 0; font-weight:bold; }\n  div.faqtoc div.faq * { display:none; }\n  div.faqtoc div.faq p.question \n    { display:block; font-weight:normal; margin:0.5em 0 0.5em 20px; line-height:normal; }\n  div.faqtoc div.faq p.question * { display:inline; }\n  .apprlink { font-size:smaller; }.editconflict { color:green; \n  font-style:italic; margin-top:1.33em; margin-bottom:1.33em; }\n \n    .frame \n      { border:1px solid #cccccc; padding:4px; background-color:#f9f9f9; }\n    .lfloat { float:left; margin-right:0.5em; }\n    .rfloat { float:right; margin-left:0.5em; }\na.varlink { text-decoration:none; }\n\n--></style><meta http-equiv='Content-Type' content='text/html; charset=utf-8' />\n<script>\n  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){\n  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),\n  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)\n  })(window,document,'script','//www.google-analytics.com/analytics.js','ga');\n\n  ga('create', 'UA-11826276-1', 'gametdb.com');\n  ga('require', 'displayfeatures');\n  ga('send', 'pageview');\n\n</script>\n<script type=\"text/javascript\" src=\"/pub/hs/hs.ming.js\"></script>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs.css\" />\n    <!--[if lt IE 7]>\n    <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/hs/hs-ie6.css\" />\n    <![endif]-->\n    <script type=\"text/javascript\">\n    hs.graphicsDir = \"/pub/hs/graphics/\";\n    hs.expandCursor = null;\n    hs.restoreCursor = null;\n    hs.wrapperClassName = \"borderless\";\n    hs.outlineType = null;\n    hs.addEventListener(document, \"click\", function(e) {\n        e = e || window.event;\n        var target = e.target || e.srcElement;\n        if (!hs.getExpander(target) && hs.getExpander()) hs.close();\n    });\n    </script>\n  <meta name='robots' content='index,follow' />\n\n  <meta name=\"format-detection\" content=\"telephone=no\" />\n  <link rel=\"stylesheet\" type=\"text/css\" href=\"/pub/cookieconsent.min.css\" />\n  <script src=\"/pub/cookieconsent.min.js\"></script>\n  <script>\n  window.addEventListener(\"load\", function(){\n  window.cookieconsent.initialise({\n    \"palette\": {\n      \"popup\": {\n        \"background\": \"#e6e6e6\",\n        \"text\": \"#000000\"\n      },\n      \"button\": {\n        \"background\": \"#215ab0\",\n        \"text\": \"#ffffff\"\n      }\n    },\n    \"theme\": \"classic\",\n    \"content\": {\n      \"href\": \"/Main/Legal\"\n  }\n})});\n</script>\n</head>\n<body id=\"page_bg\" class=\"width_fmax\">\n<a name=\"up\" id=\"up\"></a>\n<div class=\"center\" align=\"center\">\n  <div id=\"wrapper\">\n    <div id=\"wrapper_r\">\n      <div id=\"header\">\n        <div id=\"header_l\">\n          <div id=\"header_r\">\n            <div id=\"logo\"><a href='https://www.gametdb.com'><img id=\"logo\" src='https://www.gametdb.com/pub/skins/GameTDB-400.png' alt='' border='0' /></a><div id=\"topmenu\" class=\"notranslate\"><p>•&nbsp;<a class='urllink' href='https://www.gametdb.com/3DS' rel='nofollow'><strong>3DS</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Switch' rel='nofollow'><strong>Switch</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/WiiU' rel='nofollow'><strong>Wii&nbsp;U</strong></a>&nbsp;•&nbsp;<a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'><strong>Wii</strong></a>&nbsp;•\n</p>\n</div></div>\n            <div id=\"logo_right\"><div style=\"overflow:hidden;\"><img src=\"https://art.gametdb.com/wii/latest/latestartwork_1625976932.png\" width=\"732\" height=\"80\" alt=\"\" usemap=\"#latest_artwork\" /></div>\n<map id=\"latest_artwork\" name=\"latest_artwork\">\n<area href=\"https://www.gametdb.com/Wii/SELP69\" shape=\"rect\" coords=\"0,0,57,80\" title=\"FIFA 11 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"61,0,118,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"122,0,179,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"183,0,240,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/R4RP69\" shape=\"rect\" coords=\"244,0,301,80\" title=\"FIFA 10 (Electronic Arts)\" />\n<area href=\"https://www.gametdb.com/Wii/REXP01\" shape=\"rect\" coords=\"305,0,362,80\" title=\"Excite Truck (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RRGX52\" shape=\"rect\" coords=\"366,0,423,80\" title=\"Madagascar 2 (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"427,0,484,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"488,0,545,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RUHP52\" shape=\"rect\" coords=\"549,0,606,80\" title=\"Bakugan Battle Brawlers (Activision)\" />\n<area href=\"https://www.gametdb.com/Wii/RFPP01\" shape=\"rect\" coords=\"610,0,667,80\" title=\"Wii Fit Plus (Nintendo)\" />\n<area href=\"https://www.gametdb.com/Wii/RSPP01\" shape=\"rect\" coords=\"671,0,728,80\" title=\"Wii Sports (Nintendo)\" />\n</map>\n</div>\n          </div>\n        </div>\n      </div>\n      <div id=\"tabarea\">\n        <div id=\"tabarea_l\">\n          <div id=\"tabarea_r\">\n            <div id=\"tabmenu\">&nbsp;\n            </div>\n          </div>\n        </div>\n      </div>\n      <div id=\"whitebox\">\n        <div id=\"whitebox_t\">\n          <div id=\"whitebox_tl\">\n            <div id=\"whitebox_tr\"></div>\n          </div>\n        </div>\n        <div id=\"whitebox_m\">\n          <div id=\"area\">\n            <div id=\"leftcolumn\">\n              <div id=\"left_top\">\n              <script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"https://cse.google.com/cse.js?cx=partner-pub-4620983010111854:3114910054\"></script><div class=\"gcse-searchbox-only\"></div>\n\n              </div>\n              <div class=\"module_menu\">\n                <div>\n                  <div>\n                    <div>\n                      <h3><p><a href=\"https://www.gametdb.com/Wii/WKTE?action=theme&t=dark\"><img class=\"icon\" src=\"/pub/skins/z3warp.png\"> Dark Theme</a>\n</p>\n</h3>\n<ul><li><a class='urllink' href='https://www.gametdb.com/Wii' rel='nofollow'>Wii Home</a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Wii/Search' rel='nofollow'>Wii Search</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Wii/Downloads' rel='nofollow'>Wii Downloads</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/List'>Wii Games</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/WiiCompanies' rel='nofollow'>Wii Companies</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/LatestUploads'>Latest Wii Artwork</a>\n</li><li><a class='wikilink' href='https://www.gametdb.com/Wii/Latest'>Latest Wii Additions</a> <a class='wikilink' href='https://www.gametdb.com/Wii/LatestGames?action=rss'><img class=\"icon\" src=\"/pub/skins/rss24.png\" /></a>\n<div class='vspace'></div></li><li><a class='urllink' href='https://www.gametdb.com/Main/Login' rel='nofollow'>Log In</a>\n</li><li><a class='urllink' href='https://www.gametdb.com/Main/Login?action=signup' rel='nofollow'>Sign Up</a>\n</li></ul>\n\n                    </div>\n                  </div>\n                </div>\n              </div>\n              <div id=\"left_bottom\">\n              <p><a title=\"Merv Griffin's Crosswords (THQ, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RVGE78\"><img src=\"https://art.gametdb.com/wii/cover/US/RVGE78.png\" width=160 height=224></a><br/><br/>\n<a title=\"Wii Startup Disc (Nintendo, NTSC-U)\" href=\"https://www.gametdb.com/Wii/RAAE01\"><img src=\"https://art.gametdb.com/wii/cover/US/RAAE01.png\" width=160 height=224></a><br/><br/>\n</p>\n<div class='vspace'></div>\n\n              </div>\n              <div>\n                <div>\n                  <div>\n                    <div>\n                    </div>\n                  </div>\n                </div>\n              </div>\n            </div>\n            <div id=\"maincolumn\">\n                <div id=\"linkstop\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"0261243407\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n                <h1 class=\"notranslate\">WKTE - Contra Rebirth</h1>\n                <!--PageText-->\n<div id='wikitext'>\n<!--cached--><div class='fpltemplate'><p><strong>Go to:</strong> <a href='https://www.gametdb.com/Wii/WKRP'>Previous</a> | <a href='https://www.gametdb.com/Wii/WKTJ'>Next</a>\n</p><table width='100%' >\n<tr ><td  valign='top'>\n<table class='GameData' >\n<tr ><td class='head notranslate' align='right' width='110'  valign='top'>ID\n</td><td width='300'  valign='top'>WKTE\n</td></tr><tr ><td class='head' align='right'  valign='top'>region\n</td><td  valign='top'>NTSC-U\n</td></tr><tr ><td class='head' align='right'  valign='top'>type\n</td><td  valign='top'>WiiWare\n</td></tr><tr ><td class='head' align='right'  valign='top'>languages\n</td><td  valign='top'>EN\n<tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (EN)</td><td valign=\"top\" class=\"notranslate\">Contra Rebirth</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (EN)</td><td valign=\"top\" class=\"notranslate\">Experience fast paced 2D side scrolling action from the series that pioneered the run-and-gun genre.<br clear=\"all\" /><br clear=\"all\" />Chief Salamander and his Neo-Salamander Force travel back to 1973 AD to invade Earth. They land in Central America and take control of the Shizuoka ruins on the Yucatan Peninsula. There, the aliens plan the destruction of all the “Contra\" on Earth. The Galactic President calls on Lance Bean, a member of the elite \"Contra\" warriors to save the Earth, but his sudden disappearance jeopardizes the safety of the planet. Now, Bill Rizer and the samurai, Genbei Yagyu are the last hope for Earth and must pick up their weapons and defeat the evil Neo-Salamander Army before all is lost. Experience the fast paced action packed 2D side-scrolling adventure that pioneered the run-and-gun genre.</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ES)</td><td valign=\"top\" class=\"notranslate\">Contra Rebirth</td></tr><tr><td class=\"headtop notranslate\" align=\"right\" valign=\"top\">synopsis (ES)</td><td valign=\"top\" class=\"notranslate\">Disfruta de este explosivo y trepidante juego de disparos para uno o dos jugadores. Controla a los soldados Bill Rizer y Lance Bean y protege la Tierra de una invasión alienígena. Equípate con potentes armas y ábrete paso haciendo saltar por los aires a hordas de enemigos mortíferos y grandes jefes. ¡Destruye al malvado Jefe Salamander y a su grupo Neo-Salamander Force!<br clear=\"all\" /><br clear=\"all\" />CARACTERÍSTICAS:<br clear=\"all\" />*Un nuevo episodio de la serie de juegos de disparos de culto de Konami.<br clear=\"all\" />*Para uno o dos jugadores<br clear=\"all\" />*Elige entre dos personajes: Bill Rizer y Lance Bean.<br clear=\"all\" />*Cinco niveles repletos de acción con una gran cantidad de enemigos y jefes letales.<br clear=\"all\" />*Tres niveles de dificultad: FÁCIL, NORMAL y DIFÍCIL.<br clear=\"all\" />*Las armas incluyen ametralladoras, escopetas, misiles teledirigidos y armas láser</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (KO)</td><td valign=\"top\" class=\"notranslate\">혼두라 리버스</td></tr><tr><td class=\"head notranslate\" align=\"right\" valign=\"top\">title (ZHCN)</td><td valign=\"top\" class=\"notranslate\">魂斗罗 重生(美)</td></tr>\n</td></tr><tr ><td class='head' align='right'  valign='top'>developer\n</td><td class='notranslate'  valign='top'>Konami Digital Entertainment, Inc.\n</td></tr><tr ><td class='head' align='right'  valign='top'>publisher\n</td><td class='notranslate'  valign='top'>Konami\n</td></tr><tr ><td class='head' align='right'  valign='top'>release date\n</td><td  valign='top'>2009-9-7\n</td></tr><tr ><td class='head' align='right'  valign='top'>genre\n</td><td  valign='top'>action, adventure\n</td></tr><tr ><td class='head' align='right'  valign='top'>rating\n</td><td  valign='top'>E10+\n<p><!-- google_ad_section_start(weight=ignore) -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>content\n</td><td  valign='top'>fantasy violence\n<p><!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n<!-- google_ad_section_start(weight=ignore) -->\n<!-- google_ad_section_end -->\n</p></td></tr><tr ><td class='head' align='right'  valign='top'>players\n</td><td  valign='top'>2\n</td></tr><tr ><td class='head' align='right'  valign='top'>req. accessories\n</td><td  valign='top'>wiimote \n</td></tr><tr ><td class='head' align='right'  valign='top'>accessories\n</td><td  valign='top'>nunchuk, classic controller, gamecube pad \n</td></tr><tr ><td class='head' align='right'  valign='top'>online players\n</td><td  valign='top'>0\n</td></tr></table>\n</td><td  valign='top'>\n<table >\n<tr ><td  valign='top'>\n<p><span style=\"font-size:83%;font-weight:bold;\" class=\"notranslate\">US</span>\n</p><div style=\"width:350px;height:244px;margin: 0px;\"><span class=\"frame lfloat\" style=\"margin:0px;\"><img src=\"https://art.gametdb.com/wii/cover/US/WKTE.png?1354506413\" width=\"160\" height=\"224\" alt=\"Contra Rebirth WiiWare cover (WKTE)\" /></span>\n<p><meta name=\"thumbnail\" content=\"https://art.gametdb.com/wii/cover/US/WKTE.png\" /><span class=\"frame rfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/cover3D/US/WKTE.png?1354506415\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/cover3D/US/WKTE.png?1354506415\" width=\"160\" height=\"224\" alt=\"Contra Rebirth WiiWare cover (WKTE)\" /></a></span>\n</p></div>\n<div><div class=\"frame\" style=\"margin:0px 0px 10px;\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:336px;height:280px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"4859234036\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div></div>\n<div style=\"width:350px;height:264px;margin: 0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/WKTE.png\" alt=\"Contra Rebirth Wii coverfullHQ (WKTE) \">HQ</a>\n<span class=\"frame lfloat\" style=\"margin:0px;\"><a href=\"https://art.gametdb.com/wii/coverfullHQ/US/WKTE.png?1354506413\" class=\"highslide\" onclick=\"return hs.expand(this)\"><img src=\"https://art.gametdb.com/wii/coverfull/US/WKTE.png?1354506414\" width=\"340\" height=\"224\" alt=\"Contra Rebirth WiiWare cover (WKTE)\" /></a></span>\n</div>\n<div style=\"margin:0px;height:20px;\"><span class=\"lfloat\" style=\"margin:0px;\"> </span></div>\n</td></tr></table>\n</td></tr></table>\n</div>\n<div class='vspace'></div>\n</div>\n\n                <div id=\"linksbottom\"><script>\n            window.google_analytics_uacct=\"UA-11826276-1\";  \n            google_analytics_domain_name=\"www.gametdb.com\";\n        </script><div style=\"overflow:hidden;\"><script async src=\"//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js\"></script>\n                    <ins class=\"adsbygoogle\"\n                         style=\"display:inline-block;width:728px;height:90px\"\n                         data-ad-client=\"ca-pub-4620983010111854\"\n                         data-ad-slot=\"9737561026\"></ins>\n                    <script>\n                         (adsbygoogle = window.adsbygoogle || []).push({});\n                    </script></div>\n<div class='vspace'></div>\n</div>\n            </div>\n            <div class=\"clr\"></div>\n          </div>\n          <div class=\"clr\"></div>\n        </div>\n        <div id=\"whitebox_b\">\n          <div id=\"whitebox_bl\">\n            <div id=\"whitebox_br\"></div>\n          </div>\n        </div>\n      </div>\n      <div id=\"footerspacer\"></div>\n    </div>\n    <div id=\"footer\">\n      <div id=\"footer_l\">\n        <div id=\"footer_r\">\n          <p id=\"footertext\"></p><p id=\"power_by\">&copy; 2009-2021 GameTDB</p>\n        </div>\n      </div>\n    </div>\n  </div>\n</div>\n<!--HTMLFooter-->\n  <link rel='stylesheet' href='https://www.gametdb.com/pub/emailform/emailform.css' type='text/css' />\n\n<div id=\"main_footer\">\n</div>\n</body>\n</html>\n"
  },
  {
    "path": "frontend/tests/data/util/Tomato Adventure (Japan) test save all padding.srm",
    "content": ""
  },
  {
    "path": "frontend/tests/data/util/endian/2ByteWord-input.sav",
    "content": "\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002"
  },
  {
    "path": "frontend/tests/data/util/endian/2ByteWord-output.sav",
    "content": "\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001\u0002\u0001"
  },
  {
    "path": "frontend/tests/data/util/endian/4ByteWord-input.sav",
    "content": "\u0001\u0002\u0003\u0004\u0001\u0002\u0003\u0004\u0001\u0002\u0003\u0004\u0001\u0002\u0003\u0004"
  },
  {
    "path": "frontend/tests/data/util/endian/4ByteWord-output.sav",
    "content": "\u0004\u0003\u0002\u0001\u0004\u0003\u0002\u0001\u0004\u0003\u0002\u0001\u0004\u0003\u0002\u0001"
  },
  {
    "path": "frontend/tests/data/util/endian/8ByteWord-input.sav",
    "content": "\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b\u0001\u0002\u0003\u0004\u0005\u0006\u0007\b"
  },
  {
    "path": "frontend/tests/data/util/endian/8ByteWord-output.sav",
    "content": "\b\u0007\u0006\u0005\u0004\u0003\u0002\u0001\b\u0007\u0006\u0005\u0004\u0003\u0002\u0001\b\u0007\u0006\u0005\u0004\u0003\u0002\u0001\b\u0007\u0006\u0005\u0004\u0003\u0002\u0001"
  },
  {
    "path": "frontend/tests/unit/rom-formats/GB/gb.spec.js",
    "content": "import { expect } from 'chai';\nimport GbRom from '@/rom-formats/gb';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/rom-formats/gb';\n\nconst GB_FILENAME = `${DIR}/Zelda - Link's Awakening header.gb`; // Not a real ROM file (!), just the parts in the header that we read\nconst GBC_FILENAME = `${DIR}/Wario Land 3 header.gbc`; // Not a real ROM file (!), just the parts in the header that we read\n\ndescribe('GB/GBC ROM format', () => {\n  it('should parse a GB ROM', async () => {\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB_FILENAME);\n\n    const gbRom = new GbRom(romArrayBuffer);\n\n    expect(gbRom.getInternalName()).to.equal('ZELDA');\n    expect(gbRom.getIsGbc()).to.equal(false);\n    expect(gbRom.getCartridgeType()).to.equal(0x3);\n    expect(gbRom.getSramSize()).to.equal(8192);\n  });\n\n  it('should parse a GBC ROM', async () => {\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GBC_FILENAME);\n\n    const gbRom = new GbRom(romArrayBuffer);\n\n    expect(gbRom.getInternalName()).to.equal('WARIOLAND3');\n    expect(gbRom.getIsGbc()).to.equal(true);\n    expect(gbRom.getCartridgeType()).to.equal(0x1B);\n    expect(gbRom.getSramSize()).to.equal(32768);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/rom-formats/GBA/gba.spec.js",
    "content": "import { expect } from 'chai';\nimport GbaRom from '@/rom-formats/gba';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/rom-formats/gba';\n\nconst FILENAME = `${DIR}/Zelda - Minish Cap header.gba`; // Not a real ROM file (!), just the parts in the header that we read\n\ndescribe('GBA ROM format', () => {\n  it('should parse a GBA ROM', async () => {\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FILENAME);\n\n    const gbaRom = new GbaRom(romArrayBuffer);\n\n    expect(gbaRom.getInternalName()).to.equal('GBAZELDA MC\\u0000BZME');\n    expect(gbaRom.getChecksum()).to.equal(0);\n    expect(gbaRom.getComplimentCheck()).to.equal(216);\n    expect(gbaRom.getMaker()).to.equal(48);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/rom-formats/NES/nes.spec.js",
    "content": "import { expect } from 'chai';\nimport NesRom from '@/rom-formats/nes';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/rom-formats/nes';\n\nconst INES_FILENAME = `${DIR}/Zelda II - header.nes`; // Not a real ROM file (!), just the parts in the header that we read\n\ndescribe('NES ROM format', () => {\n  it('should parse an iNES headered ROM', async () => {\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INES_FILENAME);\n\n    const nesRom = new NesRom(romArrayBuffer);\n\n    expect(nesRom.getIsNes20Header()).to.equal(false);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/rom-formats/PSP/PspIso.spec.js",
    "content": "import { expect } from 'chai';\nimport PspIso from '@/rom-formats/PspIso';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport Config from '#/config';\n\nconst config = Config.Create();\n\nconst TEST_ISOS = config.get().testPspIsos; // Even small ISOs take a long time to load\nconst TEST_RETAIL_ISOS = config.get().testPspRetailIsos; // They're quite large files and so take several seconds to load\n\nconst TIMEOUT_MS = 40000; // Need to load in some large files\n\nconst DIR = './tests/data/rom-formats/psp';\n\nconst CASTLEVANIA_ISO_FILENAME = `${DIR}/retail/Castlevania - Dracula X Chronicles.ISO`;\nconst CASTLEVANIA_EXECUTABLE_FILENAME = `${DIR}/retail/Castlevania - Dracula X Chronicles - EBOOT.BIN`;\nconst CASTLEVANIA_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.BIN';\nconst CASTLEVANIA_GAME_ID = 'ULUS10277';\n\nconst FINAL_FANTASY_TACTICS_ISO_FILENAME = `${DIR}/retail/Final Fantasy Tactics - War of the Lions.ISO`;\nconst FINAL_FANTASY_TACTICS_EXECUTABLE_FILENAME = `${DIR}/retail/Final Fantasy Tactics - War of the Lions - EBOOT.BIN`;\nconst FINAL_FANTASY_TACTICS_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.BIN';\nconst FINAL_FANTASY_TACTICS_GAME_ID = 'ULUS10297';\n\nconst MEGA_MAN_ISO_FILENAME = `${DIR}/retail/Mega Man Maverick Hunter X.ISO`;\nconst MEGA_MAN_EXECUTABLE_FILENAME = `${DIR}/retail/Mega Man Maverick Hunter X - EBOOT.BIN`;\nconst MEGA_MAN_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.BIN';\nconst MEGA_MAN_GAME_ID = 'ULUS10068';\n\nconst NEED_FOR_SPEED_ISO_FILENAME = `${DIR}/retail/Need for Speed Underground Rivals.ISO`;\nconst NEED_FOR_SPEED_EXECUTABLE_FILENAME = `${DIR}/retail/Need for Speed Underground Rivals - EBOOT.BIN`;\nconst NEED_FOR_SPEED_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.BIN';\nconst NEED_FOR_SPEED_GAME_ID = 'ULUS10007';\n\nconst ENCRYPTED_EXECUTABLE_MAGIC0_ISO = `${DIR}/encrypted-executable-magic0.iso`;\nconst ENCRYPTED_EXECUTABLE_MAGIC0 = `${DIR}/encrypted-executable-magic0 - EBOOT.BIN`;\nconst ENCRYPTED_EXECUTABLE_MAGIC0_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.BIN';\nconst ENCRYPTED_EXECUTABLE_MAGIC0_GAME_ID = 'ULUS12345';\n\nconst ENCRYPTED_EXECUTABLE_MAGIC1_ISO = `${DIR}/encrypted-executable-magic1.iso`;\nconst ENCRYPTED_EXECUTABLE_MAGIC1 = `${DIR}/encrypted-executable-magic1 - EBOOT.BIN`;\nconst ENCRYPTED_EXECUTABLE_MAGIC1_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.BIN';\nconst ENCRYPTED_EXECUTABLE_MAGIC1_GAME_ID = 'ULUS12345';\n\nconst UNENCRYPTED_EXECUTABLE_ISO = `${DIR}/unencrypted-executable.iso`;\nconst UNENCRYPTED_EXECUTABLE = `${DIR}/unencrypted-executable - BOOT.BIN`;\nconst UNENCRYPTED_EXECUTABLE_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/BOOT.BIN';\nconst UNENCRYPTED_EXECUTABLE_GAME_ID = 'ULUS12345';\n\nconst ENCRYPTED_EXECUTABLE_INCORRECT_MAGIC_ISO = `${DIR}/encrypted-executable-incorrect-magic.iso`;\nconst ENCRYPTED_EXECUTABLE_INCORRECT_MAGIC = `${DIR}/encrypted-executable-incorrect-magic - BOOT.BIN`;\nconst ENCRYPTED_EXECUTABLE_INCORRECT_MAGIC_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/BOOT.BIN';\nconst ENCRYPTED_EXECUTABLE_INCORRECT_MAGIC_GAME_ID = 'ULUS12345';\n\nconst ENCRYPTED_EXECUTABLE_ALTERNATIVE_BOOT_ISO = `${DIR}/encrypted-executable-alternative-boot.iso`;\nconst ENCRYPTED_EXECUTABLE_ALTERNATIVE_BOOT = `${DIR}/encrypted-executable-alternative-boot - EBOOT.DNR`;\nconst ENCRYPTED_EXECUTABLE_ALTERNATIVE_BOOT_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.DNR';\nconst ENCRYPTED_EXECUTABLE_ALTERNATIVE_BOOT_GAME_ID = 'ULUS12345';\n\nconst ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_ISO = `${DIR}/encrypted-executable-other-alternative-boot.iso`;\nconst ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT = `${DIR}/encrypted-executable-other-alternative-boot - GBL`;\nconst ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_EXECUTABLE_PATH = '/PSP_GAME/USRDIR/DATA/GIM/GBL';\nconst ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_GAME_ID = 'NPJH00100';\n\nconst ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_WRONG_GAME_ID_ISO = `${DIR}/encrypted-executable-other-alternative-boot-wrong-game-id.iso`;\nconst ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_WRONG_GAME_ID = `${DIR}/encrypted-executable-other-alternative-boot-wrong-game-id - EBOOT.BIN`;\nconst ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_WRONG_GAME_ID_EXECUTABLE_PATH = '/PSP_GAME/SYSDIR/EBOOT.BIN';\nconst ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_WRONG_GAME_ID_GAME_ID = 'ULUS12345';\n\nTEST_ISOS && TEST_RETAIL_ISOS && describe('PSP retail ISO parsing', function () { // eslint-disable-line func-names, no-unused-expressions\n  this.timeout(TIMEOUT_MS); // Can't use arrow function above if referencing 'this' here\n\n  it('should find an encrypted executable in the Castlevania ISO', async () => {\n    const isoFileExists = await ArrayBufferUtil.fileExists(CASTLEVANIA_ISO_FILENAME);\n    const executableFileExists = await ArrayBufferUtil.fileExists(CASTLEVANIA_EXECUTABLE_FILENAME);\n\n    expect(isoFileExists).to.equal(executableFileExists);\n\n    if (isoFileExists && executableFileExists) { // These files are not included in our repo for obvious reasons\n      const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CASTLEVANIA_ISO_FILENAME);\n      const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CASTLEVANIA_EXECUTABLE_FILENAME);\n\n      const pspIso = await PspIso.Create(isoArrayBuffer, 'Castlevania');\n\n      expect(pspIso.getExecutableInfo().gameId).to.equal(CASTLEVANIA_GAME_ID);\n      expect(pspIso.getExecutableInfo().path).to.equal(CASTLEVANIA_EXECUTABLE_PATH);\n      expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n      expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n    }\n  });\n\n  it('should find an encrypted executable in the Final Fantasy Tactics ISO', async () => {\n    const isoFileExists = await ArrayBufferUtil.fileExists(FINAL_FANTASY_TACTICS_ISO_FILENAME);\n    const executableFileExists = await ArrayBufferUtil.fileExists(FINAL_FANTASY_TACTICS_EXECUTABLE_FILENAME);\n\n    expect(isoFileExists).to.equal(executableFileExists);\n\n    if (isoFileExists && executableFileExists) { // These files are not included in our repo for obvious reasons\n      const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FINAL_FANTASY_TACTICS_ISO_FILENAME);\n      const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FINAL_FANTASY_TACTICS_EXECUTABLE_FILENAME);\n\n      const pspIso = await PspIso.Create(isoArrayBuffer, 'FinalFantasyTactics');\n\n      expect(pspIso.getExecutableInfo().gameId).to.equal(FINAL_FANTASY_TACTICS_GAME_ID);\n      expect(pspIso.getExecutableInfo().path).to.equal(FINAL_FANTASY_TACTICS_EXECUTABLE_PATH);\n      expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n      expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n    }\n  });\n\n  it('should find an encrypted executable in the Mega Man ISO', async () => {\n    const isoFileExists = await ArrayBufferUtil.fileExists(MEGA_MAN_ISO_FILENAME);\n    const executableFileExists = await ArrayBufferUtil.fileExists(MEGA_MAN_EXECUTABLE_FILENAME);\n\n    expect(isoFileExists).to.equal(executableFileExists);\n\n    if (isoFileExists && executableFileExists) { // These files are not included in our repo for obvious reasons\n      const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_MAN_ISO_FILENAME);\n      const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_MAN_EXECUTABLE_FILENAME);\n\n      const pspIso = await PspIso.Create(isoArrayBuffer, 'MegaMan');\n\n      expect(pspIso.getExecutableInfo().gameId).to.equal(MEGA_MAN_GAME_ID);\n      expect(pspIso.getExecutableInfo().path).to.equal(MEGA_MAN_EXECUTABLE_PATH);\n      expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n      expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n    }\n  });\n\n  it('should find an encrypted executable in the Need for Speed ISO', async () => {\n    const isoFileExists = await ArrayBufferUtil.fileExists(NEED_FOR_SPEED_ISO_FILENAME);\n    const executableFileExists = await ArrayBufferUtil.fileExists(NEED_FOR_SPEED_EXECUTABLE_FILENAME);\n\n    expect(isoFileExists).to.equal(executableFileExists);\n\n    if (isoFileExists && executableFileExists) { // These files are not included in our repo for obvious reasons\n      const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEED_FOR_SPEED_ISO_FILENAME);\n      const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEED_FOR_SPEED_EXECUTABLE_FILENAME);\n\n      const pspIso = await PspIso.Create(isoArrayBuffer, 'NeedForSpeed');\n\n      expect(pspIso.getExecutableInfo().gameId).to.equal(NEED_FOR_SPEED_GAME_ID);\n      expect(pspIso.getExecutableInfo().path).to.equal(NEED_FOR_SPEED_EXECUTABLE_PATH);\n      expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n      expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n    }\n  });\n});\n\nTEST_ISOS && describe('PSP test ISO parsing', function () { // eslint-disable-line func-names, no-unused-expressions\n  this.timeout(TIMEOUT_MS); // Can't use arrow function above if referencing 'this' here\n\n  it('should find an encrypted executable matching magic 0', async () => {\n    const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_MAGIC0_ISO);\n    const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_MAGIC0);\n\n    const pspIso = await PspIso.Create(isoArrayBuffer, 'EncryptedExecutableMagic0');\n\n    expect(pspIso.getExecutableInfo().gameId).to.equal(ENCRYPTED_EXECUTABLE_MAGIC0_GAME_ID);\n    expect(pspIso.getExecutableInfo().path).to.equal(ENCRYPTED_EXECUTABLE_MAGIC0_EXECUTABLE_PATH);\n    expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n  });\n\n  it('should find an encrypted executable matching magic 1', async () => {\n    const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_MAGIC1_ISO);\n    const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_MAGIC1);\n\n    const pspIso = await PspIso.Create(isoArrayBuffer, 'EncryptedExecutableMagic1');\n\n    expect(pspIso.getExecutableInfo().gameId).to.equal(ENCRYPTED_EXECUTABLE_MAGIC1_GAME_ID);\n    expect(pspIso.getExecutableInfo().path).to.equal(ENCRYPTED_EXECUTABLE_MAGIC1_EXECUTABLE_PATH);\n    expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n  });\n\n  it('should find an unencrypted executable if there is no encrypted one', async () => {\n    const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(UNENCRYPTED_EXECUTABLE_ISO);\n    const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(UNENCRYPTED_EXECUTABLE);\n\n    const pspIso = await PspIso.Create(isoArrayBuffer, 'UnencryptedExecutable');\n\n    expect(pspIso.getExecutableInfo().gameId).to.equal(UNENCRYPTED_EXECUTABLE_GAME_ID);\n    expect(pspIso.getExecutableInfo().path).to.equal(UNENCRYPTED_EXECUTABLE_EXECUTABLE_PATH);\n    expect(pspIso.getExecutableInfo().encrypted).to.equal(false);\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n  });\n\n  it('should find an unencrypted executable if the encrypted one\\'s magic doesn\\'t match', async () => {\n    const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_INCORRECT_MAGIC_ISO);\n    const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_INCORRECT_MAGIC);\n\n    const pspIso = await PspIso.Create(isoArrayBuffer, 'EncryptedExecutableMagicDoesNotMatch');\n\n    expect(pspIso.getExecutableInfo().gameId).to.equal(ENCRYPTED_EXECUTABLE_INCORRECT_MAGIC_GAME_ID);\n    expect(pspIso.getExecutableInfo().path).to.equal(ENCRYPTED_EXECUTABLE_INCORRECT_MAGIC_EXECUTABLE_PATH);\n    expect(pspIso.getExecutableInfo().encrypted).to.equal(false);\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n  });\n\n  it('should find an encrypted executable in an alternative location', async () => {\n    const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_ALTERNATIVE_BOOT_ISO);\n    const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_ALTERNATIVE_BOOT);\n\n    const pspIso = await PspIso.Create(isoArrayBuffer, 'EncryptedExecutableAlternativeLocation');\n\n    expect(pspIso.getExecutableInfo().gameId).to.equal(ENCRYPTED_EXECUTABLE_ALTERNATIVE_BOOT_GAME_ID);\n    expect(pspIso.getExecutableInfo().path).to.equal(ENCRYPTED_EXECUTABLE_ALTERNATIVE_BOOT_EXECUTABLE_PATH);\n    expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n  });\n\n  it('should find an encrypted executable in an other alternative location', async () => {\n    const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_ISO);\n    const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT);\n\n    const pspIso = await PspIso.Create(isoArrayBuffer, 'EncryptedExecutableOtherAlternativeLocation');\n\n    expect(pspIso.getExecutableInfo().gameId).to.equal(ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_GAME_ID);\n    expect(pspIso.getExecutableInfo().path).to.equal(ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_EXECUTABLE_PATH);\n    expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n  });\n\n  it('should not find an encrypted executable in an other alternative location if the game ID doesn\\'t match', async () => {\n    const isoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_WRONG_GAME_ID_ISO);\n    const executableArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_WRONG_GAME_ID);\n\n    const pspIso = await PspIso.Create(isoArrayBuffer, 'EncryptedExecutableOtherAlternativeLocationWrongGameId');\n\n    expect(pspIso.getExecutableInfo().gameId).to.equal(ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_WRONG_GAME_ID_GAME_ID);\n    expect(pspIso.getExecutableInfo().path).to.equal(ENCRYPTED_EXECUTABLE_OTHER_ALTERNATIVE_BOOT_WRONG_GAME_ID_EXECUTABLE_PATH);\n    expect(pspIso.getExecutableInfo().encrypted).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspIso.getExecutableInfo().arrayBuffer, executableArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/rom-formats/SMS/sms.spec.js",
    "content": "import { expect } from 'chai';\nimport SmsRom from '@/rom-formats/sms';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport Config from '#/config';\n\nconst config = Config.Create();\n\nconst TEST_RETAIL_ROMS = config.get().testFlashCartRetailGames; // We don't check retail ROMs into the repo\n\nconst DIR = './tests/data/rom-formats/sms';\n\nconst SMS_FILENAME = `${DIR}/retail/Phantasy Star (USA, Europe) (Rev A).sms`; // The SMS header is pretty far into the file, so we can't just include a snippit of the beginning of the file\n\nconst ROM_CHECKSUM = 0xEAD8;\n\ndescribe('SMS ROM format', () => {\n  TEST_RETAIL_ROMS && it('should parse an SMS ROM', async () => { // eslint-disable-line no-unused-expressions\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SMS_FILENAME);\n\n    const smsRom = new SmsRom(romArrayBuffer);\n\n    expect(smsRom.getChecksum()).to.equal(ROM_CHECKSUM);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/rom-formats/SegaSaturn/SegaSaturnCueBin.spec.js",
    "content": "import { expect } from 'chai';\nimport SegaSaturnCueBin from '@/rom-formats/SegaSaturnCueBin';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/rom-formats/segasaturn';\n\nconst GAME_1_FILENAME = `${DIR}/Thunder Force V - track 1 header.bin`; // Not a real ROM file (!), just the parts in the header that we read\nconst GAME_2_FILENAME = `${DIR}/Saturn Bomberman - track 1 header.bin`; // Not a real ROM file (!), just the parts in the header that we read\n\ndescribe('Sega Saturn .cue/.bin format', () => {\n  it('should parse a .bin file', async () => {\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GAME_1_FILENAME);\n\n    const segaSaturnCueBin = new SegaSaturnCueBin(romArrayBuffer);\n\n    expect(segaSaturnCueBin.getGameId()).to.equal('T-1811G   V1.002');\n  });\n\n  it('should parse another .bin file', async () => {\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GAME_2_FILENAME);\n\n    const segaSaturnCueBin = new SegaSaturnCueBin(romArrayBuffer);\n\n    expect(segaSaturnCueBin.getGameId()).to.equal('MK-81070  V1.003');\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Dreamcast/Dreamcast.spec.js",
    "content": "/* eslint-disable no-bitwise, no-multi-str */\n\nimport { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport ArrayUtil from '@/util/Array';\n\nimport DreamcastBasics from '@/save-formats/Dreamcast/Components/Basics';\nimport DreamcastSaveData from '@/save-formats/Dreamcast/Dreamcast';\nimport DreamcastUtil from '@/save-formats/Dreamcast/Util';\n\nconst DIR = './tests/data/save-formats/dreamcast';\n\nconst EMPTY_DREAMCAST_FILENAME = `${DIR}/empty_vmu_image.bin`;\n\nconst DREAMCAST_FILENAME = `${DIR}/vmu_save_A1.bin`;\nconst RECREATED_DREAMCAST_FILENAME = `${DIR}/vmu_save_A1-created.bin`; // Contains the same data as DREAMCAST_FILENAME, but 2 of 10 dates in the above file contain inconsistent day-of-week numbers, so they differ when we re-create the file. Also sets the size of the extra area to 41 instead of 31\nconst DREAMCAST_SAVE_FILENAME = [\n  `${DIR}/vmu_save_A1-0.bin`,\n  `${DIR}/vmu_save_A1-1.bin`,\n  `${DIR}/vmu_save_A1-2.bin`,\n  `${DIR}/vmu_save_A1-3.bin`,\n  `${DIR}/vmu_save_A1-4.bin`,\n  `${DIR}/vmu_save_A1-5.bin`,\n  `${DIR}/vmu_save_A1-6.bin`,\n  `${DIR}/vmu_save_A1-7.bin`,\n  `${DIR}/vmu_save_A1-8.bin`,\n];\n\nconst DREAMCAST_EXTRA_SAVE_BLOCKS_FILENAME = `${DIR}/need_defrag_chao_adv2.bin`;\nconst DREAMCAST_EXTRA_SAVE_BLOCKS_SAVE_FILENAME = [\n  `${DIR}/need_defrag_chao_adv2-0.bin`,\n  `${DIR}/need_defrag_chao_adv2-1.bin`,\n  `${DIR}/need_defrag_chao_adv2-2.bin`,\n  `${DIR}/need_defrag_chao_adv2-3.bin`,\n  `${DIR}/need_defrag_chao_adv2-4.bin`,\n];\n\nconst DREAMCAST_EMPTY_COMMENTS_FILENAME = `${DIR}/vmu_extended_blocks_2.bin`;\nconst DREAMCAST_EMPTY_COMMENTS_SAVE_FILENAME = [\n  `${DIR}/vmu_extended_blocks_2-0.bin`,\n];\n\nconst DREAMCAST_GAME_FILENAME = `${DIR}/chao_adv2_mod.bin`;\nconst RECREATED_DREAMCAST_GAME_FILENAME = `${DIR}/chao_adv2_mod-created.bin`; // The original file contains data from a deleted save for Jet Set Radio, which is in the user area and the file allocation table. Also there's a day-of-week difference, and the original file contains a few nonstandard values in the system info block\nconst DREAMCAST_GAME_SAVE_FILENAME = [\n  `${DIR}/chao_adv2_mod-0.bin`,\n];\n\nconst DREAMCAST_INCORRECT_LARGEST_BLOCK_NUMBER_FILENAME = `${DIR}/vmoooo.bin`;\nconst DREAMCAST_INCORRECT_LARGEST_BLOCK_NUMBER_SAVE_FILENAME = [\n  `${DIR}/vmoooo.bin-0`,\n];\n\nconst DREAMCAST_INCORRECT_SIZE_FILENAME = `${DIR}/vmu5_FUCKED.vmu`;\n\nconst DREAMCAST_GAME_AND_DATA_FILENAME = `${DIR}/PACit.bin`;\nconst RECREATED_DREAMCAST_GAME_AND_DATA_FILENAME = `${DIR}/PACit-created.bin`; // The recreated file reverses the order of the directory, has differences in how it specifies the extra area in the FAT, and has day-of-week differences. It also has a different size for the extra area\nconst DREAMCAST_GAME_AND_DATA_SAVE_FILENAME = [\n  `${DIR}/PACit-0.bin`,\n  `${DIR}/PACit-1.bin`,\n];\n\ndescribe('Dreamcast', () => {\n  it('should correctly read a Dreamcast VMU image', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(DREAMCAST_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const dreamcastSaveData = DreamcastSaveData.createFromDreamcastData(arrayBuffer);\n\n    expect(dreamcastSaveData.getVolumeInfo().useCustomColor).to.equal(true);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.blue).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.green).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.red).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.alpha).to.equal(255);\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getVolumeInfo().timestamp)).to.equal('2024-10-12 19:56:48');\n    expect(dreamcastSaveData.getVolumeInfo().largestBlockNumber).to.equal(DreamcastBasics.NUM_BLOCKS - 1);\n    expect(dreamcastSaveData.getVolumeInfo().partitionNumber).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.blockNumber).to.equal(DreamcastBasics.SYSTEM_INFO_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.sizeInBlocks).to.equal(DreamcastBasics.SYSTEM_INFO_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.blockNumber).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.sizeInBlocks).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().directory.blockNumber).to.equal(DreamcastBasics.DIRECTORY_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().directory.sizeInBlocks).to.equal(DreamcastBasics.DIRECTORY_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().iconShape).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.blockNumber).to.equal(DreamcastBasics.EXTRA_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.sizeInBlocks).to.equal(31); // flycast writes 31 to this field instead of 41. maybe that's where this file is from? https://github.com/flyinghead/flycast/blob/33833cfd1ed2d94d907223442fdb8cdafd8d5d80/core/hw/maple/maple_devs.cpp#L532\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.blockNumber).to.equal(DreamcastBasics.SAVE_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.sizeInBlocks).to.equal(DreamcastBasics.SAVE_AREA_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().gameBlock).to.equal(DreamcastBasics.DEFAULT_GAME_BLOCK);\n    expect(dreamcastSaveData.getVolumeInfo().maxGameSize).to.equal(DreamcastBasics.DEFAULT_MAX_GAME_SIZE);\n\n    expect(dreamcastSaveData.getSaveFiles().length).to.equal(9);\n\n    expect(dreamcastSaveData.getSaveFiles()[0].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[0].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[0].firstBlockNumber).to.equal(199);\n    expect(dreamcastSaveData.getSaveFiles()[0].filename).to.equal('MVLVSCP2_SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[0].fileCreationTime)).to.equal('1999-11-27 07:37:16');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileSizeInBlocks).to.equal(5);\n    expect(dreamcastSaveData.getSaveFiles()[0].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[0].storageComment).to.equal('MVS.C2_SYSTEM   ');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileComment).to.equal('MARVEL VS.CAPCOM 2_SYSTEM FILE  ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[0].blockNumberList, ArrayUtil.createReverseSequentialArray(199, 5))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[1].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[1].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[1].firstBlockNumber).to.equal(194);\n    expect(dreamcastSaveData.getSaveFiles()[1].filename).to.equal('CVS.S2___SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[1].fileCreationTime)).to.equal('2001-09-13 11:42:43');\n    expect(dreamcastSaveData.getSaveFiles()[1].fileSizeInBlocks).to.equal(12);\n    expect(dreamcastSaveData.getSaveFiles()[1].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[1].storageComment).to.equal('CVS.S 2 ｼｽﾃﾑﾌｧｲﾙ'); // \"CVS.S 2 system files\"\n    expect(dreamcastSaveData.getSaveFiles()[1].fileComment).to.equal('CAPCOM VS. SNK 2 ｼｽﾃﾑﾌｧｲﾙ       '); // \"CAPCOM VS. SNK 2 System File\"\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[1].blockNumberList, ArrayUtil.createReverseSequentialArray(194, 12))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[1].rawData, rawArrayBuffers[1])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[2].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[2].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[2].firstBlockNumber).to.equal(182);\n    expect(dreamcastSaveData.getSaveFiles()[2].filename).to.equal('18WHDATA.SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[2].fileCreationTime)).to.equal('2001-05-27 17:01:06');\n    expect(dreamcastSaveData.getSaveFiles()[2].fileSizeInBlocks).to.equal(5);\n    expect(dreamcastSaveData.getSaveFiles()[2].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[2].storageComment).to.equal('18W SYS         ');\n    expect(dreamcastSaveData.getSaveFiles()[2].fileComment).to.equal('18WHEELER AMERICAN_PRO_TRUCKER  ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[2].blockNumberList, ArrayUtil.createReverseSequentialArray(182, 5))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[2].rawData, rawArrayBuffers[2])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[3].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[3].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[3].firstBlockNumber).to.equal(177);\n    expect(dreamcastSaveData.getSaveFiles()[3].filename).to.equal('SPAWNTDH.SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[3].fileCreationTime)).to.equal('2000-11-05 18:44:10');\n    expect(dreamcastSaveData.getSaveFiles()[3].fileSizeInBlocks).to.equal(2);\n    expect(dreamcastSaveData.getSaveFiles()[3].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[3].storageComment).to.equal('SPAWN SYSTEM    ');\n    expect(dreamcastSaveData.getSaveFiles()[3].fileComment).to.equal('スポーンシステム                '); // \"Spawning System\"\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[3].blockNumberList, ArrayUtil.createReverseSequentialArray(177, 2))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[3].rawData, rawArrayBuffers[3])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[4].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[4].copyProtected).to.equal(true); // The only save in this image that is copy protected\n    expect(dreamcastSaveData.getSaveFiles()[4].firstBlockNumber).to.equal(175);\n    expect(dreamcastSaveData.getSaveFiles()[4].filename).to.equal('PJUSTICE_SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[4].fileCreationTime)).to.equal('2001-05-21 22:04:08');\n    expect(dreamcastSaveData.getSaveFiles()[4].fileSizeInBlocks).to.equal(2);\n    expect(dreamcastSaveData.getSaveFiles()[4].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[4].storageComment).to.equal('SYSTEM FILE     ');\n    expect(dreamcastSaveData.getSaveFiles()[4].fileComment).to.equal('PROJECT JUSTICE                 ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[4].blockNumberList, ArrayUtil.createReverseSequentialArray(175, 2))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[4].rawData, rawArrayBuffers[4])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[5].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[5].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[5].firstBlockNumber).to.equal(173);\n    expect(dreamcastSaveData.getSaveFiles()[5].filename).to.equal('POWSTONE_DAT');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[5].fileCreationTime)).to.equal('2000-03-27 12:46:29');\n    expect(dreamcastSaveData.getSaveFiles()[5].fileSizeInBlocks).to.equal(4);\n    expect(dreamcastSaveData.getSaveFiles()[5].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[5].storageComment).to.equal('ﾊﾟﾜｰｽﾄｰﾝｾｰﾌﾞﾃﾞｰﾀ'); // \"Power Stone save data\"\n    expect(dreamcastSaveData.getSaveFiles()[5].fileComment).to.equal('パワーストーン　セーブデータ    2O'); // \"Power Stone save data\"\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[5].blockNumberList, ArrayUtil.createReverseSequentialArray(173, 4))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[5].rawData, rawArrayBuffers[5])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[6].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[6].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[6].firstBlockNumber).to.equal(169);\n    expect(dreamcastSaveData.getSaveFiles()[6].filename).to.equal('P_STONE2_DAT');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[6].fileCreationTime)).to.equal('2000-09-13 22:49:56');\n    expect(dreamcastSaveData.getSaveFiles()[6].fileSizeInBlocks).to.equal(5);\n    expect(dreamcastSaveData.getSaveFiles()[6].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[6].storageComment).to.equal('ﾊﾟﾜｰｽﾄｰﾝ2 ｾｰﾌﾞ  '); // \"Power Stone 2 Save\"\n    expect(dreamcastSaveData.getSaveFiles()[6].fileComment).to.equal('パワーストーン２　セーブデータ　2O'); // \"Power Stone 2 save data\"\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[6].blockNumberList, ArrayUtil.createReverseSequentialArray(169, 5))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[6].rawData, rawArrayBuffers[6])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[7].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[7].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[7].firstBlockNumber).to.equal(164);\n    expect(dreamcastSaveData.getSaveFiles()[7].filename).to.equal('ROMANCER_DAT');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[7].fileCreationTime)).to.equal('2000-06-18 01:18:59');\n    expect(dreamcastSaveData.getSaveFiles()[7].fileSizeInBlocks).to.equal(3);\n    expect(dreamcastSaveData.getSaveFiles()[7].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[7].storageComment).to.equal('ｷｶｲｵｰ ｾｰﾌﾞﾃﾞｰﾀ  '); // \"Machine save data\"\n    expect(dreamcastSaveData.getSaveFiles()[7].fileComment).to.equal('キカイオー　セーブデータ        '); // \"Kikaioh save data\"\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[7].blockNumberList, ArrayUtil.createReverseSequentialArray(164, 3))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[7].rawData, rawArrayBuffers[7])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[8].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[8].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[8].firstBlockNumber).to.equal(161);\n    expect(dreamcastSaveData.getSaveFiles()[8].filename).to.equal('R2RUMBLE.001');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[8].fileCreationTime)).to.equal('2025-07-20 15:15:35');\n    expect(dreamcastSaveData.getSaveFiles()[8].fileSizeInBlocks).to.equal(6);\n    expect(dreamcastSaveData.getSaveFiles()[8].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[8].storageComment).to.equal('POD 5!          ');\n    expect(dreamcastSaveData.getSaveFiles()[8].fileComment).to.equal('Ready 2 Rumble Boxing           Ready 2 Rumble  ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[8].blockNumberList, ArrayUtil.createReverseSequentialArray(161, 6))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[8].rawData, rawArrayBuffers[8])).to.equal(true);\n  });\n\n  it('should correctly create an empty Dreamcast VMU image', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMPTY_DREAMCAST_FILENAME);\n\n    const volumeInfo = {\n      useCustomColor: true,\n      customColor: {\n        blue: 0xAB,\n        green: 0xCD,\n        red: 0xEF,\n        alpha: 0x42,\n      },\n      timestamp: new Date('2025-10-18 13:42:00'),\n      iconShape: 42,\n    };\n\n    const dreamcastSaveData = DreamcastSaveData.createFromSaveFiles([], volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read an empty Dreamcast VMU image', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMPTY_DREAMCAST_FILENAME);\n\n    const dreamcastSaveData = DreamcastSaveData.createFromDreamcastData(arrayBuffer);\n\n    expect(dreamcastSaveData.getVolumeInfo().useCustomColor).to.equal(true);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.blue).to.equal(0xAB);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.green).to.equal(0xCD);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.red).to.equal(0xEF);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.alpha).to.equal(0x42);\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getVolumeInfo().timestamp)).to.equal('2025-10-18 13:42:00');\n    expect(dreamcastSaveData.getVolumeInfo().largestBlockNumber).to.equal(DreamcastBasics.NUM_BLOCKS - 1);\n    expect(dreamcastSaveData.getVolumeInfo().partitionNumber).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.blockNumber).to.equal(DreamcastBasics.SYSTEM_INFO_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.sizeInBlocks).to.equal(DreamcastBasics.SYSTEM_INFO_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.blockNumber).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.sizeInBlocks).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().directory.blockNumber).to.equal(DreamcastBasics.DIRECTORY_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().directory.sizeInBlocks).to.equal(DreamcastBasics.DIRECTORY_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().iconShape).to.equal(42);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.blockNumber).to.equal(DreamcastBasics.EXTRA_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.sizeInBlocks).to.equal(DreamcastBasics.EXTRA_AREA_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.blockNumber).to.equal(DreamcastBasics.SAVE_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.sizeInBlocks).to.equal(DreamcastBasics.SAVE_AREA_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().gameBlock).to.equal(DreamcastBasics.DEFAULT_GAME_BLOCK);\n    expect(dreamcastSaveData.getVolumeInfo().maxGameSize).to.equal(DreamcastBasics.DEFAULT_MAX_GAME_SIZE);\n  });\n\n  it('should correctly create a Dreamcast VMU image', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(RECREATED_DREAMCAST_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const volumeInfo = {\n      useCustomColor: true,\n      customColor: {\n        blue: 255,\n        green: 255,\n        red: 255,\n        alpha: 255,\n      },\n      timestamp: new Date('2024-10-12 19:56:48'),\n      iconShape: 0,\n    };\n\n    const saveFiles = [\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: 'MVLVSCP2_SYS',\n        fileCreationTime: new Date('1999-11-27 07:37:16'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[0],\n      },\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: 'CVS.S2___SYS',\n        fileCreationTime: new Date('2001-09-13 11:42:43'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[1],\n      },\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: '18WHDATA.SYS',\n        fileCreationTime: new Date('2001-05-27 17:01:06'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[2],\n      },\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: 'SPAWNTDH.SYS',\n        fileCreationTime: new Date('2000-11-05 18:44:10'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[3],\n      },\n      {\n        fileType: 'Data',\n        copyProtected: true, // The only save in this image that is copy protected\n        filename: 'PJUSTICE_SYS',\n        fileCreationTime: new Date('2001-05-21 22:04:08'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[4],\n      },\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: 'POWSTONE_DAT',\n        fileCreationTime: new Date('2000-03-27 12:46:29'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[5],\n      },\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: 'P_STONE2_DAT',\n        fileCreationTime: new Date('2000-09-13 22:49:56'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[6],\n      },\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: 'ROMANCER_DAT',\n        fileCreationTime: new Date('2000-06-18 01:18:59'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[7],\n      },\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: 'R2RUMBLE.001',\n        fileCreationTime: new Date('2025-07-20 15:15:35'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[8],\n      },\n    ];\n\n    const dreamcastSaveData = DreamcastSaveData.createFromSaveFiles(saveFiles, volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a Dreamcast VMU image with an expanded save area', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(DREAMCAST_EXTRA_SAVE_BLOCKS_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_EXTRA_SAVE_BLOCKS_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const dreamcastSaveData = DreamcastSaveData.createFromDreamcastData(arrayBuffer);\n\n    expect(dreamcastSaveData.getVolumeInfo().useCustomColor).to.equal(false);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.blue).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.green).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.red).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.alpha).to.equal(255);\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getVolumeInfo().timestamp)).to.equal('1812-02-03 04:56:45');\n    expect(dreamcastSaveData.getVolumeInfo().largestBlockNumber).to.equal(DreamcastBasics.NUM_BLOCKS - 1);\n    expect(dreamcastSaveData.getVolumeInfo().partitionNumber).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.blockNumber).to.equal(DreamcastBasics.SYSTEM_INFO_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.sizeInBlocks).to.equal(DreamcastBasics.SYSTEM_INFO_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.blockNumber).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.sizeInBlocks).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().directory.blockNumber).to.equal(DreamcastBasics.DIRECTORY_END_BLOCK_NUMBER); // This file is laid out incorrectly and specifies its blocks from the side closest to the beginning of the file\n    expect(dreamcastSaveData.getVolumeInfo().directory.sizeInBlocks).to.equal(DreamcastBasics.DIRECTORY_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().iconShape).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.blockNumber).to.equal(DreamcastBasics.EXTRA_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.sizeInBlocks).to.equal(0); // Not the usual DreamcastBasics.EXTRA_AREA_SIZE_IN_BLOCKS (41)\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.blockNumber).to.equal(DreamcastBasics.SAVE_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.sizeInBlocks).to.equal(240); // Not the usual DreamcastBasics.SAVE_AREA_SIZE_IN_BLOCKS (200)\n    expect(dreamcastSaveData.getVolumeInfo().gameBlock).to.equal(DreamcastBasics.DEFAULT_GAME_BLOCK);\n    expect(dreamcastSaveData.getVolumeInfo().maxGameSize).to.equal(0); // Not the usual DreamcastBasics.DEFAULT_MAX_GAME_SIZE (128)\n\n    expect(dreamcastSaveData.getSaveFiles().length).to.equal(5);\n\n    expect(dreamcastSaveData.getSaveFiles()[0].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[0].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[0].firstBlockNumber).to.equal(235);\n    expect(dreamcastSaveData.getSaveFiles()[0].filename).to.equal('JETSET___XLA');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[0].fileCreationTime)).to.equal('2018-10-26 01:53:41');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileSizeInBlocks).to.equal(61);\n    expect(dreamcastSaveData.getSaveFiles()[0].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[0].storageComment).to.equal('JET_GRAFFITI_X  ');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileComment).to.equal('JETSETRADIO XLARGE              ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[0].blockNumberList, ArrayUtil.createReverseSequentialArray(235, 61))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[1].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[1].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[1].firstBlockNumber).to.equal(174);\n    expect(dreamcastSaveData.getSaveFiles()[1].filename).to.equal('SHENMUE2_002');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[1].fileCreationTime)).to.equal('2018-10-26 01:53:52');\n    expect(dreamcastSaveData.getSaveFiles()[1].fileSizeInBlocks).to.equal(18);\n    expect(dreamcastSaveData.getSaveFiles()[1].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[1].storageComment).to.equal('SHENMUE2        ');\n    expect(dreamcastSaveData.getSaveFiles()[1].fileComment).to.equal('シェンムー　２                  '); // \"Shenmue 2\"\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[1].blockNumberList, ArrayUtil.createReverseSequentialArray(174, 18))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[1].rawData, rawArrayBuffers[1])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[2].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[2].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[2].firstBlockNumber).to.equal(152);\n    expect(dreamcastSaveData.getSaveFiles()[2].filename).to.equal('AQUAGTRACING');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[2].fileCreationTime)).to.equal('2018-10-26 01:54:00');\n    expect(dreamcastSaveData.getSaveFiles()[2].fileSizeInBlocks).to.equal(8);\n    expect(dreamcastSaveData.getSaveFiles()[2].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[2].storageComment).to.equal('GAME SETTINGS   ');\n    expect(dreamcastSaveData.getSaveFiles()[2].fileComment).to.equal('AQUA GT RACING                  ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[2].blockNumberList, ArrayUtil.createReverseSequentialArray(152, 8))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[2].rawData, rawArrayBuffers[2])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[3].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[3].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[3].firstBlockNumber).to.equal(144);\n    expect(dreamcastSaveData.getSaveFiles()[3].filename).to.equal('SAMBAUS1.SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[3].fileCreationTime)).to.equal('2018-10-26 01:54:03');\n    expect(dreamcastSaveData.getSaveFiles()[3].fileSizeInBlocks).to.equal(6);\n    expect(dreamcastSaveData.getSaveFiles()[3].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[3].storageComment).to.equal('Main Backup Data');\n    expect(dreamcastSaveData.getSaveFiles()[3].fileComment).to.equal('SAMBA MAIN                      ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[3].blockNumberList, ArrayUtil.createReverseSequentialArray(144, 6))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[3].rawData, rawArrayBuffers[3])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[4].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[4].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[4].firstBlockNumber).to.equal(138);\n    expect(dreamcastSaveData.getSaveFiles()[4].filename).to.equal('SAMBAV2K.SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[4].fileCreationTime)).to.equal('2018-10-26 01:55:00');\n    expect(dreamcastSaveData.getSaveFiles()[4].fileSizeInBlocks).to.equal(17);\n    expect(dreamcastSaveData.getSaveFiles()[4].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[4].storageComment).to.equal('ﾒｲﾝﾊﾞｯｸｱｯﾌﾟﾃﾞｰﾀ '); // \"Main backup data\"\n    expect(dreamcastSaveData.getSaveFiles()[4].fileComment).to.equal('サンバＤＥアミーゴVer2000 メイン'); // \"Samba DE Amigo Ver. 2000 Main\"\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[4].blockNumberList, ArrayUtil.createReverseSequentialArray(138, 17))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[4].rawData, rawArrayBuffers[4])).to.equal(true);\n  });\n\n  it('should correctly read a Dreamcast VMU image containing a file with empty comments', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(DREAMCAST_EMPTY_COMMENTS_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_EMPTY_COMMENTS_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const dreamcastSaveData = DreamcastSaveData.createFromDreamcastData(arrayBuffer);\n\n    expect(dreamcastSaveData.getVolumeInfo().useCustomColor).to.equal(true);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.blue).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.green).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.red).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.alpha).to.equal(255);\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getVolumeInfo().timestamp)).to.equal('1998-11-27 00:00:58');\n    expect(dreamcastSaveData.getVolumeInfo().largestBlockNumber).to.equal(DreamcastBasics.NUM_BLOCKS - 1);\n    expect(dreamcastSaveData.getVolumeInfo().partitionNumber).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.blockNumber).to.equal(DreamcastBasics.SYSTEM_INFO_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.sizeInBlocks).to.equal(DreamcastBasics.SYSTEM_INFO_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.blockNumber).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.sizeInBlocks).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().directory.blockNumber).to.equal(DreamcastBasics.DIRECTORY_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().directory.sizeInBlocks).to.equal(DreamcastBasics.DIRECTORY_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().iconShape).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.blockNumber).to.equal(DreamcastBasics.EXTRA_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.sizeInBlocks).to.equal(31); // Not the usual DreamcastBasics.EXTRA_AREA_SIZE_IN_BLOCKS (41)\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.blockNumber).to.equal(DreamcastBasics.SAVE_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.sizeInBlocks).to.equal(241); // Not the usual DreamcastBasics.SAVE_AREA_SIZE_IN_BLOCKS (200)\n    expect(dreamcastSaveData.getVolumeInfo().gameBlock).to.equal(DreamcastBasics.DEFAULT_GAME_BLOCK);\n    expect(dreamcastSaveData.getVolumeInfo().maxGameSize).to.equal(DreamcastBasics.DEFAULT_MAX_GAME_SIZE);\n\n    expect(dreamcastSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dreamcastSaveData.getSaveFiles()[0].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[0].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[0].firstBlockNumber).to.equal(240);\n    expect(dreamcastSaveData.getSaveFiles()[0].filename).to.equal('VMUTOOL__OPT');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[0].fileCreationTime)).to.equal('2018-10-26 01:00:24');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileSizeInBlocks).to.equal(8);\n    expect(dreamcastSaveData.getSaveFiles()[0].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[0].storageComment).to.equal('');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileComment).to.equal('');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[0].blockNumberList, ArrayUtil.createReverseSequentialArray(240, 8))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n  });\n\n  it('should correctly read a Dreamcast VMU image containing a game', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(DREAMCAST_GAME_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_GAME_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const dreamcastSaveData = DreamcastSaveData.createFromDreamcastData(arrayBuffer);\n\n    expect(dreamcastSaveData.getVolumeInfo().useCustomColor).to.equal(true);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.blue).to.equal(47);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.green).to.equal(79);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.red).to.equal(31);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.alpha).to.equal(255);\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getVolumeInfo().timestamp)).to.equal('2018-11-17 20:06:34');\n    expect(dreamcastSaveData.getVolumeInfo().largestBlockNumber).to.equal(DreamcastBasics.NUM_BLOCKS - 1);\n    expect(dreamcastSaveData.getVolumeInfo().partitionNumber).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.blockNumber).to.equal(DreamcastBasics.SYSTEM_INFO_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.sizeInBlocks).to.equal(DreamcastBasics.SYSTEM_INFO_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.blockNumber).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.sizeInBlocks).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().directory.blockNumber).to.equal(DreamcastBasics.DIRECTORY_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().directory.sizeInBlocks).to.equal(DreamcastBasics.DIRECTORY_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().iconShape).to.equal(8); // Not the usual 0\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.blockNumber).to.equal(DreamcastBasics.EXTRA_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.sizeInBlocks).to.equal(0); // Not the usual DreamcastBasics.EXTRA_AREA_SIZE_IN_BLOCKS (41)\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.blockNumber).to.equal(DreamcastBasics.SAVE_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.sizeInBlocks).to.equal(240); // Not the usual DreamcastBasics.SAVE_AREA_SIZE_IN_BLOCKS (200)\n    expect(dreamcastSaveData.getVolumeInfo().gameBlock).to.equal(DreamcastBasics.DEFAULT_GAME_BLOCK);\n    expect(dreamcastSaveData.getVolumeInfo().maxGameSize).to.equal(0); // Not the usual DreamcastBasics.DEFAULT_MAX_GAME_SIZE\n\n    expect(dreamcastSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dreamcastSaveData.getSaveFiles()[0].fileType).to.equal('Game');\n    expect(dreamcastSaveData.getSaveFiles()[0].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[0].firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[0].filename).to.equal('SONIC2____VM');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[0].fileCreationTime)).to.equal('2018-11-17 20:50:26');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileSizeInBlocks).to.equal(128);\n    expect(dreamcastSaveData.getSaveFiles()[0].fileHeaderBlockNumber).to.equal(1);\n    expect(dreamcastSaveData.getSaveFiles()[0].storageComment).to.equal('CHAO ADV 2      ');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileComment).to.equal('SONIC ADVENTURE 2 / CHAO ADV 2  ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[0].blockNumberList, ArrayUtil.createSequentialArray(0, 128))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n  });\n\n  it('should correctly create a Dreamcast VMU image containing a game', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(RECREATED_DREAMCAST_GAME_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_GAME_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const volumeInfo = {\n      useCustomColor: true,\n      customColor: {\n        blue: 47,\n        green: 79,\n        red: 31,\n        alpha: 255,\n      },\n      timestamp: new Date('2018-11-17 20:06:34'),\n      iconShape: 8,\n    };\n\n    const saveFiles = [\n      {\n        fileType: 'Game',\n        copyProtected: true,\n        filename: 'SONIC2____VM',\n        fileCreationTime: new Date('2018-11-17 20:50:26'),\n        fileHeaderBlockNumber: 1,\n        rawData: rawArrayBuffers[0],\n      },\n    ];\n\n    const dreamcastSaveData = DreamcastSaveData.createFromSaveFiles(saveFiles, volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a Dreamcast VMU image with an incorrect largest block number', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(DREAMCAST_INCORRECT_LARGEST_BLOCK_NUMBER_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_INCORRECT_LARGEST_BLOCK_NUMBER_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const dreamcastSaveData = DreamcastSaveData.createFromDreamcastData(arrayBuffer);\n\n    expect(dreamcastSaveData.getVolumeInfo().useCustomColor).to.equal(false);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.blue).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.green).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.red).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.alpha).to.equal(255);\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getVolumeInfo().timestamp)).to.equal('2022-11-01 23:05:05');\n    expect(dreamcastSaveData.getVolumeInfo().largestBlockNumber).to.equal(256); // Not the usual DreamcastBasics.NUM_BLOCKS - 1\n    expect(dreamcastSaveData.getVolumeInfo().partitionNumber).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.blockNumber).to.equal(DreamcastBasics.SYSTEM_INFO_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.sizeInBlocks).to.equal(DreamcastBasics.SYSTEM_INFO_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.blockNumber).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.sizeInBlocks).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().directory.blockNumber).to.equal(DreamcastBasics.DIRECTORY_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().directory.sizeInBlocks).to.equal(DreamcastBasics.DIRECTORY_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().iconShape).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.blockNumber).to.equal(DreamcastBasics.EXTRA_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.sizeInBlocks).to.equal(31); // Not the usual DreamcastBasics.EXTRA_AREA_SIZE_IN_BLOCKS (41)\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.blockNumber).to.equal(DreamcastBasics.SAVE_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.sizeInBlocks).to.equal(DreamcastBasics.SAVE_AREA_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().gameBlock).to.equal(DreamcastBasics.DEFAULT_GAME_BLOCK);\n    expect(dreamcastSaveData.getVolumeInfo().maxGameSize).to.equal(0); // Not the usual DreamcastBasics.DEFAULT_MAX_GAME_SIZE\n\n    expect(dreamcastSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dreamcastSaveData.getSaveFiles()[0].fileType).to.equal('Game');\n    expect(dreamcastSaveData.getSaveFiles()[0].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[0].firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[0].filename).to.equal('SONICADV__VM');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[0].fileCreationTime)).to.equal('2022-11-01 23:31:14');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileSizeInBlocks).to.equal(128);\n    expect(dreamcastSaveData.getSaveFiles()[0].fileHeaderBlockNumber).to.equal(1);\n    expect(dreamcastSaveData.getSaveFiles()[0].storageComment).to.equal('CHAO_ADVENTURE  ');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileComment).to.equal('SONIC ADVENTURE / CHAO Adventure');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[0].blockNumberList, ArrayUtil.createSequentialArray(0, 128))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n  });\n\n  it('should throw an error when reading a Dreamcast VMU image with an incorrect size', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(DREAMCAST_INCORRECT_SIZE_FILENAME);\n\n    expect(() => DreamcastSaveData.createFromDreamcastData(arrayBuffer).to.throw(\n      Error,\n      'This does not appear to be a Dreamcast VMU image',\n    ));\n  });\n\n  it('should correctly read a Dreamcast VMU image with a game and a data file', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(DREAMCAST_GAME_AND_DATA_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_GAME_AND_DATA_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const dreamcastSaveData = DreamcastSaveData.createFromDreamcastData(arrayBuffer);\n\n    expect(dreamcastSaveData.getVolumeInfo().useCustomColor).to.equal(true);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.blue).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.green).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.red).to.equal(255);\n    expect(dreamcastSaveData.getVolumeInfo().customColor.alpha).to.equal(255);\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getVolumeInfo().timestamp)).to.equal('1998-11-27 00:00:58');\n    expect(dreamcastSaveData.getVolumeInfo().largestBlockNumber).to.equal(DreamcastBasics.NUM_BLOCKS - 1);\n    expect(dreamcastSaveData.getVolumeInfo().partitionNumber).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.blockNumber).to.equal(DreamcastBasics.SYSTEM_INFO_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().systemInfo.sizeInBlocks).to.equal(DreamcastBasics.SYSTEM_INFO_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.blockNumber).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().fileAllocationTable.sizeInBlocks).to.equal(DreamcastBasics.FILE_ALLOCATION_TABLE_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().directory.blockNumber).to.equal(DreamcastBasics.DIRECTORY_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().directory.sizeInBlocks).to.equal(DreamcastBasics.DIRECTORY_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().iconShape).to.equal(0);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.blockNumber).to.equal(DreamcastBasics.EXTRA_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().extraArea.sizeInBlocks).to.equal(31); // Not the usual DreamcastBasics.EXTRA_AREA_SIZE_IN_BLOCKS (41)\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.blockNumber).to.equal(DreamcastBasics.SAVE_AREA_BLOCK_NUMBER);\n    expect(dreamcastSaveData.getVolumeInfo().saveArea.sizeInBlocks).to.equal(DreamcastBasics.SAVE_AREA_SIZE_IN_BLOCKS);\n    expect(dreamcastSaveData.getVolumeInfo().gameBlock).to.equal(DreamcastBasics.DEFAULT_GAME_BLOCK);\n    expect(dreamcastSaveData.getVolumeInfo().maxGameSize).to.equal(DreamcastBasics.DEFAULT_MAX_GAME_SIZE);\n\n    expect(dreamcastSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(dreamcastSaveData.getSaveFiles()[0].fileType).to.equal('Data');\n    expect(dreamcastSaveData.getSaveFiles()[0].copyProtected).to.equal(false);\n    expect(dreamcastSaveData.getSaveFiles()[0].firstBlockNumber).to.equal(199);\n    expect(dreamcastSaveData.getSaveFiles()[0].filename).to.equal('NAMCOMUS.SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[0].fileCreationTime)).to.equal('2019-04-16 18:19:32');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileSizeInBlocks).to.equal(8);\n    expect(dreamcastSaveData.getSaveFiles()[0].fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[0].storageComment).to.equal('Namco Museum    ');\n    expect(dreamcastSaveData.getSaveFiles()[0].fileComment).to.equal('Namco Museum High-Scores        NAMCOMUS.SYS');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[0].blockNumberList, ArrayUtil.createReverseSequentialArray(199, 8))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(dreamcastSaveData.getSaveFiles()[1].fileType).to.equal('Game');\n    expect(dreamcastSaveData.getSaveFiles()[1].copyProtected).to.equal(true);\n    expect(dreamcastSaveData.getSaveFiles()[1].firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveData.getSaveFiles()[1].filename).to.equal('PACIT_NM.VMU');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveData.getSaveFiles()[1].fileCreationTime)).to.equal('2019-04-16 18:19:41');\n    expect(dreamcastSaveData.getSaveFiles()[1].fileSizeInBlocks).to.equal(9);\n    expect(dreamcastSaveData.getSaveFiles()[1].fileHeaderBlockNumber).to.equal(1);\n    expect(dreamcastSaveData.getSaveFiles()[1].storageComment).to.equal('PACit           ');\n    expect(dreamcastSaveData.getSaveFiles()[1].fileComment).to.equal('(c) Copyright 2000 NAMCO Ltd.   ');\n    expect(ArrayUtil.arraysEqual(dreamcastSaveData.getSaveFiles()[1].blockNumberList, ArrayUtil.createSequentialArray(0, 9))).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getSaveFiles()[1].rawData, rawArrayBuffers[1])).to.equal(true);\n  });\n\n  it('should correctly create a Dreamcast VMU image containing a game and a data file', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(RECREATED_DREAMCAST_GAME_AND_DATA_FILENAME);\n    const rawArrayBuffers = await Promise.all(DREAMCAST_GAME_AND_DATA_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const volumeInfo = {\n      useCustomColor: true,\n      customColor: {\n        blue: 255,\n        green: 255,\n        red: 255,\n        alpha: 255,\n      },\n      timestamp: new Date('1998-11-27 00:00:58'),\n      iconShape: 0,\n    };\n\n    // Note that these files get reordered in the directory of the outputted file since we always put games first\n    const saveFiles = [\n      {\n        fileType: 'Data',\n        copyProtected: false,\n        filename: 'NAMCOMUS.SYS',\n        fileCreationTime: new Date('2019-04-16 18:19:32'),\n        fileHeaderBlockNumber: 0,\n        rawData: rawArrayBuffers[0],\n      },\n      {\n        fileType: 'Game',\n        copyProtected: true,\n        filename: 'PACIT_NM.VMU',\n        fileCreationTime: new Date('2019-04-16 18:19:41'),\n        fileHeaderBlockNumber: 1,\n        rawData: rawArrayBuffers[1],\n      },\n    ];\n\n    const dreamcastSaveData = DreamcastSaveData.createFromSaveFiles(saveFiles, volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Dreamcast/IndividualSaves/Dci.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport DreamcastDciSaveData from '@/save-formats/Dreamcast/IndividualSaves/Dci';\nimport DreamcastUtil from '@/save-formats/Dreamcast/Util';\n\nconst DIR = './tests/data/save-formats/dreamcast/individualsaves';\n\nconst DCI_FILENAME = `${DIR}/kiss-psycho-circus-the-nightmare-child.29341.dci`;\nconst DCI_RECREATED_FILENAME = `${DIR}/kiss-psycho-circus-the-nightmare-child.29341-recreated.dci`; // The day of week is set incorrectly in the original file, which is the only difference vs this file that we output\nconst RAW_FILENAME = `${DIR}/kiss-psycho-circus-the-nightmare-child.29341.bin`;\n\nconst DCI_NO_COPY_FILENAME = `${DIR}/project-justice.882.dci`;\nconst DCI_NO_COPY_RECREATED_FILENAME = `${DIR}/project-justice.882-recreated.dci`; // The day of week is set incorrectly in the original file, which is the only difference vs this file that we output\nconst RAW_NO_COPY_FILENAME = `${DIR}/project-justice.882.bin`;\n\nconst DCI_GAME_FILENAME = `${DIR}/tetr.dci`;\nconst DCI_GAME_RECREATED_FILENAME = `${DIR}/tetr-recreated.dci`; // The day of week is set incorrectly in the original file, as well as the number of blocks\nconst RAW_GAME_FILENAME = `${DIR}/tetr.bin`;\n\ndescribe('Dreamcast - .DCI', () => {\n  it('should correctly read a .DCI file', async () => {\n    const dciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DCI_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const dreamcastSaveFile = DreamcastDciSaveData.convertIndividualSaveToSaveFile(dciArrayBuffer);\n\n    expect(dreamcastSaveFile.fileType).to.equal('Data');\n    expect(dreamcastSaveFile.copyProtected).to.equal(false);\n    expect(dreamcastSaveFile.firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.filename).to.equal('TRMR_KPC.DAT');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveFile.fileCreationTime)).to.equal('1999-09-23 05:55:04');\n    expect(dreamcastSaveFile.fileSizeInBlocks).to.equal(3);\n    expect(dreamcastSaveFile.fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.storageComment).to.equal('KISSPSYCHOCIRCUS');\n    expect(dreamcastSaveFile.fileComment).to.equal('');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write a .DCI file', async () => {\n    const dciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DCI_RECREATED_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const saveFile = {\n      fileType: 'Data',\n      copyProtected: false,\n      filename: 'TRMR_KPC.DAT',\n      fileCreationTime: new Date('1999-09-23 05:55:04'),\n      fileHeaderBlockNumber: 0,\n      rawData: rawArrayBuffer,\n    };\n\n    const dreamcastSaveFile = DreamcastDciSaveData.convertSaveFileToDci(saveFile);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile, dciArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a .DCI file with the no copy flag', async () => {\n    const dciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DCI_NO_COPY_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_NO_COPY_FILENAME);\n\n    const dreamcastSaveFile = DreamcastDciSaveData.convertIndividualSaveToSaveFile(dciArrayBuffer);\n\n    expect(dreamcastSaveFile.fileType).to.equal('Data');\n    expect(dreamcastSaveFile.copyProtected).to.equal(false); // This game sets this flag to be true, but whatever device made this file appears to have set it to false\n    expect(dreamcastSaveFile.firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.filename).to.equal('PJUSTICE_SYS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveFile.fileCreationTime)).to.equal('2001-05-30 14:42:42');\n    expect(dreamcastSaveFile.fileSizeInBlocks).to.equal(2);\n    expect(dreamcastSaveFile.fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.storageComment).to.equal('SYSTEM FILE     ');\n    expect(dreamcastSaveFile.fileComment).to.equal('PROJECT JUSTICE                 ');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write a .DCI file with the no copy flag', async () => {\n    const dciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DCI_NO_COPY_RECREATED_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_NO_COPY_FILENAME);\n\n    const saveFile = {\n      fileType: 'Data',\n      copyProtected: false, // This game sets this flag to be true, but whatever device made this file appears to have set it to false\n      filename: 'PJUSTICE_SYS',\n      fileCreationTime: new Date('2001-05-30 14:42:42'),\n      fileHeaderBlockNumber: 0,\n      rawData: rawArrayBuffer,\n    };\n\n    const dreamcastSaveFile = DreamcastDciSaveData.convertSaveFileToDci(saveFile);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile, dciArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a .DCI file containing a game', async () => {\n    const dciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DCI_GAME_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GAME_FILENAME);\n\n    const dreamcastSaveFile = DreamcastDciSaveData.convertIndividualSaveToSaveFile(dciArrayBuffer, false); // The number of blocks listed in the directory entry header doesn't match the number of blocks in the actual data\n\n    expect(dreamcastSaveFile.fileType).to.equal('Game');\n    expect(dreamcastSaveFile.copyProtected).to.equal(true);\n    expect(dreamcastSaveFile.firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.filename).to.equal('TINY_TETRIS');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveFile.fileCreationTime)).to.equal('2018-11-15 20:10:44');\n    expect(dreamcastSaveFile.fileSizeInBlocks).to.equal(7);\n    expect(dreamcastSaveFile.fileHeaderBlockNumber).to.equal(1);\n    expect(dreamcastSaveFile.storageComment).to.equal('Tiny Tetris     ');\n    expect(dreamcastSaveFile.fileComment).to.equal('Mini VMU Tetris by marcus       ');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write a .DCI file containing a game', async () => {\n    const dciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DCI_GAME_RECREATED_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GAME_FILENAME);\n\n    const saveFile = {\n      fileType: 'Game',\n      copyProtected: true,\n      filename: 'TINY_TETRIS',\n      fileCreationTime: new Date('2018-11-15 20:10:44'),\n      fileHeaderBlockNumber: 1,\n      rawData: rawArrayBuffer,\n    };\n\n    const dreamcastSaveFile = DreamcastDciSaveData.convertSaveFileToDci(saveFile);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile, dciArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Dreamcast/IndividualSaves/VmiVms.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport DreamcastVmiVmsSaveData from '@/save-formats/Dreamcast/IndividualSaves/VmiVms';\nimport DreamcastUtil from '@/save-formats/Dreamcast/Util';\n\nconst DIR = './tests/data/save-formats/dreamcast/individualsaves';\n\nconst VMI_1_FILENAME = `${DIR}/IKARUGA.VMI`;\nconst VMI_1_RECREATED_FILENAME = `${DIR}/IKARUGA-recreated.VMI`; // This one differs just by the day of week in the timestamp\nconst VMS_1_FILENAME = `${DIR}/IKARUGA.VMS`;\n\nconst VMI_2_FILENAME = `${DIR}/v93102.vmi`;\nconst VMI_2_RECREATED_FILENAME = `${DIR}/v93102-recreated.vmi`; // As with all the planetweb files, the checksum in the original file was set incorrectly\nconst VMS_2_FILENAME = `${DIR}/v93102.VMS`;\n\nconst VMI_3_FILENAME = `${DIR}/v4596.vmi`;\nconst VMI_3_RECREATED_FILENAME = `${DIR}/v4596-recreated.vmi`; // As with all the planetweb files, the checksum in the original file was set incorrectly\nconst VMS_3_FILENAME = `${DIR}/v4596.VMS`;\n\nconst VMI_4_FILENAME = `${DIR}/KISSPC.VMI`;\nconst VMI_4_RECREATED_FILENAME = `${DIR}/KISSPC-recreated.VMI`; // This one differs by the day of week and also we just set the version to 0 whereas the original file had a different version number\nconst VMS_4_FILENAME = `${DIR}/KISSPC.VMS`;\n\nconst VMI_GAME_FILENAME = `${DIR}/FLPPYBRD.VMI`; // Our output file is exactly the same as the original file\nconst VMS_GAME_FILENAME = `${DIR}/FLPPYBRD.vms`;\n\ndescribe('Dreamcast - .VMI/.VMS', () => {\n  it('should correctly read a .VMI/.VMS pair of files', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_1_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_1_FILENAME);\n\n    const dreamcastSaveFile = DreamcastVmiVmsSaveData.convertIndividualSaveToSaveFile(vmiArrayBuffer, vmsArrayBuffer);\n\n    expect(dreamcastSaveFile.checksum).to.equal(0x41414140); // This checksum matches the calculated checksum\n    expect(dreamcastSaveFile.description).to.equal('ikaruga                         ');\n    expect(dreamcastSaveFile.copyright).to.equal('jeffma                          ');\n    expect(dreamcastSaveFile.version).to.equal(0);\n    expect(dreamcastSaveFile.fileNumber).to.equal(1);\n    expect(dreamcastSaveFile.resourceName).to.equal('IKARUGA');\n    expect(dreamcastSaveFile.fileMode).to.equal(DreamcastVmiVmsSaveData.FILE_MODE_NONE);\n    expect(dreamcastSaveFile.fileSize).to.equal(17408);\n\n    expect(dreamcastSaveFile.filename).to.equal('IKARUGA_DATA');\n    expect(dreamcastSaveFile.fileType).to.equal('Data');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveFile.fileCreationTime)).to.equal('2002-09-07 20:22:06');\n    expect(dreamcastSaveFile.copyProtected).to.equal(false);\n    expect(dreamcastSaveFile.fileSizeInBlocks).to.equal(34);\n    expect(dreamcastSaveFile.firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.storageComment).to.equal('ﾒｲﾝﾊﾞｯｸｱｯﾌﾟﾃﾞｰﾀ '); // \"Main backup data\"\n    expect(dreamcastSaveFile.fileComment).to.equal('斑鳩（いかるが）                '); // \"Ikaruga\"\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile.rawData, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write a .VMI/.VMS pair of files', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_1_RECREATED_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_1_FILENAME);\n\n    const saveFile = {\n      // These parts are specific to .vmi/.vms files\n      description: 'ikaruga                         ',\n      copyright: 'jeffma                          ',\n      resourceName: 'IKARUGA',\n\n      // These parts are common to dreamcast save files\n      filename: 'IKARUGA_DATA',\n      fileType: 'Data',\n      fileCreationTime: new Date('2002-09-07 20:22:06'),\n      copyProtected: false,\n      rawData: vmsArrayBuffer,\n    };\n\n    const createdFiles = DreamcastVmiVmsSaveData.convertSaveFileToVmiVms(saveFile);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmiArrayBuffer, vmiArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmsArrayBuffer, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a second .VMI/.VMS pair of files', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_2_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_2_FILENAME);\n\n    const dreamcastSaveFile = DreamcastVmiVmsSaveData.convertIndividualSaveToSaveFile(vmiArrayBuffer, vmsArrayBuffer);\n\n    expect(dreamcastSaveFile.checksum).to.equal(0x41444440); // This checksum doesn't match the calculated checksum. My guess is that the Planetweb Browser overwrites the resource name but doesn't update the checksum\n    expect(dreamcastSaveFile.description).to.equal('Planetweb Browser');\n    expect(dreamcastSaveFile.copyright).to.equal('Planetweb, Inc.');\n    expect(dreamcastSaveFile.version).to.equal(0);\n    expect(dreamcastSaveFile.fileNumber).to.equal(1);\n    expect(dreamcastSaveFile.resourceName).to.equal('v93102');\n    expect(dreamcastSaveFile.fileMode).to.equal(DreamcastVmiVmsSaveData.FILE_MODE_NONE);\n    expect(dreamcastSaveFile.fileSize).to.equal(1536);\n\n    expect(dreamcastSaveFile.filename).to.equal('GAUNTLET.001');\n    expect(dreamcastSaveFile.fileType).to.equal('Data');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveFile.fileCreationTime)).to.equal('1998-12-25 12:00:00');\n    expect(dreamcastSaveFile.copyProtected).to.equal(false);\n    expect(dreamcastSaveFile.fileSizeInBlocks).to.equal(3);\n    expect(dreamcastSaveFile.firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.storageComment).to.equal('Temple of Magi  ');\n    expect(dreamcastSaveFile.fileComment).to.equal('GAUNTLET LEGENDS                Gauntlet');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile.rawData, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write second a .VMI/.VMS pair of files', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_2_RECREATED_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_2_FILENAME);\n\n    const saveFile = {\n      // These parts are specific to .vmi/.vms files\n      description: 'Planetweb Browser',\n      copyright: 'Planetweb, Inc.',\n      resourceName: 'v93102',\n\n      // These parts are common to dreamcast save files\n      filename: 'GAUNTLET.001',\n      fileType: 'Data',\n      fileCreationTime: new Date('1998-12-25 12:00:00'),\n      copyProtected: false,\n      rawData: vmsArrayBuffer,\n    };\n\n    const createdFiles = DreamcastVmiVmsSaveData.convertSaveFileToVmiVms(saveFile);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmiArrayBuffer, vmiArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmsArrayBuffer, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a third .VMI/.VMS pair of files, this one containing icon data', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_3_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_3_FILENAME);\n\n    const dreamcastSaveFile = DreamcastVmiVmsSaveData.convertIndividualSaveToSaveFile(vmiArrayBuffer, vmsArrayBuffer);\n\n    expect(dreamcastSaveFile.checksum).to.equal(0x41444440); // This checksum doesn't match the calculated checksum. My guess is that the Planetweb Browser overwrites the resource name but doesn't update the checksum\n    expect(dreamcastSaveFile.description).to.equal('Planetweb Browser');\n    expect(dreamcastSaveFile.copyright).to.equal('Planetweb, Inc.');\n    expect(dreamcastSaveFile.version).to.equal(0);\n    expect(dreamcastSaveFile.fileNumber).to.equal(1);\n    expect(dreamcastSaveFile.resourceName).to.equal('v4596');\n    expect(dreamcastSaveFile.fileMode).to.equal(DreamcastVmiVmsSaveData.FILE_MODE_NONE);\n    expect(dreamcastSaveFile.fileSize).to.equal(1024);\n\n    expect(dreamcastSaveFile.filename).to.equal('ICONDATA_VMS');\n    expect(dreamcastSaveFile.fileType).to.equal('Data');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveFile.fileCreationTime)).to.equal('1998-12-25 12:00:00');\n    expect(dreamcastSaveFile.copyProtected).to.equal(false);\n    expect(dreamcastSaveFile.fileSizeInBlocks).to.equal(2);\n    expect(dreamcastSaveFile.firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.storageComment).to.equal('No Name         ');\n    expect(dreamcastSaveFile.fileComment).to.equal(' ');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile.rawData, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write third a .VMI/.VMS pair of files', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_3_RECREATED_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_3_FILENAME);\n\n    const saveFile = {\n      // These parts are specific to .vmi/.vms files\n      description: 'Planetweb Browser',\n      copyright: 'Planetweb, Inc.',\n      resourceName: 'v4596',\n\n      // These parts are common to dreamcast save files\n      filename: 'ICONDATA_VMS',\n      fileType: 'Data',\n      fileCreationTime: new Date('1998-12-25 12:00:00'),\n      copyProtected: false,\n      rawData: vmsArrayBuffer,\n    };\n\n    const createdFiles = DreamcastVmiVmsSaveData.convertSaveFileToVmiVms(saveFile);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmiArrayBuffer, vmiArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmsArrayBuffer, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a fourth .VMI/.VMS pair of files', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_4_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_4_FILENAME);\n\n    const dreamcastSaveFile = DreamcastVmiVmsSaveData.convertIndividualSaveToSaveFile(vmiArrayBuffer, vmsArrayBuffer);\n\n    expect(dreamcastSaveFile.checksum).to.equal(0x43414341); // This checksum matches the calculated checksum\n    expect(dreamcastSaveFile.description).to.equal('KISS PC - ALL STAGES            ');\n    expect(dreamcastSaveFile.copyright).to.equal('PAVLIK                          ');\n    expect(dreamcastSaveFile.version).to.equal(306);\n    expect(dreamcastSaveFile.fileNumber).to.equal(1);\n    expect(dreamcastSaveFile.resourceName).to.equal('KISSPC');\n    expect(dreamcastSaveFile.fileMode).to.equal(DreamcastVmiVmsSaveData.FILE_MODE_NONE);\n    expect(dreamcastSaveFile.fileSize).to.equal(1536);\n\n    expect(dreamcastSaveFile.filename).to.equal('TRMR_KPC.DAT');\n    expect(dreamcastSaveFile.fileType).to.equal('Data');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveFile.fileCreationTime)).to.equal('2004-09-16 08:55:18');\n    expect(dreamcastSaveFile.fileSizeInBlocks).to.equal(3);\n    expect(dreamcastSaveFile.firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.fileHeaderBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.copyProtected).to.equal(false);\n    expect(dreamcastSaveFile.storageComment).to.equal('KISSPSYCHOCIRCUS');\n    expect(dreamcastSaveFile.fileComment).to.equal('');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile.rawData, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write fourth a .VMI/.VMS pair of files', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_4_RECREATED_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_4_FILENAME);\n\n    const saveFile = {\n      // These parts are specific to .vmi/.vms files\n      description: 'KISS PC - ALL STAGES            ',\n      copyright: 'PAVLIK                          ',\n      resourceName: 'KISSPC',\n\n      // These parts are common to dreamcast save files\n      filename: 'TRMR_KPC.DAT',\n      fileType: 'Data',\n      fileCreationTime: new Date('2004-09-16 08:55:18'),\n      copyProtected: false,\n      rawData: vmsArrayBuffer,\n    };\n\n    const createdFiles = DreamcastVmiVmsSaveData.convertSaveFileToVmiVms(saveFile);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmiArrayBuffer, vmiArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmsArrayBuffer, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a .VMI/.VMS pair of files containing a game', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_GAME_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_GAME_FILENAME);\n\n    const dreamcastSaveFile = DreamcastVmiVmsSaveData.convertIndividualSaveToSaveFile(vmiArrayBuffer, vmsArrayBuffer);\n\n    expect(dreamcastSaveFile.checksum).to.equal(0x42444040); // This checksum matches the calculated checksum\n    expect(dreamcastSaveFile.description).to.equal('@guacasaurus_mex                ');\n    expect(dreamcastSaveFile.copyright).to.equal('Flappy Bird VMU v1.0b           ');\n    expect(dreamcastSaveFile.version).to.equal(0);\n    expect(dreamcastSaveFile.fileNumber).to.equal(1);\n    expect(dreamcastSaveFile.resourceName).to.equal('FLPPYBRD');\n    expect(dreamcastSaveFile.fileMode).to.equal(DreamcastVmiVmsSaveData.FILE_MODE_GAME);\n    expect(dreamcastSaveFile.fileSize).to.equal(18274);\n\n    expect(dreamcastSaveFile.filename).to.equal('FLAPPY.BIRD ');\n    expect(dreamcastSaveFile.fileType).to.equal('Game');\n    expect(DreamcastUtil.formatDateWithoutTimezone(dreamcastSaveFile.fileCreationTime)).to.equal('2016-03-28 15:56:26');\n    expect(dreamcastSaveFile.fileSizeInBlocks).to.equal(36);\n    expect(dreamcastSaveFile.firstBlockNumber).to.equal(0);\n    expect(dreamcastSaveFile.fileHeaderBlockNumber).to.equal(1);\n    expect(dreamcastSaveFile.copyProtected).to.equal(false);\n    expect(dreamcastSaveFile.storageComment).to.equal('@guacasaurus_mex');\n    expect(dreamcastSaveFile.fileComment).to.equal('Flappy Bird VMU v1.0b');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dreamcastSaveFile.rawData, vmsArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write a .VMI/.VMS pair of files containing a game', async () => {\n    const vmiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMI_GAME_FILENAME);\n    const vmsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(VMS_GAME_FILENAME);\n\n    const saveFile = {\n      // These parts are specific to .vmi/.vms files\n      description: '@guacasaurus_mex                ',\n      copyright: 'Flappy Bird VMU v1.0b           ',\n      resourceName: 'FLPPYBRD',\n\n      // These parts are common to dreamcast save files\n      filename: 'FLAPPY.BIRD ',\n      fileType: 'Game',\n      fileCreationTime: new Date('2016-03-28 15:56:26'),\n      copyProtected: false,\n      rawData: vmsArrayBuffer,\n    };\n\n    const createdFiles = DreamcastVmiVmsSaveData.convertSaveFileToVmiVms(saveFile);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmiArrayBuffer, vmiArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(createdFiles.vmsArrayBuffer, vmsArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/GB.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GbFlashCartSaveData from '@/save-formats/FlashCarts/GB';\n\nconst DIR = './tests/data/save-formats/flashcarts/gb';\n\nconst GB_FILENAME = `${DIR}/Final Fantasy Legend II.srm`;\n\ndescribe('Flash cart - GB/C', () => {\n  it('should convert a raw GB/C save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB_FILENAME);\n\n    const flashCartSaveData = GbFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a flash cart GB/C save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB_FILENAME);\n\n    const flashCartSaveData = GbFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/GBA/GBA.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GbaFlashCartSaveData from '@/save-formats/FlashCarts/GBA/GBA';\n\nconst DIR = './tests/data/save-formats/flashcarts/gba';\n\nconst GBA_FILENAME = `${DIR}/Metroid - Zero Mission (USA).sav`;\n\ndescribe('Flash cart - GBA', () => {\n  it('should convert a raw GBA save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GBA_FILENAME);\n\n    const flashCartSaveData = GbaFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a flash cart GBA save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GBA_FILENAME);\n\n    const flashCartSaveData = GbaFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/GBA/GoombaEmulator.spec.js",
    "content": "import { expect } from 'chai';\nimport GoombaEmulatorSaveData from '@/save-formats/FlashCarts/GBA/GoombaEmulator';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport Config from '#/config';\n\nconst config = Config.Create();\n\nconst TEST_RETAIL_ROMS = config.get().testFlashCartRetailGames; // We don't check retail ROMs into the repo\n\nconst DIR = './tests/data/save-formats/flashcarts/gba/goombaemulator';\n\nconst RAW_ZELDA_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-from-goomba.sav`;\nconst GOOMBA_ZELDA_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-from-goomba.esv`;\n\nconst RAW_CART_ZELDA_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-from-cart.sav`;\nconst GOOMBA_CART_ZELDA_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-from-cart.esv`;\n\nconst ZELDA_ROM_FILENAME = `${DIR}/retail/Legend of Zelda, The - Link's Awakening (USA, Europe).gb`;\nconst ZELDA_ROM_CHECKSUM = 0x377aa60f;\nconst ZELDA_INTERNAL_NAME = 'ZELDA';\n\nconst RAW_WARIO_FILENAME = `${DIR}/Wario Land 3.sav`;\nconst GOOMBA_WARIO_FILENAME = `${DIR}/Wario Land 3.srm`;\n\nconst WARIO_ROM_CHECKSUM = 0xb2380b51;\n\nconst GOOMBA_COMPRESSED_32KB_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe) (32k - compressed save data).srm`;\nconst RAW_COMPRESSED_32KB_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe) (32k - compressed save data).sav`;\nconst COMPRESSED_ROM_CHECKSUM = 0xFB11D9B8;\n\nconst GOOMBA_UNCOMPRESSED_32KB_FILENAME = `${DIR}/Legend of Zelda, The - Oracle of Seasons (USA, Australia) (32kB - uncompressed save data).srm`;\nconst RAW_UNCOMPRESSED_32KB_FILENAME = `${DIR}/Legend of Zelda, The - Oracle of Seasons (USA, Australia) (32kB - uncompressed save data).sav`;\nconst UNCOMPRESSED_ROM_CHECKSUM = 0x91AF9A29;\n\ndescribe('Flash cart - GBA - Goomba emulator save format', () => {\n  it('should convert a Goomba emulator save made with an EZ Flash ODE to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ZELDA_FILENAME);\n    const goombaArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GOOMBA_ZELDA_FILENAME);\n\n    const goombaEmulatorSaveData = GoombaEmulatorSaveData.createFromFlashCartData(goombaArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(goombaEmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(goombaEmulatorSaveData.getRomChecksum()).to.equal(ZELDA_ROM_CHECKSUM);\n    expect(goombaEmulatorSaveData.getFrameCount()).to.equal(0); // Number of ingame frames that has passed doesn't seem to be set in Goomba\n    expect(goombaEmulatorSaveData.getGameTitle()).to.equal(ZELDA_INTERNAL_NAME);\n    expect(goombaEmulatorSaveData.getCompressedSize()).to.equal(148);\n    expect(goombaEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  it('should convert a Goomba emulator save made with an Everdrive GBA to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_WARIO_FILENAME);\n    const goombaArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GOOMBA_WARIO_FILENAME);\n\n    const goombaEmulatorSaveData = GoombaEmulatorSaveData.createFromFlashCartData(goombaArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(goombaEmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(goombaEmulatorSaveData.getRomChecksum()).to.equal(WARIO_ROM_CHECKSUM);\n    expect(goombaEmulatorSaveData.getFrameCount()).to.equal(0); // Number of ingame frames that has passed doesn't seem to be set in Goomba\n    expect(goombaEmulatorSaveData.getGameTitle()).to.equal('WARIOLAND3');\n    expect(goombaEmulatorSaveData.getCompressedSize()).to.equal(5368);\n    expect(goombaEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  it('should convert a Goomba emulator save that\\'s 32kB containing compressed data to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_COMPRESSED_32KB_FILENAME);\n    const goombaArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GOOMBA_COMPRESSED_32KB_FILENAME);\n\n    const goombaEmulatorSaveData = GoombaEmulatorSaveData.createFromFlashCartData(goombaArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(goombaEmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(goombaEmulatorSaveData.getRomChecksum()).to.equal(COMPRESSED_ROM_CHECKSUM);\n    expect(goombaEmulatorSaveData.getFrameCount()).to.equal(0); // Number of ingame frames that has passed doesn't seem to be set in Goomba\n    expect(goombaEmulatorSaveData.getGameTitle()).to.equal(ZELDA_INTERNAL_NAME);\n    expect(goombaEmulatorSaveData.getCompressedSize()).to.equal(924);\n  });\n\n  it('should convert a Goomba emulator save that\\'s 32kB containing uncompressed data to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_UNCOMPRESSED_32KB_FILENAME);\n    const goombaArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GOOMBA_UNCOMPRESSED_32KB_FILENAME);\n\n    const goombaEmulatorSaveData = GoombaEmulatorSaveData.createFromFlashCartData(goombaArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(goombaEmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(goombaEmulatorSaveData.getRomChecksum()).to.equal(UNCOMPRESSED_ROM_CHECKSUM);\n    expect(goombaEmulatorSaveData.getFrameCount()).to.equal(0); // Number of ingame frames that has passed doesn't seem to be set in Goomba\n    expect(goombaEmulatorSaveData.getGameTitle()).to.equal('ZELDA DIN');\n    expect(goombaEmulatorSaveData.getCompressedSize()).to.equal(464);\n  });\n\n  it('should convert a save from a cartridge to the Goomba save format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_CART_ZELDA_FILENAME);\n    const goombaArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GOOMBA_CART_ZELDA_FILENAME);\n\n    const goombaEmulatorSaveData = GoombaEmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, ZELDA_INTERNAL_NAME, ZELDA_ROM_CHECKSUM); // Use the 'internal' function for tests so that we can run the test without the retail ROM\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(goombaEmulatorSaveData.getFlashCartArrayBuffer(), goombaArrayBuffer)).to.equal(true);\n    expect(goombaEmulatorSaveData.getRomChecksum()).to.equal(ZELDA_ROM_CHECKSUM);\n    expect(goombaEmulatorSaveData.getFrameCount()).to.equal(0); // Number of ingame frames that has passed doesn't seem to be set in Goomba\n    expect(goombaEmulatorSaveData.getGameTitle()).to.equal('ZELDA');\n    expect(goombaEmulatorSaveData.getCompressedSize()).to.equal(1185);\n    expect(goombaEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  TEST_RETAIL_ROMS && it('should calculate the checksum of a ROM', async () => { // eslint-disable-line no-unused-expressions\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ZELDA_ROM_FILENAME);\n\n    expect(GoombaEmulatorSaveData.calculateRomChecksum(romArrayBuffer)).to.equal(ZELDA_ROM_CHECKSUM);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/GBA/PocketNesEmulator.spec.js",
    "content": "import { expect } from 'chai';\nimport PocketNesEmulatorSaveData from '@/save-formats/FlashCarts/GBA/PocketNesEmulator';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport Config from '#/config';\n\nconst config = Config.Create();\n\nconst TEST_RETAIL_ROMS = config.get().testFlashCartRetailGames; // We don't check retail ROMs into the repo\n\nconst DIR = './tests/data/save-formats/flashcarts/gba/pocketnesemulator';\n\nconst RAW_POCKETNES_ZELDA_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-from-pocketnes.sav`;\nconst POCKETNES_ZELDA_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-from-pocketnes.esv`;\n\nconst RAW_CART_ZELDA_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-from-cart.sav`;\nconst POCKETNES_CART_ZELDA_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-from-cart.esv`;\n\nconst ZELDA_ROM_FILENAME = `${DIR}/retail/Zelda II - The Adventure of Link (USA).nes`;\nconst ZELDA_ROM_CHECKSUM = 0x4665B580;\n\ndescribe('Flash cart - GBA - PocketNES emulator save format', () => {\n  it('should convert a PocketNES emulator save made with an EZ Flash ODE to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_POCKETNES_ZELDA_FILENAME);\n    const pocketNesArrayBuffer = await ArrayBufferUtil.readArrayBuffer(POCKETNES_ZELDA_FILENAME);\n\n    const pocketNesEmulatorSaveData = PocketNesEmulatorSaveData.createFromFlashCartData(pocketNesArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(pocketNesEmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(pocketNesEmulatorSaveData.getRomChecksum()).to.equal(ZELDA_ROM_CHECKSUM);\n    expect(pocketNesEmulatorSaveData.getFrameCount()).to.equal(0); // Number of ingame frames that has passed doesn't seem to be set in PocketNES\n    expect(pocketNesEmulatorSaveData.getGameTitle()).to.equal(PocketNesEmulatorSaveData.GAME_TITLE);\n    expect(pocketNesEmulatorSaveData.getCompressedSize()).to.equal(3500);\n    expect(pocketNesEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  it('should convert a save from a cartridge to the PocketNES save format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_CART_ZELDA_FILENAME);\n    const pocketNesArrayBuffer = await ArrayBufferUtil.readArrayBuffer(POCKETNES_CART_ZELDA_FILENAME);\n\n    const pocketNesEmulatorSaveData = PocketNesEmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, ZELDA_ROM_CHECKSUM); // Use the 'internal' function for tests so that we can run the test without the retail ROM\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(pocketNesEmulatorSaveData.getFlashCartArrayBuffer(), pocketNesArrayBuffer)).to.equal(true);\n    expect(pocketNesEmulatorSaveData.getRomChecksum()).to.equal(ZELDA_ROM_CHECKSUM);\n    expect(pocketNesEmulatorSaveData.getFrameCount()).to.equal(0); // Number of ingame frames that has passed doesn't seem to be set in PocketNES\n    expect(pocketNesEmulatorSaveData.getGameTitle()).to.equal(PocketNesEmulatorSaveData.GAME_TITLE);\n    expect(pocketNesEmulatorSaveData.getCompressedSize()).to.equal(3960);\n    expect(pocketNesEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  TEST_RETAIL_ROMS && it('should calculate the checksum of a ROM', async () => { // eslint-disable-line no-unused-expressions\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ZELDA_ROM_FILENAME);\n    const calculatedChecksum = PocketNesEmulatorSaveData.calculateRomChecksum(romArrayBuffer);\n\n    expect(calculatedChecksum).to.equal(ZELDA_ROM_CHECKSUM);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/GBA/SmsAdvanceEmulator.spec.js",
    "content": "import { expect } from 'chai';\nimport SmsAdvanceEmulatorSaveData from '@/save-formats/FlashCarts/GBA/SmsAdvanceEmulator';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport Config from '#/config';\n\nconst config = Config.Create();\n\nconst TEST_RETAIL_ROMS = config.get().testFlashCartRetailGames; // We don't check retail ROMs into the repo\n\nconst DIR = './tests/data/save-formats/flashcarts/gba/smsadvanceemulator';\n\nconst RAW_PHANTASY_STAR_ON_GBA_FILENAME = `${DIR}/Phantasy Star (USA, Europe) (Rev 1)-from-coury-raw.srm`;\nconst SMS_ADVANCE_PHANTASY_STAR_ON_GBA_FILENAME = `${DIR}/Phantasy Star (USA, Europe) (Rev 1)-from-coury.srm`;\n\n// I don't own a GBA Everdrive to be able to test this personally, so let's use both saves we got from other people just to be safe\nconst RAW_PHANTASY_STAR_AGAIN_ON_GBA_FILENAME = `${DIR}/Phantasy Star (USA, Europe) (v1.3)-from-reddit-raw.srm`;\nconst SMS_ADVANCE_PHANTASY_STAR_AGAIN_ON_GBA_FILENAME = `${DIR}/Phantasy Star (USA, Europe) (v1.3)-from-reddit.srm`;\n\n// I have an EZ-Flash ODE, which (without custom firmware) can only run this emulator in bundled mode where you use a PC to\n// bundle the emulator with a fixed set of game ROMs. This save file is from that, so let's test it too. The main\n// difference seems to be that these files can contain saves from multiple games, and they have the confis data before the save data\nconst RAW_PHANTASY_STAR_BUNDLED_ON_GBA_FILENAME = `${DIR}/Phantasy Star-from-smsadvance-bundled-raw.sav`;\nconst SMS_ADVANCE_PHANTASY_STAR_BUNDLED_ON_GBA_FILENAME = `${DIR}/Phantasy Star-from-smsadvance-bundled.sav`;\n\nconst RAW_PHANTASY_STAR_FROM_EMULATOR_FILENAME = `${DIR}/Phantasy Star (USA, Europe) (Rev A)-from-emulator.sav`;\nconst SMS_ADVANCE_PHANTASY_STAR_FROM_EMULATOR_FILENAME = `${DIR}/Phantasy Star (USA, Europe) (Rev A)-from-emulator-to-smsadvance.sav`;\n\nconst PHANTASY_STAR_ROM_FILENAME = `${DIR}/retail/Phantasy Star (USA, Europe) (Rev A).sms`;\nconst PHANTASY_STAR_ROM_CHECKSUM = 0xE48D79F0;\n\ndescribe('Flash cart - GBA - SMSAdvance emulator save format', () => {\n  it('should convert an SMSAdvance emulator save made with the emulator running integrated into the GBA Everdrive OS', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PHANTASY_STAR_ON_GBA_FILENAME);\n    const smsAdvanceArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SMS_ADVANCE_PHANTASY_STAR_ON_GBA_FILENAME);\n\n    const smsAdvanceEmulatorSaveData = SmsAdvanceEmulatorSaveData.createFromFlashCartData(smsAdvanceArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(smsAdvanceEmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(smsAdvanceEmulatorSaveData.getRomChecksum()).to.equal(PHANTASY_STAR_ROM_CHECKSUM);\n    expect(smsAdvanceEmulatorSaveData.getFrameCount()).to.equal(2872);\n    expect(smsAdvanceEmulatorSaveData.getGameTitle()).to.equal('/3 Emulated Systems/3 Sega Mast');\n    expect(smsAdvanceEmulatorSaveData.getCompressedSize()).to.equal(340);\n    expect(smsAdvanceEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  it('should convert another SMSAdvance emulator save made with the emulator running integrated into the GBA Everdrive OS', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PHANTASY_STAR_AGAIN_ON_GBA_FILENAME);\n    const smsAdvanceArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SMS_ADVANCE_PHANTASY_STAR_AGAIN_ON_GBA_FILENAME);\n\n    const smsAdvanceEmulatorSaveData = SmsAdvanceEmulatorSaveData.createFromFlashCartData(smsAdvanceArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(smsAdvanceEmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(smsAdvanceEmulatorSaveData.getRomChecksum()).to.equal(PHANTASY_STAR_ROM_CHECKSUM);\n    expect(smsAdvanceEmulatorSaveData.getFrameCount()).to.equal(4464);\n    expect(smsAdvanceEmulatorSaveData.getGameTitle()).to.equal('/SMS/Phantasy Star (USA, Europe');\n    expect(smsAdvanceEmulatorSaveData.getCompressedSize()).to.equal(336);\n    expect(smsAdvanceEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  it('should convert an SMSAdvance emulator save made with the emulator running in bundled mode on an EZ Flash ODE', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PHANTASY_STAR_BUNDLED_ON_GBA_FILENAME);\n    const smsAdvanceArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SMS_ADVANCE_PHANTASY_STAR_BUNDLED_ON_GBA_FILENAME);\n\n    const smsAdvanceEmulatorSaveData = SmsAdvanceEmulatorSaveData.createFromFlashCartData(smsAdvanceArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(smsAdvanceEmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(smsAdvanceEmulatorSaveData.getRomChecksum()).to.equal(PHANTASY_STAR_ROM_CHECKSUM);\n    expect(smsAdvanceEmulatorSaveData.getFrameCount()).to.equal(4062);\n    expect(smsAdvanceEmulatorSaveData.getGameTitle()).to.equal('Phantasy Star');\n    expect(smsAdvanceEmulatorSaveData.getCompressedSize()).to.equal(340);\n    expect(smsAdvanceEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  it('should convert a raw save to the SMSAdvance save format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PHANTASY_STAR_FROM_EMULATOR_FILENAME);\n    const smsAdvanceArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SMS_ADVANCE_PHANTASY_STAR_FROM_EMULATOR_FILENAME);\n\n    const smsAdvanceEmulatorSaveData = SmsAdvanceEmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, PHANTASY_STAR_ROM_CHECKSUM); // Use the 'internal' function for tests so that we can run the test without the retail ROM\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(smsAdvanceEmulatorSaveData.getFlashCartArrayBuffer(), smsAdvanceArrayBuffer)).to.equal(true);\n    expect(smsAdvanceEmulatorSaveData.getRomChecksum()).to.equal(PHANTASY_STAR_ROM_CHECKSUM);\n    expect(smsAdvanceEmulatorSaveData.getFrameCount()).to.equal(0); // We don't have the means to set this correctly\n    expect(smsAdvanceEmulatorSaveData.getGameTitle()).to.equal(SmsAdvanceEmulatorSaveData.GAME_TITLE);\n    expect(smsAdvanceEmulatorSaveData.getCompressedSize()).to.equal(260);\n    expect(smsAdvanceEmulatorSaveData.getUncompressedSize()).to.equal(rawArrayBuffer.byteLength);\n  });\n\n  TEST_RETAIL_ROMS && it('should calculate the checksum of a ROM', async () => { // eslint-disable-line no-unused-expressions\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PHANTASY_STAR_ROM_FILENAME);\n    const calculatedChecksum = SmsAdvanceEmulatorSaveData.calculateRomChecksum(romArrayBuffer);\n\n    expect(calculatedChecksum).to.equal(PHANTASY_STAR_ROM_CHECKSUM);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/GameGear.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GameGearFlashCartSaveData from '@/save-formats/FlashCarts/GameGear';\n\nconst DIR = './tests/data/save-formats/flashcarts/gamegear';\n\nconst GG_FILENAME = `${DIR}/Crystalis.sav`;\n\ndescribe('Flash cart - Game Gear', () => {\n  it('should convert a raw Game Gear save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GG_FILENAME);\n\n    const flashCartSaveData = GameGearFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a flash cart Game Gear save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GG_FILENAME);\n\n    const flashCartSaveData = GameGearFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaEverdrivePro/32X.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GenesisMegaEverdrivePro32xFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaEverdrivePro/32X';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis/megaeverdrivepro';\n\nconst MEGA_EVERDRIVE_PRO_SRAM_FILENAME = `${DIR}/36 Great Holes Starring Fred Couples (Japan, USA).srm`;\nconst MEGA_EVERDRIVE_PRO_FRAM_FILENAME = `${DIR}/Knuckles' Chaotix (Japan, USA) (En).srm`;\n\n// FIXME: We need an example of an EEPROM game here to verify it works. For example, NBA Jam TE (vanilla ROM, without any SRAM hacks)\n// const MEGA_EVERDRIVE_PRO_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World (USA, Europe).srm`;\n\ndescribe('Flash cart - Genesis - Mega Everdrive Pro - 32X', () => {\n  it('should convert a raw SRAM save to Mega Everdrive Pro format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_SRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdrivePro32xFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro SRAM save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_SRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdrivePro32xFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a raw FRAM save to Mega Everdrive Pro format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdrivePro32xFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro FRAM save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdrivePro32xFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  /*\n  it('should convert a raw EEPROM save to fMega Everdrive Pro format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdrivePro32xFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro EEPROM save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdrivePro32xFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n  */\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaEverdrivePro/Genesis.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GenesisMegaEverdriveProGenesisFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaEverdrivePro/Genesis';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis/megaeverdrivepro';\n\nconst MEGA_EVERDRIVE_PRO_SRAM_FILENAME = `${DIR}/Phantasy Star II (USA, Europe) (Rev A).srm`;\nconst MEGA_EVERDRIVE_PRO_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World (USA, Europe).srm`;\nconst MEGA_EVERDRIVE_PRO_FRAM_FILENAME = `${DIR}/Sonic The Hedgehog 3 (USA).srm`;\n\nconst EMULATOR_FRAM_FILENAME = `${DIR}/emulator/Sonic The Hedgehog 3 (USA).sav`; // For some reason, the GenesisPlus emulator writes out a 64kB file here even though the Mega Everdrive Pro writes out 8kB of data\n\ndescribe('Flash cart - Genesis - Mega Everdrive Pro - Genesis', () => {\n  it('should convert a raw SRAM save to Mega Everdrive Pro format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_SRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProGenesisFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro SRAM save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_SRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a raw EEPROM save to fMega Everdrive Pro format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProGenesisFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro EEPROM save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a raw FRAM save to Mega Everdrive Pro format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProGenesisFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro FRAM save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert an emulator FRAM save to Mega Everdrive Pro format', async () => {\n    // When we load the Mega Everdrive Pro file on the GenesisPlus emulator, it writes out a 64kB file. So let's\n    // truncate that down to 8kB and verify that it's identical to the original Mega Everdrive Pro file.\n    //\n    // This verifies that the output of the emulator will work on the Mega Everdrive Pro if the user uses the dropdown to reduce the output file size\n\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_FRAM_FILENAME);\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProGenesisFlashCartSaveData.createFromRawData(emulatorArrayBuffer);\n    const smallerFlashCartSaveData = GenesisMegaEverdriveProGenesisFlashCartSaveData.createWithNewSize(flashCartSaveData, flashCartArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(smallerFlashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaEverdrivePro/NES.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GenesisMegaEverdriveProNesFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaEverdrivePro/NES';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis';\n\nconst MEGA_EVERDRIVE_PRO_NES_FILENAME = `${DIR}/megaeverdrivepro/Zelda II - The Adventure of Link (USA).srm`;\n\ndescribe('Flash cart - Genesis - Mega Everdrive Pro - NES', () => {\n  it('should convert a raw NES save to Mega Everdrive Pro format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_NES_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProNesFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro NES save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_NES_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProNesFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaEverdrivePro/SMS.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GenesisMegaEverdriveProSmsFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaEverdrivePro/SMS';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis';\n\nconst MEGA_EVERDRIVE_PRO_SMS_FILENAME = `${DIR}/megaeverdrivepro/Phantasy Star (USA, Europe) (Rev A).srm`;\n\nconst KNOCKOFF_EVERDRIVE_SMS_FILENAME = `${DIR}/megaeverdrivepro/Phantasy_Star_USA_Europe_Rev_A-byte-expanded.srm`;\nconst RAW_SMS_FILENAME = `${DIR}/megaeverdrivepro/Phantasy_Star_USA_Europe_Rev_A-byte-collapsed.srm`;\n\ndescribe('Flash cart - Genesis - Mega Everdrive Pro - SMS', () => {\n  it('should convert a raw SMS save to Mega Everdrive Pro format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_SMS_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSmsFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro SMS save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_SMS_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSmsFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a byte-expanded knockoff Everdrive SMS save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(KNOCKOFF_EVERDRIVE_SMS_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SMS_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSmsFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaEverdrivePro/SegaCd.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport SegaCdUtil from '@/util/SegaCd';\n\nimport GenesisMegaEverdriveProSegaCdFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaEverdrivePro/SegaCd';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis/megaeverdrivepro';\n\nconst MEGA_EVERDRIVE_PRO_RAM_CART_FILENAME = `${DIR}/Popful Mail (USA) (RE) cd-cart.srm`;\nconst CONVERTED_TO_RAW_RAM_CART_FILENAME = `${DIR}/Popful Mail (USA) (RE) cd-cart-raw.srm`;\n\nconst EMULATOR_RAM_CART_FILENAME = `${DIR}/Popful Mail (USA) (RE)-from-emulator cart.brm`;\nconst CONVERTED_TO_MEGA_EVERDRIVE_PRO_RAM_CART_FILENAME = `${DIR}/Popful Mail (USA) (RE)-from-emulator-to-med cd-cart.srm`;\n\nconst MEGA_EVERDRIVE_PRO_INTERNAL_MEMORY_FILENAME = `${DIR}/Dark Wizard (USA) cd-bram.brm`; // The internal memory data is identical for flash cart or emulator\n\nconst EMPTY_INTERNAL_MEMORY_SAVE = SegaCdUtil.makeEmptySave(SegaCdUtil.INTERNAL_SAVE_SIZE);\nconst EMPTY_FLASH_CART_RAM_CART_SAVE = SegaCdUtil.makeEmptySave(GenesisMegaEverdriveProSegaCdFlashCartSaveData.FLASH_CART_RAM_CART_SIZE);\nconst EMPTY_EMULATOR_RAM_CART_SAVE = SegaCdUtil.makeEmptySave(GenesisMegaEverdriveProSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE);\n\ndescribe('Flash cart - Genesis - Mega Everdrive Pro - Sega CD', () => {\n  it('should create all empty saves when not passed any data', async () => {\n    const createdFromFlashCartSaveData = GenesisMegaEverdriveProSegaCdFlashCartSaveData.createFromFlashCartData({ });\n    const createdFromRawSaveData = GenesisMegaEverdriveProSegaCdFlashCartSaveData.createFromRawData({ });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      createdFromFlashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      EMPTY_INTERNAL_MEMORY_SAVE,\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      createdFromFlashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      EMPTY_EMULATOR_RAM_CART_SAVE,\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      createdFromFlashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      EMPTY_INTERNAL_MEMORY_SAVE,\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      createdFromFlashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      EMPTY_FLASH_CART_RAM_CART_SAVE,\n    )).to.equal(true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      createdFromRawSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      EMPTY_INTERNAL_MEMORY_SAVE,\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      createdFromRawSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      EMPTY_EMULATOR_RAM_CART_SAVE,\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      createdFromRawSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      EMPTY_INTERNAL_MEMORY_SAVE,\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      createdFromRawSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      EMPTY_FLASH_CART_RAM_CART_SAVE,\n    )).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro RAM cart save to emulator format', async () => {\n    const flashCartRamCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_RAM_CART_FILENAME);\n    const rawRamCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CONVERTED_TO_RAW_RAM_CART_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSegaCdFlashCartSaveData.createFromFlashCartData({ flashCartRamCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      EMPTY_INTERNAL_MEMORY_SAVE,\n    )).to.equal(true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      rawRamCartArrayBuffer,\n    )).to.equal(true);\n  });\n\n  it('should convert an emulator RAM cart save to Mega Everdrive Pro format', async () => {\n    const flashCartRamCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CONVERTED_TO_MEGA_EVERDRIVE_PRO_RAM_CART_FILENAME);\n    const rawRamCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_RAM_CART_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSegaCdFlashCartSaveData.createFromRawData({ rawRamCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      EMPTY_INTERNAL_MEMORY_SAVE,\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      flashCartRamCartArrayBuffer,\n    )).to.equal(true);\n  });\n\n  it('should convert a Mega Everdrive Pro internal memory save to emulator format', async () => {\n    const flashCartInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_INTERNAL_MEMORY_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSegaCdFlashCartSaveData.createFromFlashCartData({ flashCartInternalSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      flashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      EMPTY_EMULATOR_RAM_CART_SAVE,\n    )).to.equal(true);\n  });\n\n  it('should convert an emulator internal memory save to Mega Everdrive Pro format', async () => {\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_INTERNAL_MEMORY_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSegaCdFlashCartSaveData.createFromRawData({ rawInternalSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      flashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      EMPTY_FLASH_CART_RAM_CART_SAVE,\n    )).to.equal(true);\n  });\n\n  it('should convert both Mega Everdrive Pro internal memory and RAM cart saves to emulator format', async () => {\n    const flashCartInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_INTERNAL_MEMORY_FILENAME);\n    const flashCartRamCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_RAM_CART_FILENAME);\n    const rawRamCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CONVERTED_TO_RAW_RAM_CART_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSegaCdFlashCartSaveData.createFromFlashCartData({ flashCartInternalSaveArrayBuffer, flashCartRamCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      flashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      rawRamCartArrayBuffer,\n    )).to.equal(true);\n  });\n\n  it('should convert both emulator internal memory and RAM cart saves to Mega Everdrive Pro format', async () => {\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_EVERDRIVE_PRO_INTERNAL_MEMORY_FILENAME);\n    const rawRamCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_RAM_CART_FILENAME);\n    const flashCartRamCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CONVERTED_TO_MEGA_EVERDRIVE_PRO_RAM_CART_FILENAME);\n\n    const flashCartSaveData = GenesisMegaEverdriveProSegaCdFlashCartSaveData.createFromRawData({ rawInternalSaveArrayBuffer, rawRamCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n      flashCartSaveData.getRawArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.INTERNAL_MEMORY),\n    )).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(\n      flashCartSaveData.getFlashCartArrayBuffer(GenesisMegaEverdriveProSegaCdFlashCartSaveData.RAM_CART),\n      flashCartRamCartArrayBuffer,\n    )).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaSD/32X.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GenesisMegaSd32xFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaSD/32X';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis/megasd';\n\nconst MEGA_SD_NEW_SRAM_FILENAME = `${DIR}/36 Great Holes Starring Fred Couples (Japan, USA).SRM`;\nconst MEGA_SD_RAW_NEW_SRAM_FILENAME = `${DIR}/36 Great Holes Starring Fred Couples (Japan, USA)-raw.sav`;\n\nconst MEGA_SD_NEW_FRAM_FILENAME = `${DIR}/Knuckles' Chaotix (Japan, USA) (En).SRM`;\nconst MEGA_SD_RAW_NEW_FRAM_FILENAME = `${DIR}/Knuckles' Chaotix (Japan, USA) (En)-raw.sav`;\n\n// FIXME: We need an example of an EEPROM game here to verify it works. For example, NBA Jam TE (vanilla ROM, without any SRAM hacks)\n/*\nconst MEGA_SD_NEW_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World (USA, Europe)-new-style.SRM`;\nconst MEGA_SD_RAW_NEW_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World (USA, Europe)-new-style-raw.sav`;\n*/\n\ndescribe('Flash cart - Genesis - Mega SD - 32X', () => {\n  it('should convert a Mega SD SRAM save in the new style to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_SRAM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_SRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSd32xFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw SRAM save back to the Mega SD new style', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_SRAM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_SRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSd32xFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Mega SD FRAM save in the new style to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_FRAM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSd32xFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw FRAM save back to the Mega SD new style', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_FRAM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSd32xFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  /*\n  it('should convert a Mega SD EEPROM save in the new style to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_EEPROM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSd32xFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw EEPROM save to the new style', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_EEPROM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSd32xFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n  */\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaSD/Genesis.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GenesisMegaSdGenesisFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaSD/Genesis';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis/megasd';\n\n// Not sure why, but most files in the list of sample SRAM saves I was given are padded out with 0x00 and one was padded out with 0xFF\nconst MEGA_SD_NEW_SRAM_PADDED_00_FILENAME = `${DIR}/Phantasy Star II (USA, Europe) (Rev A)-new-style.SRM`;\nconst MEGA_SD_RAW_NEW_SRAM_PADDED_00_FILENAME = `${DIR}/Phantasy Star II (USA, Europe) (Rev A)-new-style-raw.sav`;\n\nconst MEGA_SD_NEW_SRAM_PADDED_00_2_FILENAME = `${DIR}/Sword of Vermilion (USA, Europe)-new-style.SRM`;\nconst MEGA_SD_RAW_NEW_SRAM_PADDED_00_2_FILENAME = `${DIR}/Sword of Vermilion (USA, Europe)-new-style-raw.sav`;\n\nconst MEGA_SD_NEW_SRAM_PADDED_FF_3_FILENAME = `${DIR}/Phantasy Star IV (USA)-new-style.SRM`;\nconst MEGA_SD_RAW_NEW_SRAM_PADDED_FF_3_FILENAME = `${DIR}/Phantasy Star IV (USA)-new-style-raw.sav`;\nconst MEGA_SD_NEW_SRAM_PADDED_00_3_FILENAME = `${DIR}/Phantasy Star IV (USA)-new-style-converted-back.SRM`; // This is tested as working on a Mega SD. Not sure why it originally output a differently-padded file\n\nconst MEGA_SD_NEW_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World (USA, Europe)-new-style.SRM`;\nconst MEGA_SD_RAW_NEW_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World (USA, Europe)-new-style-raw.sav`;\n\nconst MEGA_SD_NEW_FRAM_FILENAME = `${DIR}/Sonic the Hedgehog 3 (USA)-new-style.SRM`;\nconst MEGA_SD_RAW_NEW_FRAM_FILENAME = `${DIR}/Sonic the Hedgehog 3 (USA)-new-style-raw.sav`;\n\nconst EMULATOR_FRAM_FILENAME = `${DIR}/emulator/Sonic The Hedgehog 3 (USA).sav`; // For some reason, the GenesisPlus emulator writes out a 64kB file\n\nconst MEGA_SD_OLD_SRAM_FILENAME = `${DIR}/Phantasy Star II (USA, Europe) (Rev A)-old-style.srm`;\nconst MEGA_SD_RAW_OLD_SRAM_FILENAME = `${DIR}/Phantasy Star II (USA, Europe) (Rev A)-old-style-raw.sav`;\n\nconst MEGA_SD_OLD_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World (USA, Europe)-old-style.srm`;\n\ndescribe('Flash cart - Genesis - Mega SD - Genesis', () => {\n  it('should convert a Mega SD SRAM save in the new style padded with 0x00 to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_SRAM_PADDED_00_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_SRAM_PADDED_00_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw SRAM save back to the Mega SD new style', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_SRAM_PADDED_00_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_SRAM_PADDED_00_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a second Mega SD SRAM save in the new style but padded with 0x00 to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_SRAM_PADDED_00_2_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_SRAM_PADDED_00_2_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a second raw SRAM save back to the Mega SD new style', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_SRAM_PADDED_00_2_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_SRAM_PADDED_00_2_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a third Mega SD SRAM save in the new style but padded with 0xFF to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_SRAM_PADDED_FF_3_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_SRAM_PADDED_FF_3_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a third raw SRAM save back to the Mega SD new style but now padded with 0x00', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_SRAM_PADDED_00_3_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_SRAM_PADDED_FF_3_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Mega SD EEPROM save in the new style to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_EEPROM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw EEPROM save to the new style', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_EEPROM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Mega SD FRAM save in the new style to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_FRAM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw FRAM save to the new style', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_FRAM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_NEW_FRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator FRAM save to Mega SD format', async () => {\n    // When we load the (converted) Mega SD file on the GenesisPlus emulator, it writes out a 64kB file. So let's\n    // truncate that down to 32kB and verify that it's identical to the original Mega SD file.\n    //\n    // This verifies that the output of the emulator will work on the Mega SD if the user uses the dropdown to reduce the output file size\n\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_NEW_FRAM_FILENAME);\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FRAM_FILENAME);\n\n    const flashCartArrayBufferLength = flashCartArrayBuffer.byteLength - GenesisMegaSdGenesisFlashCartSaveData.NEW_STYLE_MAGIC.length;\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromRawData(emulatorArrayBuffer);\n    const smallerFlashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createWithNewSize(flashCartSaveData, flashCartArrayBufferLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(smallerFlashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Mega SD SRAM save in the old style to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_OLD_SRAM_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_RAW_OLD_SRAM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Mega SD EEPROM save in the old style to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_OLD_EEPROM_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdGenesisFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaSD/SMS.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GenesisMegaaSdSmsFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaSD/SMS';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis';\n\nconst MEGA_SD_FILENAME = `${DIR}/megasd/Phantasy Star (USA, Europe) (Rev 1).SRM`;\nconst RAW_FILENAME = `${DIR}/megasd/Phantasy Star (USA, Europe) (Rev 1)-raw.sav`;\n\ndescribe('Flash cart - Genesis - Mega SD - SMS', () => {\n  it('should convert a raw SMS save to Mega SD format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const flashCartSaveData = GenesisMegaaSdSmsFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a new style Mega SD SMS save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const flashCartSaveData = GenesisMegaaSdSmsFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an old style Mega SD SMS save to raw format', async () => {\n    const oldStyleFlashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME); // Repurpose our raw save as an \"old style\" save\n    const newStyleFlashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_FILENAME);\n\n    const rawArrayBuffer = oldStyleFlashCartArrayBuffer;\n\n    const flashCartSaveData = GenesisMegaaSdSmsFlashCartSaveData.createFromFlashCartData(oldStyleFlashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), newStyleFlashCartArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/Genesis/MegaSD/SegaCd.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport SegaCdUtil from '@/util/SegaCd';\n\nimport GenesisMegaSdSegaCdFlashCartSaveData from '@/save-formats/FlashCarts/Genesis/MegaSD/SegaCd';\n\nconst DIR = './tests/data/save-formats/flashcarts/genesis';\n\nconst MEGA_SD_FILENAME = `${DIR}/megasd/Popful Mail (U).SRM`;\nconst RAW_INTERNAL_MEMORY_FILENAME = `${DIR}/megasd/Popful Mail (U)-internal-memory.brm`;\nconst RAW_RAM_CART_FILENAME = `${DIR}/megasd/Popful Mail (U)-ram-cart.brm`;\n\nconst MEGA_SD_INTERNAL_MEMORY_ONLY_FILENAME = `${DIR}/megasd/Popful Mail (U)-internal-memory-only.SRM`;\n\nconst MEGA_SD_CONVERTED_BACK_INTERNAL_MEMORY_FILENAME = `${DIR}/megasd/Popful Mail (U)-converted-back-internal-memory.SRM`;\nconst MEGA_SD_CONVERTED_BACK_RAM_CART_FILENAME = `${DIR}/megasd/Popful Mail (U)-converted-back-ram-cart.SRM`;\n\nconst MEGA_SD_INTERNAL_MEMORY_PLUS_BLANK_RAM_CART_FILENAME = `${DIR}/megasd/Lunar_The_Silver_Star.SRM`;\nconst RAW_INTERNAL_MEMORY_PLUS_BLANK_RAM_CART_INTERNAL_MEMORY_FILENAME = `${DIR}/megasd/Lunar_The_Silver_Star-internal-memory.brm`;\nconst RAW_INTERNAL_MEMORY_PLUS_BLANK_RAM_CART_RAM_CART_FILENAME = `${DIR}/megasd/Lunar_The_Silver_Star-ram-cart.brm`;\n\ndescribe('Flash cart - Genesis - Mega SD - Sega CD', () => {\n  it('should convert a Mega SD Sega CD save to emulator format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_FILENAME);\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_MEMORY_FILENAME);\n    const rawRamCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_RAM_CART_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdSegaCdFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(GenesisMegaSdSegaCdFlashCartSaveData.INTERNAL_MEMORY), rawInternalSaveArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(GenesisMegaSdSegaCdFlashCartSaveData.RAM_CART), rawRamCartSaveArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Mega SD Sega CD save containing only internal memory to emulator format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_INTERNAL_MEMORY_ONLY_FILENAME);\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_MEMORY_FILENAME);\n    const rawRamCartSaveArrayBuffer = SegaCdUtil.makeEmptySave(GenesisMegaSdSegaCdFlashCartSaveData.EMULATOR_RAM_CART_SIZE);\n\n    const flashCartSaveData = GenesisMegaSdSegaCdFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(GenesisMegaSdSegaCdFlashCartSaveData.INTERNAL_MEMORY), rawInternalSaveArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(GenesisMegaSdSegaCdFlashCartSaveData.RAM_CART), rawRamCartSaveArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator internal memory Sega CD file to Mega SD format', async () => {\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_MEMORY_FILENAME);\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_CONVERTED_BACK_INTERNAL_MEMORY_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdSegaCdFlashCartSaveData.createFromRawData({ rawInternalSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator RAM cart Sega CD file to Mega SD format', async () => {\n    const rawRamCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_RAM_CART_FILENAME);\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_CONVERTED_BACK_RAM_CART_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdSegaCdFlashCartSaveData.createFromRawData({ rawRamCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert emulator internal memory + RAM cart Sega CD files to Mega SD format', async () => {\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_MEMORY_FILENAME);\n    const rawRamCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_RAM_CART_FILENAME);\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdSegaCdFlashCartSaveData.createFromRawData({ rawInternalSaveArrayBuffer, rawRamCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Mega SD file containing internal memory plus a blank RAM cart to emulator format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_SD_INTERNAL_MEMORY_PLUS_BLANK_RAM_CART_FILENAME);\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_MEMORY_PLUS_BLANK_RAM_CART_INTERNAL_MEMORY_FILENAME);\n    const rawRamCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_MEMORY_PLUS_BLANK_RAM_CART_RAM_CART_FILENAME);\n\n    const flashCartSaveData = GenesisMegaSdSegaCdFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(GenesisMegaSdSegaCdFlashCartSaveData.INTERNAL_MEMORY), rawInternalSaveArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getRawArrayBuffer(GenesisMegaSdSegaCdFlashCartSaveData.RAM_CART), rawRamCartSaveArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/N64/GB64.spec.js",
    "content": "import { expect } from 'chai';\nimport Gb64EmulatorSaveData from '@/save-formats/FlashCarts/N64/GB64Emulator';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/flashcarts/n64/gb64emulator';\n\nconst GB64_GB_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-everdrive.fla`;\nconst GB64_TO_RAW_GB_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-everdrive-to-raw.sav`;\nconst GB64_GB_UNCOMPRESSED_DATA_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-everdrive-uncompressed-data.sav`;\n\nconst RAW_GB_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-emulator.sav`;\nconst RAW_GB_TO_GB64_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe)-emulator-to-everdrive.fla`;\n\nconst GB_ZELDA_SRAM_SIZE = 8192;\nconst GBC_ZELDA_SRAM_SIZE = 8192;\nconst GBC_WARIO_SRAM_SIZE = 32768;\n\nconst GB64_GBC_FILENAME = `${DIR}/Legend of Zelda, The - Oracle of Seasons (USA, Australia)-everdrive.fla`;\nconst GB64_GBC_TO_RAW_FILENAME = `${DIR}/Legend of Zelda, The - Oracle of Seasons (USA, Australia)-everdrive-to-raw.sav`;\nconst GB64_GBC_UNCOMPRESSED_DATA_FILENAME = `${DIR}/Legend of Zelda, The - Oracle of Seasons (USA, Australia)-everdrive-uncompressed-data.sav`;\n\nconst RAW_GBC_FILENAME = `${DIR}/Legend of Zelda, The - Oracle of Seasons (USA, Australia)-emulator.sav`;\nconst RAW_GBC_TO_GB64_FILENAME = `${DIR}/Legend of Zelda, The - Oracle of Seasons (USA, Australia)-emulator-to-everdrive.fla`;\n\nconst GB64_GBC_LARGER_SAVE_FILENAME = `${DIR}/Wario Land 3 (World) (En,Ja)-everdrive.fla`;\nconst GB64_GBC_LARGER_SAVE_TO_RAW_FILENAME = `${DIR}/Wario Land 3 (World) (En,Ja)-everdrive-to-raw.sav`;\nconst GB64_GBC_LARGER_SAVE_UNCOMPRESSED_DATA_FILENAME = `${DIR}/Wario Land 3 (World) (En,Ja)-everdrive-uncompressed-data.sav`;\n\nconst RAW_GBC_LARGER_SAVE_FILENAME = `${DIR}/Wario Land 3 (World) (En,Ja)-emulator.sav`;\nconst RAW_GBC_LARGER_SAVE_TO_GB64_FILENAME = `${DIR}/Wario Land 3 (World) (En,Ja)-emulator-to-everdrive.fla`;\n\ndescribe('Flash cart - N64 - GB64 emulator save format', () => {\n  it('should convert a GB64 emulator GB save made with an Everdrive 64 to raw format', async () => {\n    const gb64ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB64_GB_FILENAME);\n    const uncompressedData = await ArrayBufferUtil.readArrayBuffer(GB64_GB_UNCOMPRESSED_DATA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB64_TO_RAW_GB_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromFlashCartDataInternal(gb64ArrayBuffer, GB_ZELDA_SRAM_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getGameboyStateDataArrayBuffer(), uncompressedData)).to.equal(true);\n  });\n\n  it('should convert a GB raw save to the GB64 save format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_FILENAME);\n    const gb64ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_TO_GB64_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, GB_ZELDA_SRAM_SIZE, false);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getFlashCartArrayBuffer(), gb64ArrayBuffer)).to.equal(true);\n  });\n\n  it('should be able to parse a GB file that it created', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, GB_ZELDA_SRAM_SIZE, false);\n    const gb64EmulatorSaveDataParsed = Gb64EmulatorSaveData.createFromFlashCartDataInternal(gb64EmulatorSaveData.getFlashCartArrayBuffer(), GB_ZELDA_SRAM_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveDataParsed.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a GB64 emulator GBC save made with an Everdrive 64 to raw format', async () => {\n    const gb64ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB64_GBC_FILENAME);\n    const uncompressedData = await ArrayBufferUtil.readArrayBuffer(GB64_GBC_UNCOMPRESSED_DATA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB64_GBC_TO_RAW_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromFlashCartDataInternal(gb64ArrayBuffer, GBC_ZELDA_SRAM_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getGameboyStateDataArrayBuffer(), uncompressedData)).to.equal(true);\n  });\n\n  it('should convert a GBC raw save to the GB64 save format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_FILENAME);\n    const gb64ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_TO_GB64_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, GBC_ZELDA_SRAM_SIZE, true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getFlashCartArrayBuffer(), gb64ArrayBuffer)).to.equal(true);\n  });\n\n  it('should be able to parse a GBC file that it created', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, GBC_ZELDA_SRAM_SIZE, true);\n    const gb64EmulatorSaveDataParsed = Gb64EmulatorSaveData.createFromFlashCartDataInternal(gb64EmulatorSaveData.getFlashCartArrayBuffer(), GBC_ZELDA_SRAM_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveDataParsed.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a GB64 emulator GBC larger save made with an Everdrive 64 to raw format', async () => {\n    const gb64ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB64_GBC_LARGER_SAVE_FILENAME);\n    const uncompressedData = await ArrayBufferUtil.readArrayBuffer(GB64_GBC_LARGER_SAVE_UNCOMPRESSED_DATA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB64_GBC_LARGER_SAVE_TO_RAW_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromFlashCartDataInternal(gb64ArrayBuffer, GBC_WARIO_SRAM_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getGameboyStateDataArrayBuffer(), uncompressedData)).to.equal(true);\n  });\n\n  it('should convert a GBC larger raw save to the GB64 save format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_LARGER_SAVE_FILENAME);\n    const gb64ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_LARGER_SAVE_TO_GB64_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, GBC_WARIO_SRAM_SIZE, true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveData.getFlashCartArrayBuffer(), gb64ArrayBuffer)).to.equal(true);\n  });\n\n  it('should be able to parse a GBC larger file that it created', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_LARGER_SAVE_FILENAME);\n\n    const gb64EmulatorSaveData = Gb64EmulatorSaveData.createFromRawDataInternal(rawArrayBuffer, GBC_WARIO_SRAM_SIZE, true);\n    const gb64EmulatorSaveDataParsed = Gb64EmulatorSaveData.createFromFlashCartDataInternal(gb64EmulatorSaveData.getFlashCartArrayBuffer(), GBC_WARIO_SRAM_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gb64EmulatorSaveDataParsed.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/N64/N64.spec.js",
    "content": "import { expect } from 'chai';\nimport N64FlashCartSaveData from '@/save-formats/FlashCarts/N64/N64';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/flashcarts/n64';\n\nconst RAW_2_KILOBIT_EEPROM_FILENAME = `${DIR}/Star Fox 64.eep`;\nconst RAW_16_KILOBIT_EEPROM_FILENAME = `${DIR}/yoshis-story.17238.eep`;\n\nconst RAW_SRAM_FILENAME = `${DIR}/f-zero-x.15165.sra`;\nconst FLASHCART_SRAM_FILENAME = `${DIR}/f-zero-x.15165-flashcart.sra`;\n\nconst RAW_FLASHRAM_FILENAME = `${DIR}/Pokemon Snap.fla`;\nconst FLASHCART_FLASHRAM_FILENAME = `${DIR}/Pokemon Snap-flashcart.fla`;\n\ndescribe('Flash cart - N64', () => {\n  it('should convert a raw 2kb EEPROM N64 save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_2_KILOBIT_EEPROM_FILENAME);\n\n    const n64FlashCartSaveData = N64FlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(n64FlashCartSaveData.getFlashCartArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a flash cart 2kb EEPROM N64 save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_2_KILOBIT_EEPROM_FILENAME);\n\n    const n64FlashCartSaveData = N64FlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(n64FlashCartSaveData.getRawArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw 16kb EEPROM N64 save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_16_KILOBIT_EEPROM_FILENAME);\n\n    const n64FlashCartSaveData = N64FlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(n64FlashCartSaveData.getFlashCartArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a flash cart 16kb EEPROM N64 save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_16_KILOBIT_EEPROM_FILENAME);\n\n    const n64FlashCartSaveData = N64FlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(n64FlashCartSaveData.getRawArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw SRAM N64 save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_FILENAME);\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FLASHCART_SRAM_FILENAME);\n\n    const n64FlashCartSaveData = N64FlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(n64FlashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a flash cart SRAM N64 save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_FILENAME);\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FLASHCART_SRAM_FILENAME);\n\n    const n64FlashCartSaveData = N64FlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(n64FlashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw FlashRAM N64 save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASHRAM_FILENAME);\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FLASHCART_FLASHRAM_FILENAME);\n\n    const n64FlashCartSaveData = N64FlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(n64FlashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a flash cart FlashRAM N64 save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASHRAM_FILENAME);\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FLASHCART_FLASHRAM_FILENAME);\n\n    const n64FlashCartSaveData = N64FlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(n64FlashCartSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/N64/NES.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport N64NesFlashCartSaveData from '@/save-formats/FlashCarts/N64/NES';\n\nconst DIR = './tests/data/save-formats/flashcarts/n64/nes';\n\nconst N64_EVERDRIVE_NES_CORE_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-from-everdrive.srm`;\n\nconst CART_NES_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-from-cart.sav`;\nconst CART_TO_EVERDRIVE_NES_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-from-cart-to-everdrive.sav`;\n\ndescribe('Flash cart - N64 - NES', () => {\n  it('should convert a raw NES save to Everdrive 64 X7 format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CART_NES_FILENAME);\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CART_TO_EVERDRIVE_NES_FILENAME);\n\n    const flashCartSaveData = N64NesFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Everdrive 64 X7 NES save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(N64_EVERDRIVE_NES_CORE_FILENAME);\n\n    const flashCartSaveData = N64NesFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/N64/Neon64Emulator.spec.js",
    "content": "import { expect } from 'chai';\nimport Neon64EmulatorSaveData from '@/save-formats/FlashCarts/N64/Neon64Emulator';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/flashcarts/n64/neon64emulator';\n\nconst RAW_ZELDA_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-to-raw.sav`;\nconst NEON64_ZELDA_FILENAME = `${DIR}/Zelda II - The Adventure of Link (USA)-neon.srm`;\n\nconst RAW_CART_ZELDA_FILENAME = `${DIR}/Zelda II - The Adventure of Link-cart.sav`;\nconst NEON64_CART_ZELDA_FILENAME = `${DIR}/Zelda II - The Adventure of Link-cart-to-neon.srm`;\n\ndescribe('Flash cart - N64 - Neon64 emulator save format', () => {\n  it('should convert a Neon64 emulator save made with an Everdrive 64 to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ZELDA_FILENAME);\n    const neon64ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEON64_ZELDA_FILENAME);\n\n    const neon64EmulatorSaveData = Neon64EmulatorSaveData.createFromFlashCartData(neon64ArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(neon64EmulatorSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a save from a cartridge to the Neon64 save format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_CART_ZELDA_FILENAME);\n    const neon64ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEON64_CART_ZELDA_FILENAME);\n\n    const neon64EmulatorSaveData = Neon64EmulatorSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(neon64EmulatorSaveData.getFlashCartArrayBuffer(), neon64ArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/NES.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport NesFlashCartSaveData from '@/save-formats/FlashCarts/NES';\n\nconst DIR = './tests/data/save-formats/flashcarts/nes';\n\nconst NES_FILENAME = `${DIR}/Crystalis.sav`;\n\ndescribe('Flash cart - NES', () => {\n  it('should convert a raw NES save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NES_FILENAME);\n\n    const flashCartSaveData = NesFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a flash cart NES save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NES_FILENAME);\n\n    const flashCartSaveData = NesFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/PcEngine.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport PcEngineFlashCartSaveData from '@/save-formats/FlashCarts/PcEngine';\n\nconst DIR = './tests/data/save-formats/flashcarts/pcengine';\n\nconst PCENGINE_FILENAME = `${DIR}/Castlevania - Rondo of Blood (my save) - raw.sav`;\n\ndescribe('Flash cart - PC Engine', () => {\n  it('should convert a raw PC Engine save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PCENGINE_FILENAME);\n\n    const flashCartSaveData = PcEngineFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a flash cart PC Engine save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PCENGINE_FILENAME);\n\n    const flashCartSaveData = PcEngineFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/SMS.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport SmsFlashCartSaveData from '@/save-formats/FlashCarts/SMS';\n\nconst DIR = './tests/data/save-formats/flashcarts/sms';\n\nconst SMS_FILENAME = `${DIR}/Phantasy Star (USA, Europe) (Rev A).srm`;\n\ndescribe('Flash cart - SMS', () => {\n  it('should convert a raw SMS save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SMS_FILENAME);\n\n    const flashCartSaveData = SmsFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a flash cart SMS save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SMS_FILENAME);\n\n    const flashCartSaveData = SmsFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/SNES/GB.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport SuperGameboyFlashCartSaveData from '@/save-formats/FlashCarts/SNES/GB';\n\nconst DIR = './tests/data/save-formats/flashcarts/snes';\n\nconst GB_FILENAME = `${DIR}/Legend of Zelda, The - Link's Awakening (USA, Europe).srm`;\n\ndescribe('Flash cart - SNES - GB', () => {\n  it('should convert a raw GB save to SNES flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB_FILENAME);\n\n    const flashCartSaveData = SuperGameboyFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a SNES flash cart GB save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GB_FILENAME);\n\n    const flashCartSaveData = SuperGameboyFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/FlashCarts/SNES/SNES.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport SnesFlashCartSaveData from '@/save-formats/FlashCarts/SNES/SNES';\n\nconst DIR = './tests/data/save-formats/flashcarts/snes';\n\nconst SNES_FILENAME = `${DIR}/Donkey Kong Country 2 - Diddy's Kong Quest.srm`;\n\ndescribe('Flash cart - SNES - SNES', () => {\n  it('should convert a raw SNES save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SNES_FILENAME);\n\n    const flashCartSaveData = SnesFlashCartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a flash cart SNES save to raw format', async () => {\n    const flashCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SNES_FILENAME);\n\n    const flashCartSaveData = SnesFlashCartSaveData.createFromFlashCartData(flashCartArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(flashCartSaveData.getFlashCartArrayBuffer(), flashCartSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GBA/ActionReplay.spec.js",
    "content": "import { expect } from 'chai';\nimport ActionReplaySaveData from '@/save-formats/GBA/ActionReplay';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/gba/action-replay';\n\nconst ACTIONREPLAY_FILENAME = `${DIR}/the-legend-of-zelda-the-minish-cap.11439.xps`;\nconst RAW_FILENAME = `${DIR}/the-legend-of-zelda-the-minish-cap.11439.srm`;\n\ndescribe('Action Replay save format', () => {\n  it('should convert an Action Replay file to a raw file', async () => {\n    const actionReplayArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ACTIONREPLAY_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const actionReplaySaveData = ActionReplaySaveData.createFromActionReplayData(actionReplayArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(actionReplaySaveData.getRawSaveData(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw file to an Action Replay file', async () => {\n    const actionReplayArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ACTIONREPLAY_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const actionReplaySaveData = ActionReplaySaveData.createFromEmulatorData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(actionReplaySaveData.getArrayBuffer(), actionReplayArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GBA/GameShark.spec.js",
    "content": "import { expect } from 'chai';\nimport GameSharkSaveData from '@/save-formats/GBA/GameShark';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/gba/gameshark';\nconst ROM_DIR = './tests/data/rom-formats/gba';\n\nconst GAMESHARK_FILENAME = `${DIR}/the-legend-of-zelda-the-minish-cap.6650.sps`;\nconst SAVE_TITLE = 'GBAZELDA MC';\nconst SAVE_TIME = '07/03/05 01:32:40 a.m.';\nconst SAVE_NOTES = '';\n\nconst RAW_FILENAME = `${DIR}/the-legend-of-zelda-the-minish-cap.6650.srm`;\nconst ROM_FILENAME = `${ROM_DIR}/Zelda - Minish Cap header.gba`; // Not a real ROM file (!), just the parts in the header that we read\n\nconst GAMESHARK_SIZE = 65536; // Bytes\nconst RAW_SIZE = 8192; // Bytes\n\nconst IGNORE_CHECKSUM_SIZE = 4; // Bytes - size of the checksum at the end of the GameShark file. Various sources of these files use various algorithms for this checksum, and it's not checked by various emulators. So ours won't match (it was copied from a particular emulator) and we can safely ignore it\n\nconst CORRUPTED_GAMESHARK_FILENAME = `${DIR}/mario-and-luigi-superstar-saga.25949.sps`;\n\ndescribe('GameShark save format', () => {\n  it('should convert a GameShark file to a raw file', async () => {\n    const gameSharkArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GAMESHARK_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const gameSharkSaveData = GameSharkSaveData.createFromGameSharkData(gameSharkArrayBuffer);\n\n    const resizedGameSharkSaveData = GameSharkSaveData.createWithNewSize(gameSharkSaveData, RAW_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedGameSharkSaveData.getRawSaveData(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw file to a GameShark file', async () => {\n    const gameSharkArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GAMESHARK_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n    const romArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ROM_FILENAME);\n\n    const gameSharkSaveData = GameSharkSaveData.createFromEmulatorData(rawArrayBuffer, SAVE_TITLE, SAVE_TIME, SAVE_NOTES, romArrayBuffer);\n\n    const resizedGameSharkSaveData = GameSharkSaveData.createWithNewSize(gameSharkSaveData, GAMESHARK_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedGameSharkSaveData.getArrayBuffer(), gameSharkArrayBuffer, IGNORE_CHECKSUM_SIZE)).to.equal(true);\n  });\n\n  it('should recognize a corrupted save file', async () => {\n    const gameSharkArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CORRUPTED_GAMESHARK_FILENAME);\n\n    expect(() => GameSharkSaveData.createFromGameSharkData(gameSharkArrayBuffer)).to.throw(\n      // Passing in a specific instance of an Error triggers a comparison of the references: https://github.com/chaijs/chai/issues/430\n      Error,\n      'This file appears to be corrupted',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GBA/GameSharkSP.spec.js",
    "content": "import { expect } from 'chai';\nimport GameSharkSpSaveData from '@/save-formats/GBA/GameSharkSP';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/gba/gameshark-sp';\n\nconst GAMESHARKSP_FILENAME = `${DIR}/final-fantasy-tactics-advance.22864.gsv`;\nconst RAW_FILENAME = `${DIR}/final-fantasy-tactics-advance.22864.srm`;\n\ndescribe('GameShark SP save format', () => {\n  it('should convert a GameShark SP file to a raw file', async () => {\n    const gameSharkSpArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GAMESHARKSP_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const gameSharkSpSaveData = GameSharkSpSaveData.createFromGameSharkSpData(gameSharkSpArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameSharkSpSaveData.getRawSaveData(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GameCube/GameCube.spec.js",
    "content": "/* eslint-disable no-bitwise */\n\nimport { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport ArrayUtil from '@/util/Array';\n\nimport GameCubeSaveData from '@/save-formats/GameCube/GameCube';\nimport GameCubeUtil from '@/save-formats/GameCube/Util';\nimport GameCubeHeader from '@/save-formats/GameCube/Components/Header';\nimport GameCubeDirectoryEntry from '@/save-formats/GameCube/Components/DirectoryEntry';\n\nconst DIR = './tests/data/save-formats/gamecube';\n\nconst EMPTY_ASCII_FILENAME = `${DIR}/usa-empty-0251b-16mb.raw`;\nconst EMPTY_SHIFT_JIS_FILENAME = `${DIR}/jpn-empty-0251b-16mb.raw`;\nconst EMPTY_CARDS_FLASH_ID = Buffer.from('000000000000000000000000', 'hex');\n\nconst MEMCARD_FLASH_ID = Buffer.from('ddc9f91faad6bb8dfe35f8c5', 'hex');\nconst MEMCARD_IMAGE_FILENAME = `${DIR}/memcard-image.raw`;\nconst MEMCARD_IMAGE_RECREATED_FILENAME = `${DIR}/memcard-image-recreated.raw`;\nconst MEMCARD_IMAGE_RECREATED_RESIZED_FILENAME = `${DIR}/memcard-image-recreated-resized.raw`;\nconst MEMCARD_IMAGE_RECREATED_FZERO_FILENAME = `${DIR}/memcard-image-recreated-fzero.raw`;\nconst MEMCARD_IMAGE_RECREATED_FZERO_NO_SERIAL_FILENAME = `${DIR}/memcard-image-recreated-fzero-no-serial.raw`;\nconst NEW_MEMCARD_IMAGE_NO_SERIAL_FILENAME = `${DIR}/memcard-image-empty-no-serial.raw`;\nconst MEMCARD_SAVE_FILENAME = [\n  `${DIR}/memcard-image-0.bin`,\n  `${DIR}/memcard-image-1.bin`,\n  `${DIR}/memcard-image-2.bin`,\n  `${DIR}/memcard-image-3.bin`,\n  `${DIR}/memcard-image-4.bin`,\n  `${DIR}/memcard-image-5.bin`,\n  `${DIR}/memcard-image-6.bin`,\n  `${DIR}/memcard-image-7.bin`,\n  `${DIR}/memcard-image-8.bin`,\n  `${DIR}/memcard-image-9.bin`,\n];\n\nconst DIFFERENT_MEMCARD_FLASH_ID = Buffer.from('ddc9f91faad6bb8dfe35f8c6', 'hex'); // Just different from MEMCARD_FLASH_ID by a single digit\nconst NEW_MEMCARD_IMAGE_SAME_FLASH_ID = `${DIR}/mine-same-flash-id.raw`;\nconst NEW_MEMCARD_IMAGE_SAME_FLASH_ID_DIFFERENT_DATE = `${DIR}/mine-same-flash-id-different-date.raw`;\nconst NEW_MEMCARD_IMAGE_DIFFERENT_FLASH_ID = `${DIR}/mine-different-flash-id.raw`;\nconst NEW_MEMCARD_IMAGE_DIFFERENT_FLASH_ID_DIFFERENT_DATE = `${DIR}/mine-different-flash-id-different-date.raw`;\n\nconst NINTENDONT_JAPANESE_MEMCARD = `${DIR}/memcard-image-japan-nintendont.raw`;\n\ndescribe('GameCube', () => {\n  it('should correctly read an empty ASCII GameCube file', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMPTY_ASCII_FILENAME);\n\n    const gameCubeSaveData = GameCubeSaveData.createFromGameCubeData(arrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getVolumeInfo().cardFlashId, EMPTY_CARDS_FLASH_ID)).to.equal(true);\n    expect(gameCubeSaveData.getVolumeInfo().formatTime.toUTCString()).to.equal('Tue, 25 Aug 2020 17:46:54 GMT');\n    expect(gameCubeSaveData.getVolumeInfo().formatOsTimeCode).to.equal(26393558999715977n);\n    expect(gameCubeSaveData.getVolumeInfo().rtcBias).to.equal(0xFD39262); // This appears to be 6 seconds\n    expect(gameCubeSaveData.getVolumeInfo().language).to.equal('English');\n    expect(gameCubeSaveData.getVolumeInfo().viDtvStatus).to.equal(0);\n    expect(gameCubeSaveData.getVolumeInfo().memcardSlot).to.equal(GameCubeHeader.MEMCARD_SLOT_A);\n    expect(gameCubeSaveData.getVolumeInfo().memcardSizeMegabits).to.equal(16);\n    expect(gameCubeSaveData.getVolumeInfo().encodingString).to.equal('US-ASCII');\n    expect(gameCubeSaveData.getVolumeInfo().numTotalBlocks).to.equal(251);\n    expect(gameCubeSaveData.getVolumeInfo().numUsedBlocks).to.equal(0);\n    expect(gameCubeSaveData.getVolumeInfo().numFreeBlocks).to.equal(251);\n    expect(gameCubeSaveData.getVolumeInfo().lastAllocatedBlock).to.equal(6);\n\n    expect(gameCubeSaveData.getSaveFiles().length).to.equal(0); // Note that there is an entry in the main directory, but the backup directory is empty and has a higher update counter\n  });\n\n  it('should correctly read an empty shift-jis GameCube file', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMPTY_SHIFT_JIS_FILENAME);\n\n    const gameCubeSaveData = GameCubeSaveData.createFromGameCubeData(arrayBuffer);\n\n    expect(gameCubeSaveData.getSaveFiles().length).to.equal(0);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getVolumeInfo().cardFlashId, EMPTY_CARDS_FLASH_ID)).to.equal(true);\n    expect(gameCubeSaveData.getVolumeInfo().formatTime.toUTCString()).to.equal('Tue, 07 Sep 2021 20:52:11 GMT');\n    expect(gameCubeSaveData.getVolumeInfo().formatOsTimeCode).to.equal(27716706806048775n);\n    expect(gameCubeSaveData.getVolumeInfo().rtcBias).to.equal(0xE8D9F980); // This appears to be 96 seconds\n    expect(gameCubeSaveData.getVolumeInfo().language).to.equal('English');\n    expect(gameCubeSaveData.getVolumeInfo().viDtvStatus).to.equal(3);\n    expect(gameCubeSaveData.getVolumeInfo().memcardSlot).to.equal(GameCubeHeader.MEMCARD_SLOT_A);\n    expect(gameCubeSaveData.getVolumeInfo().memcardSizeMegabits).to.equal(16);\n    expect(gameCubeSaveData.getVolumeInfo().encodingString).to.equal('shift-jis');\n    expect(gameCubeSaveData.getVolumeInfo().numTotalBlocks).to.equal(251);\n    expect(gameCubeSaveData.getVolumeInfo().numUsedBlocks).to.equal(0);\n    expect(gameCubeSaveData.getVolumeInfo().numFreeBlocks).to.equal(251);\n    expect(gameCubeSaveData.getVolumeInfo().lastAllocatedBlock).to.equal(4);\n  });\n\n  it('should correctly read a GameCube file with 10 saves', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_IMAGE_FILENAME);\n    const rawArrayBuffers = await Promise.all(MEMCARD_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const gameCubeSaveData = GameCubeSaveData.createFromGameCubeData(arrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getVolumeInfo().cardFlashId, MEMCARD_FLASH_ID)).to.equal(true);\n    expect(gameCubeSaveData.getVolumeInfo().formatTime.toUTCString()).to.equal('Thu, 15 Feb 2001 00:48:05 GMT');\n    expect(gameCubeSaveData.getVolumeInfo().formatOsTimeCode).to.equal(1438288056135933n);\n    expect(gameCubeSaveData.getVolumeInfo().rtcBias).to.equal(0);\n    expect(gameCubeSaveData.getVolumeInfo().language).to.equal('English');\n    expect(gameCubeSaveData.getVolumeInfo().viDtvStatus).to.equal(0);\n    expect(gameCubeSaveData.getVolumeInfo().memcardSlot).to.equal(GameCubeHeader.MEMCARD_SLOT_A);\n    expect(gameCubeSaveData.getVolumeInfo().memcardSizeMegabits).to.equal(16);\n    expect(gameCubeSaveData.getVolumeInfo().encodingString).to.equal('US-ASCII');\n    expect(gameCubeSaveData.getVolumeInfo().numTotalBlocks).to.equal(251);\n    expect(gameCubeSaveData.getVolumeInfo().numUsedBlocks).to.equal(60);\n    expect(gameCubeSaveData.getVolumeInfo().numFreeBlocks).to.equal(191);\n    expect(gameCubeSaveData.getVolumeInfo().lastAllocatedBlock).to.equal(130);\n\n    expect(gameCubeSaveData.getSaveFiles().length).to.equal(10);\n\n    expect(gameCubeSaveData.getSaveFiles()[0].gameCode).to.equal('GMSE'); // Super Mario Sunshine\n    expect(gameCubeSaveData.getSaveFiles()[0].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[0].publisherCode).to.equal('01');\n    expect(gameCubeSaveData.getSaveFiles()[0].bannerAndIconFlags).to.equal(0x01);\n    expect(gameCubeSaveData.getSaveFiles()[0].fileName).to.equal('super_mario_sunshine');\n    expect(gameCubeSaveData.getSaveFiles()[0].dateLastModified.toUTCString()).to.equal('Sun, 23 May 2004 22:38:54 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[0].iconStartOffset).to.equal(68);\n    expect(gameCubeSaveData.getSaveFiles()[0].iconFormatCode).to.equal(0x05);\n    expect(gameCubeSaveData.getSaveFiles()[0].iconSpeedCode).to.equal(0xF);\n    expect(gameCubeSaveData.getSaveFiles()[0].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[0].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[0].saveStartBlock).to.equal(5);\n    expect(gameCubeSaveData.getSaveFiles()[0].saveSizeBlocks).to.equal(7);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[0].blockNumberList, ArrayUtil.createSequentialArray(5, 7))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[0].commentStart).to.equal(4);\n    expect(gameCubeSaveData.getSaveFiles()[0].comments[0]).to.equal('Super Mario Sunshine');\n    expect(gameCubeSaveData.getSaveFiles()[0].comments[1]).to.equal('5/23 Save Data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[1].gameCode).to.equal('GN3E'); // NHL Hitz 20-03\n    expect(gameCubeSaveData.getSaveFiles()[1].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[1].publisherCode).to.equal('5D');\n    expect(gameCubeSaveData.getSaveFiles()[1].bannerAndIconFlags).to.equal(0x00);\n    expect(gameCubeSaveData.getSaveFiles()[1].fileName).to.equal('hitz20-03.db');\n    expect(gameCubeSaveData.getSaveFiles()[1].dateLastModified.toUTCString()).to.equal('Sat, 27 Sep 2003 21:13:16 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[1].iconStartOffset).to.equal(64);\n    expect(gameCubeSaveData.getSaveFiles()[1].iconFormatCode).to.equal(0x02);\n    expect(gameCubeSaveData.getSaveFiles()[1].iconSpeedCode).to.equal(GameCubeDirectoryEntry.ICON_SPEED_SLOW);\n    expect(gameCubeSaveData.getSaveFiles()[1].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[1].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[1].saveStartBlock).to.equal(12);\n    expect(gameCubeSaveData.getSaveFiles()[1].saveSizeBlocks).to.equal(8);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[1].blockNumberList, ArrayUtil.createSequentialArray(12, 8))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[1].commentStart).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[1].comments[0]).to.equal('Hitz 2003');\n    expect(gameCubeSaveData.getSaveFiles()[1].comments[1]).to.equal('Settings and User File');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[1].rawData, rawArrayBuffers[1])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[2].gameCode).to.equal('GIKE'); // Ikaruga\n    expect(gameCubeSaveData.getSaveFiles()[2].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[2].publisherCode).to.equal('70');\n    expect(gameCubeSaveData.getSaveFiles()[2].bannerAndIconFlags).to.equal(0x06);\n    expect(gameCubeSaveData.getSaveFiles()[2].fileName).to.equal('ikaruga_save_data');\n    expect(gameCubeSaveData.getSaveFiles()[2].dateLastModified.toUTCString()).to.equal('Wed, 01 Oct 2003 21:22:40 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[2].iconStartOffset).to.equal(64);\n    expect(gameCubeSaveData.getSaveFiles()[2].iconFormatCode).to.equal(0xAA);\n    expect(gameCubeSaveData.getSaveFiles()[2].iconSpeedCode).to.equal(0xFF);\n    expect(gameCubeSaveData.getSaveFiles()[2].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[2].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[2].saveStartBlock).to.equal(20);\n    expect(gameCubeSaveData.getSaveFiles()[2].saveSizeBlocks).to.equal(4);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[2].blockNumberList, ArrayUtil.createSequentialArray(20, 4))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[2].commentStart).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[2].comments[0]).to.equal('IKARUGA\\n');\n    expect(gameCubeSaveData.getSaveFiles()[2].comments[1]).to.equal('10/01/2003 21:22:38');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[2].rawData, rawArrayBuffers[2])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[3].gameCode).to.equal('GEDE'); // Eternal Darkness\n    expect(gameCubeSaveData.getSaveFiles()[3].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[3].publisherCode).to.equal('01');\n    expect(gameCubeSaveData.getSaveFiles()[3].bannerAndIconFlags).to.equal(0x01);\n    expect(gameCubeSaveData.getSaveFiles()[3].fileName).to.equal('Eternal Darkness');\n    expect(gameCubeSaveData.getSaveFiles()[3].dateLastModified.toUTCString()).to.equal('Mon, 26 Apr 2004 23:02:32 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[3].iconStartOffset).to.equal(64);\n    expect(gameCubeSaveData.getSaveFiles()[3].iconFormatCode).to.equal(0x01);\n    expect(gameCubeSaveData.getSaveFiles()[3].iconSpeedCode).to.equal(GameCubeDirectoryEntry.ICON_SPEED_SLOW);\n    expect(gameCubeSaveData.getSaveFiles()[3].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[3].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[3].saveStartBlock).to.equal(24);\n    expect(gameCubeSaveData.getSaveFiles()[3].saveSizeBlocks).to.equal(15);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[3].blockNumberList, ArrayUtil.createSequentialArray(24, 15))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[3].commentStart).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[3].comments[0]).to.equal('Eternal Darkness');\n    expect(gameCubeSaveData.getSaveFiles()[3].comments[1]).to.equal('Game file');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[3].rawData, rawArrayBuffers[3])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[4].gameCode).to.equal('GRSE'); // Soul Calibur 2\n    expect(gameCubeSaveData.getSaveFiles()[4].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[4].publisherCode).to.equal('AF');\n    expect(gameCubeSaveData.getSaveFiles()[4].bannerAndIconFlags).to.equal(0x05);\n    expect(gameCubeSaveData.getSaveFiles()[4].fileName).to.equal('sc2_0.dat');\n    expect(gameCubeSaveData.getSaveFiles()[4].dateLastModified.toUTCString()).to.equal('Tue, 14 Dec 2004 23:09:17 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[4].iconStartOffset).to.equal(64);\n    expect(gameCubeSaveData.getSaveFiles()[4].iconFormatCode).to.equal(0x5555);\n    expect(gameCubeSaveData.getSaveFiles()[4].iconSpeedCode).to.equal(0xAAAF);\n    expect(gameCubeSaveData.getSaveFiles()[4].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[4].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[4].saveStartBlock).to.equal(39);\n    expect(gameCubeSaveData.getSaveFiles()[4].saveSizeBlocks).to.equal(4);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[4].blockNumberList, ArrayUtil.createSequentialArray(39, 4))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[4].commentStart).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[4].comments[0]).to.equal('SOULCALIBUR2 game data');\n    expect(gameCubeSaveData.getSaveFiles()[4].comments[1]).to.equal(' 2004.12.14 23:09:16');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[4].rawData, rawArrayBuffers[4])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[5].gameCode).to.equal('GH2E'); // Need for Speed: Hot Pursuit 2\n    expect(gameCubeSaveData.getSaveFiles()[5].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[5].publisherCode).to.equal('69');\n    expect(gameCubeSaveData.getSaveFiles()[5].bannerAndIconFlags).to.equal(0x02);\n    expect(gameCubeSaveData.getSaveFiles()[5].fileName).to.equal('Euan');\n    expect(gameCubeSaveData.getSaveFiles()[5].dateLastModified.toUTCString()).to.equal('Sun, 12 Dec 2004 23:42:32 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[5].iconStartOffset).to.equal(64);\n    expect(gameCubeSaveData.getSaveFiles()[5].iconFormatCode).to.equal(0xA);\n    expect(gameCubeSaveData.getSaveFiles()[5].iconSpeedCode).to.equal(0xA);\n    expect(gameCubeSaveData.getSaveFiles()[5].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[5].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[5].saveStartBlock).to.equal(57);\n    expect(gameCubeSaveData.getSaveFiles()[5].saveSizeBlocks).to.equal(7);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[5].blockNumberList, ArrayUtil.createSequentialArray(57, 7))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[5].commentStart).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[5].comments[0]).to.equal('NFS: HP2');\n    expect(gameCubeSaveData.getSaveFiles()[5].comments[1]).to.equal('Euan');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[5].rawData, rawArrayBuffers[5])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[6].gameCode).to.equal('G4SE'); // The Legend of Zelda: Four Swords Adventures\n    expect(gameCubeSaveData.getSaveFiles()[6].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[6].publisherCode).to.equal('01');\n    expect(gameCubeSaveData.getSaveFiles()[6].bannerAndIconFlags).to.equal(0x01);\n    expect(gameCubeSaveData.getSaveFiles()[6].fileName).to.equal('gc4sword');\n    expect(gameCubeSaveData.getSaveFiles()[6].dateLastModified.toUTCString()).to.equal('Tue, 28 Dec 2049 20:38:08 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[6].iconStartOffset).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[6].iconFormatCode).to.equal(0x1);\n    expect(gameCubeSaveData.getSaveFiles()[6].iconSpeedCode).to.equal(GameCubeDirectoryEntry.ICON_SPEED_SLOW);\n    expect(gameCubeSaveData.getSaveFiles()[6].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[6].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[6].saveStartBlock).to.equal(64);\n    expect(gameCubeSaveData.getSaveFiles()[6].saveSizeBlocks).to.equal(3);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[6].blockNumberList, ArrayUtil.createSequentialArray(64, 3))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[6].commentStart).to.equal(7168);\n    expect(gameCubeSaveData.getSaveFiles()[6].comments[0]).to.equal('Four Swords Adventures');\n    expect(gameCubeSaveData.getSaveFiles()[6].comments[1]).to.equal('12/28 Save Data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[6].rawData, rawArrayBuffers[6])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[7].gameCode).to.equal('GF7E'); // Star Fox: Assault\n    expect(gameCubeSaveData.getSaveFiles()[7].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[7].publisherCode).to.equal('01');\n    expect(gameCubeSaveData.getSaveFiles()[7].bannerAndIconFlags).to.equal(0x05);\n    expect(gameCubeSaveData.getSaveFiles()[7].fileName).to.equal('starfox.dat');\n    expect(gameCubeSaveData.getSaveFiles()[7].dateLastModified.toUTCString()).to.equal('Tue, 28 Dec 2049 03:56:17 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[7].iconStartOffset).to.equal(64);\n    expect(gameCubeSaveData.getSaveFiles()[7].iconFormatCode).to.equal(0x15);\n    expect(gameCubeSaveData.getSaveFiles()[7].iconSpeedCode).to.equal(0x3F);\n    expect(gameCubeSaveData.getSaveFiles()[7].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[7].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[7].saveStartBlock).to.equal(123);\n    expect(gameCubeSaveData.getSaveFiles()[7].saveSizeBlocks).to.equal(5);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[7].blockNumberList, ArrayUtil.createSequentialArray(123, 5))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[7].commentStart).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[7].comments[0]).to.equal('STAR FOX: ASSAULT');\n    expect(gameCubeSaveData.getSaveFiles()[7].comments[1]).to.equal('12/28/2049 03:56:16');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[7].rawData, rawArrayBuffers[7])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[8].gameCode).to.equal('GFZE'); // F-Zero GX\n    expect(gameCubeSaveData.getSaveFiles()[8].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[8].publisherCode).to.equal('8P');\n    expect(gameCubeSaveData.getSaveFiles()[8].bannerAndIconFlags).to.equal(0x02);\n    expect(gameCubeSaveData.getSaveFiles()[8].fileName).to.equal('f_zero.dat');\n    expect(gameCubeSaveData.getSaveFiles()[8].dateLastModified.toUTCString()).to.equal('Fri, 24 Dec 2049 11:20:49 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[8].iconStartOffset).to.equal(96);\n    expect(gameCubeSaveData.getSaveFiles()[8].iconFormatCode).to.equal(0x02);\n    expect(gameCubeSaveData.getSaveFiles()[8].iconSpeedCode).to.equal(GameCubeDirectoryEntry.ICON_SPEED_SLOW);\n    expect(gameCubeSaveData.getSaveFiles()[8].permissionAttributeBitfield).to.equal(\n      GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC\n      | GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_NO_COPY\n      | GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_NO_MOVE,\n    );\n    expect(gameCubeSaveData.getSaveFiles()[8].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[8].saveStartBlock).to.equal(119);\n    expect(gameCubeSaveData.getSaveFiles()[8].saveSizeBlocks).to.equal(4);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[8].blockNumberList, ArrayUtil.createSequentialArray(119, 4))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[8].commentStart).to.equal(4);\n    expect(gameCubeSaveData.getSaveFiles()[8].comments[0]).to.equal('F-ZERO GX');\n    expect(gameCubeSaveData.getSaveFiles()[8].comments[1]).to.equal('49/12/24 Euan');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[8].rawData, rawArrayBuffers[8])).to.equal(true);\n\n    expect(gameCubeSaveData.getSaveFiles()[9].gameCode).to.equal('GSWE'); // Star Wars Rogue Squadron II: Rogue Leader\n    expect(gameCubeSaveData.getSaveFiles()[9].region).to.equal('North America');\n    expect(gameCubeSaveData.getSaveFiles()[9].publisherCode).to.equal('64');\n    expect(gameCubeSaveData.getSaveFiles()[9].bannerAndIconFlags).to.equal(0x01);\n    expect(gameCubeSaveData.getSaveFiles()[9].fileName).to.equal('RogueLeader');\n    expect(gameCubeSaveData.getSaveFiles()[9].dateLastModified.toUTCString()).to.equal('Tue, 28 Dec 2049 22:44:54 GMT');\n    expect(gameCubeSaveData.getSaveFiles()[9].iconStartOffset).to.equal(64);\n    expect(gameCubeSaveData.getSaveFiles()[9].iconFormatCode).to.equal(0x5555);\n    expect(gameCubeSaveData.getSaveFiles()[9].iconSpeedCode).to.equal(0x5555);\n    expect(gameCubeSaveData.getSaveFiles()[9].permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveData.getSaveFiles()[9].copyCounter).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[9].saveStartBlock).to.equal(128);\n    expect(gameCubeSaveData.getSaveFiles()[9].saveSizeBlocks).to.equal(3);\n    expect(ArrayUtil.arraysEqual(gameCubeSaveData.getSaveFiles()[9].blockNumberList, ArrayUtil.createSequentialArray(128, 3))).to.equal(true);\n    expect(gameCubeSaveData.getSaveFiles()[9].commentStart).to.equal(0);\n    expect(gameCubeSaveData.getSaveFiles()[9].comments[0]).to.equal('Star Wars: Rogue Leader');\n    expect(gameCubeSaveData.getSaveFiles()[9].comments[1]).to.equal('Save Data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getSaveFiles()[9].rawData, rawArrayBuffers[9])).to.equal(true);\n  });\n\n  // This image works on my physical gamecube memcard\n  it('should create a GameCube file with the same flash ID', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEW_MEMCARD_IMAGE_SAME_FLASH_ID);\n\n    const volumeInfo = {\n      cardFlashId: MEMCARD_FLASH_ID,\n      formatOsTimeCode: 1438288056135933n,\n      rtcBias: 0,\n      languageCode: GameCubeUtil.getLanguageCode('English'),\n      viDtvStatus: 0,\n      memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n      memcardSizeMegabits: 16,\n      encodingCode: GameCubeUtil.getEncodingCode('US-ASCII'),\n    };\n\n    const gameCubeSaveData = GameCubeSaveData.createFromSaveFiles([], volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  // This image works on my physical gamecube memcard\n  it('should create a GameCube file with the same flash ID and different format time', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEW_MEMCARD_IMAGE_SAME_FLASH_ID_DIFFERENT_DATE);\n\n    const volumeInfo = {\n      cardFlashId: MEMCARD_FLASH_ID,\n      formatOsTimeCode: GameCubeUtil.getOsTimeFromDate(new Date('June 26, 2019 12:00:00 GMT')),\n      rtcBias: 0,\n      languageCode: GameCubeUtil.getLanguageCode('English'),\n      viDtvStatus: 0,\n      memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n      memcardSizeMegabits: 16,\n      encodingCode: GameCubeUtil.getEncodingCode('US-ASCII'),\n    };\n\n    const gameCubeSaveData = GameCubeSaveData.createFromSaveFiles([], volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  // This image does not work on my physical gamecube memcard\n  it('should create a GameCube file with a different flash ID', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEW_MEMCARD_IMAGE_DIFFERENT_FLASH_ID);\n\n    const volumeInfo = {\n      cardFlashId: DIFFERENT_MEMCARD_FLASH_ID,\n      formatOsTimeCode: 1438288056135933n,\n      rtcBias: 0,\n      languageCode: GameCubeUtil.getLanguageCode('English'),\n      viDtvStatus: 0,\n      memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n      memcardSizeMegabits: 16,\n      encodingCode: GameCubeUtil.getEncodingCode('US-ASCII'),\n    };\n\n    const gameCubeSaveData = GameCubeSaveData.createFromSaveFiles([], volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  // This image does not work on my physical gamecube memcard\n  it('should create a GameCube file with a different flash ID and different date', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEW_MEMCARD_IMAGE_DIFFERENT_FLASH_ID_DIFFERENT_DATE);\n\n    const volumeInfo = {\n      cardFlashId: DIFFERENT_MEMCARD_FLASH_ID,\n      formatOsTimeCode: GameCubeUtil.getOsTimeFromDate(new Date('June 26, 2019 12:00:00 GMT')),\n      rtcBias: 0,\n      languageCode: GameCubeUtil.getLanguageCode('English'),\n      viDtvStatus: 0,\n      memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n      memcardSizeMegabits: 16,\n      encodingCode: GameCubeUtil.getEncodingCode('US-ASCII'),\n    };\n\n    const gameCubeSaveData = GameCubeSaveData.createFromSaveFiles([], volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  // This should be an almost-indentical image to the one read from my physical memcard. However, there are\n  // some gaps in the blocks from my original card that are't present here.\n  // Note in particular that the F-Zero save doesn't need to be fixed because the card serial number (format time + flash ID)\n  // is the same as the card it was copied from\n  it('should create a GameCube file with 10 saves', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_IMAGE_RECREATED_FILENAME);\n    const rawArrayBuffers = await Promise.all(MEMCARD_SAVE_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const volumeInfo = {\n      cardFlashId: MEMCARD_FLASH_ID,\n      formatOsTimeCode: 1438288056135933n,\n      rtcBias: 0,\n      languageCode: GameCubeUtil.getLanguageCode('English'),\n      viDtvStatus: 0,\n      memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n      memcardSizeMegabits: 16,\n      encodingCode: GameCubeUtil.getEncodingCode('US-ASCII'),\n    };\n\n    const saveFiles = [\n      {\n        gameCode: 'GMSE', // Super Mario Sunshine\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '01',\n        bannerAndIconFlags: 0x01,\n        fileName: 'super_mario_sunshine',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Sun, 23 May 2004 22:38:54 GMT')),\n        iconStartOffset: 68,\n        iconFormatCode: 0x05,\n        iconSpeedCode: 0xF,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 4,\n        rawData: rawArrayBuffers[0],\n      },\n      {\n        gameCode: 'GN3E', // NHL Hitz 20-03\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '5D',\n        bannerAndIconFlags: 0x00,\n        fileName: 'hitz20-03.db',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Sat, 27 Sep 2003 21:13:16 GMT')),\n        iconStartOffset: 64,\n        iconFormatCode: 0x02,\n        iconSpeedCode: GameCubeDirectoryEntry.ICON_SPEED_SLOW,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 0,\n        rawData: rawArrayBuffers[1],\n      },\n      {\n        gameCode: 'GIKE', // Ikaruga\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '70',\n        bannerAndIconFlags: 0x06,\n        fileName: 'ikaruga_save_data',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Wed, 01 Oct 2003 21:22:40 GMT')),\n        iconStartOffset: 64,\n        iconFormatCode: 0xAA,\n        iconSpeedCode: 0xFF,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 0,\n        rawData: rawArrayBuffers[2],\n      },\n      {\n        gameCode: 'GEDE', // Eternal Darkness\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '01',\n        bannerAndIconFlags: 0x01,\n        fileName: 'Eternal Darkness',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Mon, 26 Apr 2004 23:02:32 GMT')),\n        iconStartOffset: 64,\n        iconFormatCode: 0x01,\n        iconSpeedCode: GameCubeDirectoryEntry.ICON_SPEED_SLOW,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 0,\n        rawData: rawArrayBuffers[3],\n      },\n      {\n        gameCode: 'GRSE', // Soul Calibur 2\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: 'AF',\n        bannerAndIconFlags: 0x05,\n        fileName: 'sc2_0.dat',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Tue, 14 Dec 2004 23:09:17 GMT')),\n        iconStartOffset: 64,\n        iconFormatCode: 0x5555,\n        iconSpeedCode: 0xAAAF,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 0,\n        rawData: rawArrayBuffers[4],\n      },\n      {\n        gameCode: 'GH2E', // Need for Speed: Hot Pursuit 2\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '69',\n        bannerAndIconFlags: 0x02,\n        fileName: 'Euan',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Sun, 12 Dec 2004 23:42:32 GMT')),\n        iconStartOffset: 64,\n        iconFormatCode: 0xA,\n        iconSpeedCode: 0xA,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 0,\n        rawData: rawArrayBuffers[5],\n      },\n      {\n        gameCode: 'G4SE', // The Legend of Zelda: Four Swords Adventures\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '01',\n        bannerAndIconFlags: 0x01,\n        fileName: 'gc4sword',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Tue, 28 Dec 2049 20:38:08 GMT')),\n        iconStartOffset: 0,\n        iconFormatCode: 0x1,\n        iconSpeedCode: GameCubeDirectoryEntry.ICON_SPEED_SLOW,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 7168,\n        rawData: rawArrayBuffers[6],\n      },\n      {\n        gameCode: 'GF7E', // Star Fox: Assault\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '01',\n        bannerAndIconFlags: 0x05,\n        fileName: 'starfox.dat',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Tue, 28 Dec 2049 03:56:17 GMT')),\n        iconStartOffset: 64,\n        iconFormatCode: 0x15,\n        iconSpeedCode: 0x3F,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 0,\n        rawData: rawArrayBuffers[7],\n      },\n      {\n        gameCode: 'GFZE', // F-Zero GX\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '8P',\n        bannerAndIconFlags: 0x02,\n        fileName: 'f_zero.dat',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Fri, 24 Dec 2049 11:20:49 GMT')),\n        iconStartOffset: 96,\n        iconFormatCode: 0x02,\n        iconSpeedCode: GameCubeDirectoryEntry.ICON_SPEED_SLOW,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC | GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_NO_COPY | GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_NO_MOVE,\n        commentStart: 4,\n        rawData: rawArrayBuffers[8],\n      },\n      {\n        gameCode: 'GSWE', // Star Wars Rogue Squadron II: Rogue Leader\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '64',\n        bannerAndIconFlags: 0x01,\n        fileName: 'RogueLeader',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Tue, 28 Dec 2049 22:44:54 GMT')),\n        iconStartOffset: 64,\n        iconFormatCode: 0x5555,\n        iconSpeedCode: 0x5555,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 0,\n        rawData: rawArrayBuffers[9],\n      },\n    ];\n\n    const gameCubeSaveData = GameCubeSaveData.createFromSaveFiles(saveFiles, volumeInfo);\n\n    expect(gameCubeSaveData.getSaveFiles().length).to.equal(10);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  // This image just has my F-Zero save, but with a different format time (and thus a different serial).\n  // With this game, it requires that the actual save data be updated to reflect the card's serial\n  it('should create a GameCube file with F-Zero and a different serial', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_IMAGE_RECREATED_FZERO_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_SAVE_FILENAME[8]);\n\n    const volumeInfo = {\n      cardFlashId: MEMCARD_FLASH_ID,\n      formatOsTimeCode: GameCubeUtil.getOsTimeFromDate(new Date('June 26, 2019 12:00:00 GMT')), // Different date, so we get a different serial\n      rtcBias: 0,\n      languageCode: GameCubeUtil.getLanguageCode('English'),\n      viDtvStatus: 0,\n      memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n      memcardSizeMegabits: 16,\n      encodingCode: GameCubeUtil.getEncodingCode('US-ASCII'),\n    };\n\n    const saveFiles = [\n      {\n        gameCode: 'GFZE', // F-Zero GX\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '8P',\n        bannerAndIconFlags: 0x02,\n        fileName: 'f_zero.dat',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Fri, 24 Dec 2049 11:20:49 GMT')),\n        iconStartOffset: 96,\n        iconFormatCode: 0x02,\n        iconSpeedCode: GameCubeDirectoryEntry.ICON_SPEED_SLOW,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC | GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_NO_COPY | GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_NO_MOVE,\n        commentStart: 4,\n        rawData: rawArrayBuffer,\n      },\n    ];\n\n    const gameCubeSaveData = GameCubeSaveData.createFromSaveFiles(saveFiles, volumeInfo);\n\n    expect(gameCubeSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  it('should create a GameCube file with an empty serial for the Memcard Pro GC', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEW_MEMCARD_IMAGE_NO_SERIAL_FILENAME);\n\n    const volumeInfo = {\n      // No cardFlashId specified\n      formatOsTimeCode: 0n,\n      rtcBias: 0,\n      languageCode: GameCubeUtil.getLanguageCode('English'),\n      viDtvStatus: 0,\n      memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n      memcardSizeMegabits: 16,\n      encodingCode: GameCubeUtil.getEncodingCode('US-ASCII'),\n    };\n\n    const gameCubeSaveData = GameCubeSaveData.createFromSaveFiles([], volumeInfo);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  // This image just has my F-Zero save, but with no serial number so that the Memcard Pro GC will accept it\n  // With this game, it requires that the actual save data be updated to reflect the card's serial\n  it('should create a GameCube file with F-Zero and an empty serial for the Memcard Pro GC', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_IMAGE_RECREATED_FZERO_NO_SERIAL_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_SAVE_FILENAME[8]);\n\n    const volumeInfo = {\n      // No cardFlashId specified\n      formatOsTimeCode: GameCubeUtil.getOsTimeFromDate(new Date('July 14, 2025 12:00:00 GMT')),\n      rtcBias: 0,\n      languageCode: GameCubeUtil.getLanguageCode('English'),\n      viDtvStatus: 0,\n      memcardSlot: GameCubeHeader.MEMCARD_SLOT_A,\n      memcardSizeMegabits: 16,\n      encodingCode: GameCubeUtil.getEncodingCode('US-ASCII'),\n    };\n\n    const saveFiles = [\n      {\n        gameCode: 'GFZE', // F-Zero GX\n        regionCode: GameCubeUtil.getRegionCode('North America'),\n        publisherCode: '8P',\n        bannerAndIconFlags: 0x02,\n        fileName: 'f_zero.dat',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Fri, 24 Dec 2049 11:20:49 GMT')),\n        iconStartOffset: 96,\n        iconFormatCode: 0x02,\n        iconSpeedCode: GameCubeDirectoryEntry.ICON_SPEED_SLOW,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC | GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_NO_COPY | GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_NO_MOVE,\n        commentStart: 4,\n        rawData: rawArrayBuffer,\n      },\n    ];\n\n    const gameCubeSaveData = GameCubeSaveData.createFromSaveFiles(saveFiles, volumeInfo);\n\n    expect(gameCubeSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getArrayBuffer(), arrayBuffer)).to.equal(true);\n  });\n\n  it('should resize a GameCube file with 10 saves', async () => {\n    // There are a handful of differences between the 2 memcard images:\n    // - Different size indicated in header\n    // - Different checksums in header as result of different size\n    // - Different num blocks remaining indicated in block allocation table (and the backup copy of this table)\n    // - Different checksums in the block allocation table and backup as a result of different num blocks remaining\n    // - Extra empty data at the end of the larger image\n\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_IMAGE_RECREATED_FILENAME);\n    const arrayBufferResized = await ArrayBufferUtil.readArrayBuffer(MEMCARD_IMAGE_RECREATED_RESIZED_FILENAME);\n\n    const gameCubeSaveData = GameCubeSaveData.createFromGameCubeData(arrayBuffer);\n\n    const gameCubeDataResized = GameCubeSaveData.createWithNewSize(gameCubeSaveData, 8388608); // 64 megabits/1019 blocks\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeDataResized.getArrayBuffer(), arrayBufferResized)).to.equal(true);\n  });\n\n  it('should load a GameCube file that works for a Japanese game in Nintendont', async () => {\n    const arrayBuffer = await ArrayBufferUtil.readArrayBuffer(NINTENDONT_JAPANESE_MEMCARD);\n\n    const gameCubeSaveData = GameCubeSaveData.createFromGameCubeData(arrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveData.getVolumeInfo().cardFlashId, EMPTY_CARDS_FLASH_ID)).to.equal(true);\n    expect(gameCubeSaveData.getVolumeInfo().formatTime.toUTCString()).to.equal('Sat, 01 Jan 2000 00:00:19 GMT'); // 19 seconds after epoch\n    expect(gameCubeSaveData.getVolumeInfo().formatOsTimeCode).to.equal(779957113n);\n    expect(gameCubeSaveData.getVolumeInfo().rtcBias).to.equal(0);\n    expect(gameCubeSaveData.getVolumeInfo().language).to.equal('English');\n    expect(gameCubeSaveData.getVolumeInfo().viDtvStatus).to.equal(0);\n    expect(gameCubeSaveData.getVolumeInfo().memcardSlot).to.equal(GameCubeHeader.MEMCARD_SLOT_A);\n    expect(gameCubeSaveData.getVolumeInfo().memcardSizeMegabits).to.equal(16);\n    expect(gameCubeSaveData.getVolumeInfo().encodingString).to.equal('shift-jis');\n    expect(gameCubeSaveData.getVolumeInfo().numTotalBlocks).to.equal(251);\n    expect(gameCubeSaveData.getVolumeInfo().numUsedBlocks).to.equal(2);\n    expect(gameCubeSaveData.getVolumeInfo().numFreeBlocks).to.equal(249);\n    expect(gameCubeSaveData.getVolumeInfo().lastAllocatedBlock).to.equal(6);\n\n    expect(gameCubeSaveData.getSaveFiles().length).to.equal(1);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GameCube/GameSpecificFixups/FZeroGx.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GameCubeGciSaveData from '@/save-formats/GameCube/IndividualSaves/Gci';\nimport FZeroGxFixups from '@/save-formats/GameCube/GameSpecificFixups/FZeroGx';\n\nconst DIR = './tests/data/save-formats/gamecube/GameSpecificFixups';\n\nconst GCI_FILENAME = `${DIR}/f_zero_gx_usa.gci`;\n\ndescribe('GameCube - game-specific fixups - F-Zero GX', () => {\n  it('should change an F-Zero GX file when fixing it up', async () => {\n    const gciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GCI_FILENAME);\n\n    const gameCubeSaveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer);\n\n    const headerSerials = {\n      serial1: 0,\n      serial2: 0,\n    };\n    const fixedSaveFile = FZeroGxFixups.fixupSaveFile(gameCubeSaveFile, headerSerials);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, fixedSaveFile.rawData)).to.equal(false);\n  });\n\n  it('should correctly fixup an F-Zero GX file', async () => {\n    const gciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GCI_FILENAME);\n\n    const gameCubeSaveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer);\n\n    // We set the header serials to what they already were when the save file was created.\n    // So by checking that the data is unchanged it verifies that the serials are put into\n    // the correct place and that the checksum is calculated correctly\n    const headerSerials = {\n      serial1: 0x89166863,\n      serial2: 0xc2ba136d,\n    };\n    const fixedSaveFile = FZeroGxFixups.fixupSaveFile(gameCubeSaveFile, headerSerials);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, fixedSaveFile.rawData)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GameCube/GameSpecificFixups/PhantasyStarOnline.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GameCubeSaveData from '@/save-formats/GameCube/GameCube';\nimport PhantasyStarOnlineFixups from '@/save-formats/GameCube/GameSpecificFixups/PhantasyStarOnline';\n\nconst DIR = './tests/data/save-formats/gamecube/GameSpecificFixups';\n\n// I would like to be able to find a PSO3 file as well, but even one for the original PSO was hard to find\n\nconst MEMCARD_FILENAME = `${DIR}/phantasy-star-online-SNUGGLES-WEAPONS.gcp`;\n\ndescribe('GameCube - game-specific fixups - Phantasy Star Online', () => {\n  it('should change a Phantasy Star Online file when fixing it up', async () => {\n    const memcardArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_FILENAME);\n\n    const gameCubeSaveFiles = GameCubeSaveData.createFromGameCubeData(memcardArrayBuffer);\n\n    expect(gameCubeSaveFiles.saveFiles.length).to.equal(3);\n\n    expect(gameCubeSaveFiles.saveFiles[0].fileName).to.equal('PSO_SYSTEM');\n\n    const headerSerials = {\n      serial1: 0,\n      serial2: 0,\n    };\n    const fixedSaveFile = PhantasyStarOnlineFixups.fixupSaveFile(gameCubeSaveFiles.saveFiles[0], headerSerials);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFiles.saveFiles[0].rawData, fixedSaveFile.rawData)).to.equal(false);\n  });\n\n  it('should correctly fixup a Phantasy Star Online file', async () => {\n    const memcardArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEMCARD_FILENAME);\n\n    const gameCubeSaveFiles = GameCubeSaveData.createFromGameCubeData(memcardArrayBuffer);\n\n    expect(gameCubeSaveFiles.saveFiles.length).to.equal(3);\n\n    expect(gameCubeSaveFiles.saveFiles[0].fileName).to.equal('PSO_SYSTEM');\n\n    // We set the header serials to what they already were when the save file was created.\n    // So by checking that the data is unchanged it verifies that the serials are put into\n    // the correct place and that the checksum is calculated correctly\n    const headerSerials = {\n      serial1: 0x2e7fbf36,\n      serial2: 0x56d073df,\n    };\n    const fixedSaveFile = PhantasyStarOnlineFixups.fixupSaveFile(gameCubeSaveFiles.saveFiles[0], headerSerials);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFiles.saveFiles[0].rawData, fixedSaveFile.rawData)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GameCube/IndividualSaves/GameShark.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GameCubeGameSharkSaveData from '@/save-formats/GameCube/IndividualSaves/GameShark';\nimport GameCubeDirectoryEntry from '@/save-formats/GameCube/Components/DirectoryEntry';\n\nconst DIR = './tests/data/save-formats/gamecube/GameShark';\n\nconst GAMESHARK_FILENAME = `${DIR}/soulcalibur-ii.20766.gcs`;\nconst RAW_FILENAME = `${DIR}/soulcalibur-ii.20766.bin`;\n\nconst JAPANESE_GAMESHARK_FILENAME = `${DIR}/soulcalibur-ii.20763.gcs`;\nconst JAPANESE_RAW_FILENAME = `${DIR}/soulcalibur-ii.20763.bin`;\n\ndescribe('GameCube - GameShark', () => {\n  it('should correctly read a .GCS file', async () => {\n    const gcsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GAMESHARK_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const gameCubeSaveFile = GameCubeGameSharkSaveData.convertIndividualSaveToSaveFile(gcsArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GRSE');\n    expect(gameCubeSaveFile.region).to.equal('North America');\n    expect(gameCubeSaveFile.publisherCode).to.equal('AF');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x05);\n    expect(gameCubeSaveFile.fileName).to.equal('sc2_0.dat');\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Fri, 29 Jul 2011 15:02:34 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(64);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x5555);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(0xAAAF);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(1);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(30);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(4);\n    expect(gameCubeSaveFile.commentStart).to.equal(0);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('US-ASCII');\n    expect(gameCubeSaveFile.comments[0]).to.equal('SOULCALIBUR2 game data');\n    expect(gameCubeSaveFile.comments[1]).to.equal(' 2004.09.04 12:57:11');\n    expect(gameCubeSaveFile.gameSharkComment).to.equal('SOULCALIBUR2 game data');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a Japanese .GCS file', async () => {\n    const gcsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_GAMESHARK_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_RAW_FILENAME);\n\n    const gameCubeSaveFile = GameCubeGameSharkSaveData.convertIndividualSaveToSaveFile(gcsArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GRSJ');\n    expect(gameCubeSaveFile.region).to.equal('Japan');\n    expect(gameCubeSaveFile.publisherCode).to.equal('AF');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x05);\n    expect(gameCubeSaveFile.fileName).to.equal('sc2_0.dat');\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Thu, 10 Apr 2003 00:34:56 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(64);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x5555);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(0xAAAF);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(1);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(5);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(4);\n    expect(gameCubeSaveFile.commentStart).to.equal(0);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('shift-jis');\n    expect(gameCubeSaveFile.comments[0]).to.equal('ソウルキャリバーⅡゲームデータ'); // \"Soul Calibur II Game Data\"\n    expect(gameCubeSaveFile.comments[1]).to.equal(' 2003.04.10 00:34:55');\n    expect(gameCubeSaveFile.gameSharkComment).to.equal('ソウルキャリバーⅡゲームデータ'); // \"Soul Calibur II Game Data\"\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GameCube/IndividualSaves/Gci.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GameCubeGciSaveData from '@/save-formats/GameCube/IndividualSaves/Gci';\nimport GameCubeDirectoryEntry from '@/save-formats/GameCube/Components/DirectoryEntry';\nimport GameCubeUtil from '@/save-formats/GameCube/Util';\n\nconst DIR = './tests/data/save-formats/gamecube/gci';\n\nconst GCI_FILENAME = `${DIR}/need_for_speed_underground_2_usa.gci`; // I heard the AI in this game is pretty good\nconst GCI_FILENAME_RECREATED = `${DIR}/need_for_speed_underground_2_usa-recreated.gci`;\nconst RAW_FILENAME = `${DIR}/need_for_speed_underground_2_usa.bin`;\n\n// The goal with having multiple Japanese saves is to attempt to determine whether fileName\n// is encoded as US-ASCII or shift-jis\n\nconst JAPANESE_GCI_FILENAME = `${DIR}/bleach_gc_tasogare_ni_mamieru_shinigami_jp.gci`;\nconst JAPANESE_RAW_FILENAME = `${DIR}/bleach_gc_tasogare_ni_mamieru_shinigami_jp.bin`;\n\nconst JAPANESE_GCI_FILENAME_2 = `${DIR}/dokapon_dx_wataru_sekai_wa_oni_darake_jp_1.gci`;\nconst JAPANESE_RAW_FILENAME_2 = `${DIR}/dokapon_dx_wataru_sekai_wa_oni_darake_jp_1.bin`;\n\nconst JAPANESE_GCI_FILENAME_3 = `${DIR}/hikaru_no_go_3_jp.gci`;\nconst JAPANESE_RAW_FILENAME_3 = `${DIR}/hikaru_no_go_3_jp.bin`;\n\nconst JAPANESE_GCI_FILENAME_4 = `${DIR}/konjiki_no_gashbell__yuujou_no_tag_battle_jp.gci`;\nconst JAPANESE_RAW_FILENAME_4 = `${DIR}/konjiki_no_gashbell__yuujou_no_tag_battle_jp.bin`;\n\ndescribe('GameCube - .GCI', () => {\n  it('should correctly read a .GCI file', async () => {\n    const gciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GCI_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const gameCubeSaveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GUGE');\n    expect(gameCubeSaveFile.region).to.equal('North America');\n    expect(gameCubeSaveFile.publisherCode).to.equal('69');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x02);\n    expect(gameCubeSaveFile.fileName).to.equal('NFSU2BUTCH');\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Sat, 27 Sep 2008 14:27:56 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(80);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x02);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(GameCubeDirectoryEntry.ICON_SPEED_MIDDLE);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(0);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(146);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(7);\n    expect(gameCubeSaveFile.commentStart).to.equal(16);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('US-ASCII');\n    expect(gameCubeSaveFile.comments[0]).to.equal('NFS Underground 2');\n    expect(gameCubeSaveFile.comments[1]).to.equal('BUTCH');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write a .GCI file', async () => {\n    // The only difference between the original file and the one we recreate is\n    // that saveStartBlock is set to something in the original whereas we set it to 0\n\n    const gciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GCI_FILENAME_RECREATED);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const saveFiles = [\n      {\n        gameCode: 'GUGE',\n        publisherCode: '69',\n        bannerAndIconFlags: 0x02,\n        fileName: 'NFSU2BUTCH',\n        dateLastModifiedCode: GameCubeUtil.getDateCode(new Date('Sat, 27 Sep 2008 14:27:56 GMT')),\n        iconStartOffset: 80,\n        iconFormatCode: 0x02,\n        iconSpeedCode: GameCubeDirectoryEntry.ICON_SPEED_MIDDLE,\n        permissionAttributeBitfield: GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC,\n        commentStart: 16,\n        rawData: rawArrayBuffer,\n      },\n    ];\n\n    const gameCubeSaveFiles = GameCubeGciSaveData.convertSaveFilesToGcis(saveFiles);\n\n    expect(gameCubeSaveFiles.length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFiles[0], gciArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a Japanese .GCI file', async () => {\n    const gciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_GCI_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_RAW_FILENAME);\n\n    const gameCubeSaveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GIGJ');\n    expect(gameCubeSaveFile.region).to.equal('Japan');\n    expect(gameCubeSaveFile.publisherCode).to.equal('8P');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x01);\n    expect(gameCubeSaveFile.fileName).to.equal('savedata');\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Sun, 20 Apr 2025 02:37:09 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(64);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x05);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(0x0F);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(0);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(5);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(1);\n    expect(gameCubeSaveFile.commentStart).to.equal(0);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('shift-jis');\n    expect(gameCubeSaveFile.comments[0]).to.equal('BLEACH GC 黄昏にまみえる死神'); // \"BLEACH GC The Grim Reaper in the Dusk\"\n    expect(gameCubeSaveFile.comments[1]).to.equal('セーブデータ'); // \"Save Data\"\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a second Japanese .GCI file', async () => {\n    const gciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_GCI_FILENAME_2);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_RAW_FILENAME_2);\n\n    const gameCubeSaveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GDNJ');\n    expect(gameCubeSaveFile.region).to.equal('Japan');\n    expect(gameCubeSaveFile.publisherCode).to.equal('E8');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x06);\n    expect(gameCubeSaveFile.fileName).to.equal('4:Dokapon Str'); // This looks a little weird, but comes out as the same whether we treat the encoding as US-ASCII or shift-jis\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Wed, 10 Aug 2016 06:26:09 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(64);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x02);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(GameCubeDirectoryEntry.ICON_SPEED_SLOW);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(0);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(170);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(2);\n    expect(gameCubeSaveFile.commentStart).to.equal(0);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('shift-jis');\n    expect(gameCubeSaveFile.comments[0]).to.equal('ドカポンＤＸ　ストーリーモード'); // \"Dokapon DX Story Mode\"\n    expect(gameCubeSaveFile.comments[1]).to.equal('8月10日 6時26分のデータ'); // \"Data as of 6:26 on August 10th\"\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a third Japanese .GCI file', async () => {\n    const gciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_GCI_FILENAME_3);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_RAW_FILENAME_3);\n\n    const gameCubeSaveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GHTJ');\n    expect(gameCubeSaveFile.region).to.equal('Japan');\n    expect(gameCubeSaveFile.publisherCode).to.equal('A4');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x02);\n    expect(gameCubeSaveFile.fileName).to.equal('hgsys');\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Wed, 02 Jul 2014 21:57:03 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(64);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x01);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(GameCubeDirectoryEntry.ICON_SPEED_SLOW);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(0);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(5);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(2);\n    expect(gameCubeSaveFile.commentStart).to.equal(0);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('shift-jis');\n    expect(gameCubeSaveFile.comments[0]).to.equal('ヒカルの碁３　システムデータ\\n'); // \"Hikaru no Go 3 System Data\"\n    expect(gameCubeSaveFile.comments[1]).to.equal('2014年7月2日'); // \"July 2, 2014\"\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a fourth Japanese .GCI file', async () => {\n    const gciArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_GCI_FILENAME_4);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_RAW_FILENAME_4);\n\n    const gameCubeSaveFile = GameCubeGciSaveData.convertIndividualSaveToSaveFile(gciArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GGKJ');\n    expect(gameCubeSaveFile.region).to.equal('Japan');\n    expect(gameCubeSaveFile.publisherCode).to.equal('B2');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x02);\n    expect(gameCubeSaveFile.fileName).to.equal('GASHBELL_FP');\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Thu, 19 Aug 2004 04:35:22 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(64);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x02);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(GameCubeDirectoryEntry.ICON_SPEED_SLOW);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(0);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(8);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(2);\n    expect(gameCubeSaveFile.commentStart).to.equal(0);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('shift-jis');\n    expect(gameCubeSaveFile.comments[0]).to.equal('金色のガッシュベル！！          '); // \"Zatch Bell!!\"\n    expect(gameCubeSaveFile.comments[1]).to.equal(' セーブデータ                  '); // \"Save Data\"\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/GameCube/IndividualSaves/MaxDrive.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GameCubeMaxDriveSaveData from '@/save-formats/GameCube/IndividualSaves/MaxDrive';\nimport GameCubeDirectoryEntry from '@/save-formats/GameCube/Components/DirectoryEntry';\n\nconst DIR = './tests/data/save-formats/gamecube/MaxDrive';\n\nconst MAXDRIVE_FILENAME = `${DIR}/soulcalibur-ii.8736.sav`;\nconst RAW_FILENAME = `${DIR}/soulcalibur-ii.8736.bin`;\n\nconst JAPANESE_MAXDRIVE_FILENAME = `${DIR}/soulcalibur-ii.20764.sav`;\nconst JAPANESE_RAW_FILENAME = `${DIR}/soulcalibur-ii.20764.bin`;\n\ndescribe('GameCube - MaxDrive', () => {\n  it('should correctly read a .SAV file', async () => {\n    const gcsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MAXDRIVE_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const gameCubeSaveFile = GameCubeMaxDriveSaveData.convertIndividualSaveToSaveFile(gcsArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GRSE');\n    expect(gameCubeSaveFile.region).to.equal('North America');\n    expect(gameCubeSaveFile.publisherCode).to.equal('AF');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x05);\n    expect(gameCubeSaveFile.fileName).to.equal('sc2_0.dat');\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Fri, 29 Jul 2011 15:02:34 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(64);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x5555);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(0xAAAF);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(1);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(30);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(4);\n    expect(gameCubeSaveFile.commentStart).to.equal(0);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('US-ASCII');\n    expect(gameCubeSaveFile.comments[0]).to.equal('SOULCALIBUR2 game data');\n    expect(gameCubeSaveFile.comments[1]).to.equal(' 2004.09.04 12:57:11');\n    expect(gameCubeSaveFile.maxDriveComments[0]).to.equal('SOULCALIBUR2 game data');\n    expect(gameCubeSaveFile.maxDriveComments[1]).to.equal(' 2004.09.04 12:57:11');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a Japanese .SAV file', async () => {\n    const gcsArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_MAXDRIVE_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(JAPANESE_RAW_FILENAME);\n\n    const gameCubeSaveFile = GameCubeMaxDriveSaveData.convertIndividualSaveToSaveFile(gcsArrayBuffer);\n\n    expect(gameCubeSaveFile.gameCode).to.equal('GRSJ');\n    expect(gameCubeSaveFile.region).to.equal('Japan');\n    expect(gameCubeSaveFile.publisherCode).to.equal('AF');\n    expect(gameCubeSaveFile.bannerAndIconFlags).to.equal(0x05);\n    expect(gameCubeSaveFile.fileName).to.equal('sc2_0.dat');\n    expect(gameCubeSaveFile.dateLastModified.toUTCString()).to.equal('Thu, 10 Apr 2003 00:34:56 GMT');\n    expect(gameCubeSaveFile.iconStartOffset).to.equal(64);\n    expect(gameCubeSaveFile.iconFormatCode).to.equal(0x5555);\n    expect(gameCubeSaveFile.iconSpeedCode).to.equal(0xAAAF);\n    expect(gameCubeSaveFile.permissionAttributeBitfield).to.equal(GameCubeDirectoryEntry.PERMISSION_ATTRIBUTE_PUBLIC);\n    expect(gameCubeSaveFile.copyCounter).to.equal(1);\n    expect(gameCubeSaveFile.saveStartBlock).to.equal(5);\n    expect(gameCubeSaveFile.saveSizeBlocks).to.equal(4);\n    expect(gameCubeSaveFile.commentStart).to.equal(0);\n    expect(gameCubeSaveFile.inferredCommentEncoding).to.equal('shift-jis');\n    expect(gameCubeSaveFile.comments[0]).to.equal('ソウルキャリバーⅡゲームデータ'); // \"Soul Calibur II Game Data\"\n    expect(gameCubeSaveFile.comments[1]).to.equal(' 2003.04.10 00:34:55');\n    expect(gameCubeSaveFile.maxDriveComments[0]).to.equal('ソウルキャリバーⅡゲームデータ'); // \"Soul Calibur II Game Data\"\n    expect(gameCubeSaveFile.maxDriveComments[1]).to.equal(' 2003.04.10 00:34:55');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(gameCubeSaveFile.rawData, rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Mister/GameboyAdvance.spec.js",
    "content": "import { expect } from 'chai';\nimport MisterGameboyAdvanceSaveData from '@/save-formats/Mister/GameboyAdvance';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/mister/gba';\n\nconst RAW_REGULAR_GAME_FILENAME = `${DIR}/the-legend-of-zelda-the-minish-cap.srm`;\nconst MISTER_REGULAR_GAME_FILENAME = `${DIR}/the-legend-of-zelda-the-minish-cap.sav`;\n\nconst RAW_512B_EEPROM_FILENAME = `${DIR}/Final_Fight_One_Japan-raw.srm`;\nconst RAW_512B_EEPROM_CONVERTED_BACK_FILENAME = `${DIR}/Final_Fight_One_Japan-raw-converted-back.srm`; // We can't automatically truncate the file since we don't know whether it was a 512B save or 8192B\nconst MISTER_512B_EEPROM_FILENAME = `${DIR}/Final_Fight_One_Japan-mister.sav`;\n\nconst RAW_GAME_WITH_RTC_DATA = `${DIR}/pokemon-sapphire-raw.srm`;\nconst MISTER_GAME_WITH_RTC_DATA_FAKE = `${DIR}/pokemon-sapphire-mister-fake-rtc.sav`; // I don't have an example file from a real MiSTer with RTC data, so I created one by hand\nconst MISTER_GAME_WITH_RTC_DATA_MISSING = `${DIR}/pokemon-sapphire-mister-no-rtc.sav`; // The MiSTer can load a save without RTC data in it: the RTC just won't be initialized correctly. We are unable to construct valid RTC data, and we don't know whether a particular game requires RTC anyway. We could add a UI element, but that's more burden for the user\n\ndescribe('MiSTer - Gameboy Advance save format', () => {\n  it('should convert a raw save to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_REGULAR_GAME_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_REGULAR_GAME_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterGameboyAdvanceSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_REGULAR_GAME_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_REGULAR_GAME_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterGameboyAdvanceSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw 512B EEPROM save to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_512B_EEPROM_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_512B_EEPROM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterGameboyAdvanceSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer 512B EEPROM save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_512B_EEPROM_CONVERTED_BACK_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_512B_EEPROM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterGameboyAdvanceSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw save for a game that uses RTC data to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GAME_WITH_RTC_DATA);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_GAME_WITH_RTC_DATA_MISSING);\n\n    const misterGameboyAdvanceSaveData = MisterGameboyAdvanceSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer save with RTC data to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GAME_WITH_RTC_DATA);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_GAME_WITH_RTC_DATA_FAKE);\n\n    const misterGameboyAdvanceSaveData = MisterGameboyAdvanceSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Mister/Genesis.spec.js",
    "content": "import { expect } from 'chai';\nimport MisterGenesisSaveData from '@/save-formats/Mister/Genesis';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/mister/genesis';\n\nconst RAW_PHANTASY_STAR_2_FILENAME = `${DIR}/phantasy-star-ii.18168-raw.srm`;\nconst MISTER_PHANTASY_STAR_2_FILENAME = `${DIR}/phantasy-star-ii.18168-mister.sav`;\n\nconst RAW_RETRODE_FILENAME = `${DIR}/Phantasy_Star_IV_USA-from-retrode.srm`;\nconst MISTER_RETRODE_FILENAME = `${DIR}/Phantasy_Star_IV_USA-from-retrode-to-mister.sav`;\n\nconst RAW_MEGA_SD_FILENAME = `${DIR}/Phantasy Star II (USA, Europe) (Rev A)-from-mega-sd.srm`;\nconst MISTER_MEGA_SD_FILENAME = `${DIR}/Phantasy Star II (USA, Europe) (Rev A)-from-mega-sd.sav`;\n\nconst RAW_ZERO_PADDED_FILENAME = `${DIR}/Phantasy_Star_IV_USA-from-mister-zero-padded-to-raw.srm`;\nconst MISTER_ZERO_PADDED_FILENAME = `${DIR}/Phantasy_Star_IV_USA-from-mister-zero-padded.sav`;\n\nconst RAW_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World raw.srm`;\nconst MISTER_EEPROM_FILENAME = `${DIR}/Wonder Boy in Monster World mister.sav`;\n\ndescribe('MiSTer - Genesis save format', () => {\n  it('should convert a raw Genesis save to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PHANTASY_STAR_2_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_PHANTASY_STAR_2_FILENAME);\n\n    const misterGenesisSaveData = MisterGenesisSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGenesisSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer Genesis save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PHANTASY_STAR_2_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_PHANTASY_STAR_2_FILENAME);\n\n    const misterGenesisSaveData = MisterGenesisSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGenesisSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw Genesis save from a Retrode to the MiSTer format', async () => {\n    // The Retrode byte expands by copying every byte rather than inserting a 0x00 byte\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_RETRODE_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_RETRODE_FILENAME);\n\n    const misterGenesisSaveData = MisterGenesisSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGenesisSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw Genesis save from a Mega SD to the MiSTer format', async () => {\n    // The Mega SD byte expands by inserting a 0xFF byte\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_MEGA_SD_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_MEGA_SD_FILENAME);\n\n    const misterGenesisSaveData = MisterGenesisSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGenesisSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer Genesis padded with zeros save to raw format', async () => {\n    // Although the MiSTer is \"supposed\" to always output 0xFF-padded files, it can also output\n    // a 0x00-padded file (if it was given one in the first place?)\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ZERO_PADDED_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_ZERO_PADDED_FILENAME);\n\n    const misterGenesisSaveData = MisterGenesisSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGenesisSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw EEPROM Genesis save to the MiSTer format', async () => {\n    // The EEPROM saves are not byte expanded\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EEPROM_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_EEPROM_FILENAME);\n\n    const misterGenesisSaveData = MisterGenesisSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGenesisSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a mister EEPROM Genesis save back to raw without byte expanding', async () => {\n    // The EEPROM saves are not byte expanded\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EEPROM_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_EEPROM_FILENAME);\n\n    const misterGenesisSaveData = MisterGenesisSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGenesisSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Mister/N64Cart.spec.js",
    "content": "import { expect } from 'chai';\nimport MisterN64CartSaveData from '@/save-formats/Mister/N64Cart';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/mister/n64';\n\nconst MISTER_512B_EEPROM_FILENAME = `${DIR}/Banjo-Kazooie (USA).eep`;\nconst MISTER_2KB_EEPROM_FILENAME = `${DIR}/Donkey Kong 64 (USA).eep`;\nconst MISTER_SRAM_FILENAME = `${DIR}/Legend of Zelda, The - Ocarina of Time (USA).sra`;\nconst MISTER_FLASH_RAM_FILENAME = `${DIR}/Legend of Zelda, The - Majora's Mask (USA).fla`;\n\ndescribe('MiSTer - N64 cartridge save format', () => {\n  it('should convert a raw 512B EEPROM save to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_512B_EEPROM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64CartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getMisterArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer 512B EEPROM save to raw format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_512B_EEPROM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64CartSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getRawArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw 2KB EEPROM save to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_2KB_EEPROM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64CartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getMisterArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer 2KB EEPROM save to raw format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_2KB_EEPROM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64CartSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getRawArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw SRAM save to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_SRAM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64CartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getMisterArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer SRAM save to raw format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_SRAM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64CartSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getRawArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw Flash RAM save to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_FLASH_RAM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64CartSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getMisterArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer Flash RAM save to raw format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_FLASH_RAM_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64CartSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getRawArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Mister/N64Mempack.spec.js",
    "content": "import { expect } from 'chai';\nimport MisterN64MempackSaveData from '@/save-formats/Mister/N64Mempack';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/mister/n64';\n\nconst MISTER_MEMPACK_FILENAME = `${DIR}/007 - The World Is Not Enough (USA)_1.cpk`;\n\ndescribe('MiSTer - N64 mempack save format', () => {\n  it('should convert a raw mempack save to the MiSTer format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_MEMPACK_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64MempackSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getMisterArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer mempack save to raw format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_MEMPACK_FILENAME);\n\n    const misterGameboyAdvanceSaveData = MisterN64MempackSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterGameboyAdvanceSaveData.getRawArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Mister/SegaCd.spec.js",
    "content": "import { expect } from 'chai';\nimport MisterSegaCdSaveData from '@/save-formats/Mister/SegaCd';\nimport SegaCdUtil from '@/util/SegaCd';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/mister/segacd';\n\nconst MISTER_INTERNAL_ONLY_FILENAME = `${DIR}/Popful Mail (USA) (RE)-mister-internal-only.sav`;\n\nconst RAW_INTERNAL_FILENAME = `${DIR}/Popful Mail (USA) (RE)-raw-internal.brm`;\nconst RAW_RAM_CART_FILENAME = `${DIR}/Popful Mail (USA) (RE)-ram-cart-only.brm`;\n\nconst MISTER_INTERNAL_ONLY_PADDED_FILENAME = `${DIR}/Shining Force CD (USA) (3R)-mister-internal-only-padded.sav`;\nconst RAW_INTERNAL_ONLY_PADDED_FILENAME = `${DIR}/Shining Force CD (USA) (3R)-to-emulator-internal.brm`;\n\nconst COMBINED_MISTER_INTERNAL_AND_RAM_CART_FILENAME = `${DIR}/Popful Mail (USA) Internal plus Cart-mister.sav`;\nconst COMBINED_INTERNAL_OUTPUT_FILENAME = `${DIR}/Popful Mail (USA) Internal plus Cart to-emulator-internal.brm`;\nconst COMBINED_RAM_CART_OUTPUT_FILENAME = `${DIR}/Popful Mail (USA) Internal plus Cart to-emulator-ram-cart.brm`;\n\nconst MISTER_COMBINED_RAM_CART_PLUS_EMPTY_INTERNAL_FILENAME = `${DIR}/Popful Mail (USA) (RE)-raw-cart-only-to-mister.sav`;\nconst MISTER_COMBINED_INTERNAL_PLUS_RAM_CART_FILENAME = `${DIR}/Popful Mail (USA) (RE)-internal-plus-raw-cart-to-mister.sav`;\n\nconst MISTER_EMPTY_FILENAME = `${DIR}/Empty-mister-save.sav`;\n\nconst EMULATOR_RAM_CART_SIZE = 524288; // Genesis Plus uses this size for its virtual RAM cart\n\nconst EMPTY_MISTER_RAM_CART_SAVE = SegaCdUtil.makeEmptySave(MisterSegaCdSaveData.RAM_CART_SIZE);\n\ndescribe('MiSTer - Sega CD save format', () => {\n  it('should create an empty MiSTer file when given no raw files', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_EMPTY_FILENAME);\n\n    const misterSegaCdSaveData = MisterSegaCdSaveData.createFromRawData({ });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaCdSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw internal Sega CD save to the short MiSTer format', async () => {\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_FILENAME);\n\n    const misterSegaCdSaveData = MisterSegaCdSaveData.createFromRawData({ rawInternalSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaCdSaveData.getMisterArrayBuffer(), rawInternalSaveArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw RAM cart Sega CD save to the long MiSTer format', async () => {\n    const rawCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_RAM_CART_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_COMBINED_RAM_CART_PLUS_EMPTY_INTERNAL_FILENAME);\n\n    const misterSegaCdSaveData = MisterSegaCdSaveData.createFromRawData({ rawCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaCdSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw internal save + raw RAM cart Sega CD save to the long MiSTer format', async () => {\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_FILENAME);\n    const rawCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_RAM_CART_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_COMBINED_INTERNAL_PLUS_RAM_CART_FILENAME);\n\n    const misterSegaCdSaveData = MisterSegaCdSaveData.createFromRawData({ rawInternalSaveArrayBuffer, rawCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaCdSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer internal RAM save to raw format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_INTERNAL_ONLY_FILENAME);\n\n    const misterSegaCdSaveData = MisterSegaCdSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaCdSaveData.getRawArrayBuffer(MisterSegaCdSaveData.INTERNAL_MEMORY), misterArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaCdSaveData.getRawArrayBuffer(MisterSegaCdSaveData.RAM_CART), EMPTY_MISTER_RAM_CART_SAVE)).to.equal(true);\n  });\n\n  it('should convert a MiSTer internal RAM save which has been padded out to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_ONLY_PADDED_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_INTERNAL_ONLY_PADDED_FILENAME);\n\n    const misterSegaCdSaveData = MisterSegaCdSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaCdSaveData.getRawArrayBuffer(MisterSegaCdSaveData.INTERNAL_MEMORY), rawArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaCdSaveData.getRawArrayBuffer(MisterSegaCdSaveData.RAM_CART), EMPTY_MISTER_RAM_CART_SAVE)).to.equal(true);\n  });\n\n  it('should parse a MiSTer combined save and convert to emulator files', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_MISTER_INTERNAL_AND_RAM_CART_FILENAME);\n    const emulatorInternalArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_INTERNAL_OUTPUT_FILENAME);\n    const emulatorRamCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_RAM_CART_OUTPUT_FILENAME);\n\n    const misterSegaCdSaveData = MisterSegaCdSaveData.createFromMisterData(misterArrayBuffer);\n\n    const resizedMisterSegaCdSaveData = MisterSegaCdSaveData.createWithNewSize(misterSegaCdSaveData, EMULATOR_RAM_CART_SIZE);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedMisterSegaCdSaveData.getRawArrayBuffer(MisterSegaCdSaveData.INTERNAL_MEMORY), emulatorInternalArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedMisterSegaCdSaveData.getRawArrayBuffer(MisterSegaCdSaveData.RAM_CART), emulatorRamCartArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Mister/SegaSaturn.spec.js",
    "content": "import { expect } from 'chai';\nimport MisterSegaSaturnSaveData from '@/save-formats/Mister/SegaSaturn';\nimport SegaSaturnSaveData from '@/save-formats/SegaSaturn/SegaSaturn';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/mister/segasaturn';\n\nconst MISTER_INTERNAL_ONLY_FILENAME = `${DIR}/Daytona USA - Championship Circuit Edition (USA).sav`;\nconst MISTER_INTERNAL_ONLY_RECREATED_FILENAME = `${DIR}/Daytona USA - Championship Circuit Edition (USA)-recreated.sav`; // Some files we were given from the mister are byte expanded out with 0x00 and some are with 0xFF. This one was done with 0x00, but when we recreate it we use 0xFF\nconst RAW_INTERNAL_ONLY_FILENAME = `${DIR}/Daytona USA - Championship Circuit Edition (USA).bkr`;\n\nconst MISTER_INTERNAL_ONLY_WITH_GARBAGE_FILENAME = `${DIR}/Sega Rally Championship Plus (Japan).sav`;\nconst RAW_INTERNAL_ONLY_WITH_GARBAGE_FILENAME = `${DIR}/Sega Rally Championship Plus (Japan).bkr`;\n\nconst COMBINED_MISTER_INTERNAL_AND_RAM_CART_FILENAME = `${DIR}/Rayman (USA) (R2).sav`;\nconst COMBINED_INTERNAL_FILENAME = `${DIR}/Rayman (USA) (R2)-internal.bkr`;\nconst COMBINED_CART_FILENAME = `${DIR}/Rayman (USA) (R2)-cart-uncompressed.bcr`;\n\nconst COMBINED_CART_COMPRESSED_FILENAME = `${DIR}/Rayman (USA) (R2)-cart.bcr`; // The user will probably provide an emulator file that's compressed, because that's how mednafen outputs it\n\nconst MISTER_COMBINED_CART_PLUS_EMPTY_INTERNAL_FILENAME = `${DIR}/Pretend-mister-save-only-cart.sav`;\n\nconst MISTER_EMPTY_FILENAME = `${DIR}/Empty-mister-save.sav`;\n\nconst EMPTY_CART_SAVE = SegaSaturnSaveData.createEmptySave(SegaSaturnSaveData.CARTRIDGE_BLOCK_SIZE);\n\ndescribe('MiSTer - Sega Saturn save format', () => {\n  it('should create an empty MiSTer file when given no raw files', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_EMPTY_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromRawData({ });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw internal Sega Saturn save to the short MiSTer format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_INTERNAL_ONLY_RECREATED_FILENAME);\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_ONLY_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromRawData({ rawInternalSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw cart Sega Saturn save to the long MiSTer format', async () => {\n    const rawCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_CART_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_COMBINED_CART_PLUS_EMPTY_INTERNAL_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromRawData({ rawCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a compressed raw cart Sega Saturn save to the long MiSTer format', async () => {\n    const rawCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_CART_COMPRESSED_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_COMBINED_CART_PLUS_EMPTY_INTERNAL_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromRawData({ rawCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw internal save + raw cart Sega Saturn save to the long MiSTer format', async () => {\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_INTERNAL_FILENAME);\n    const rawCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_CART_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_MISTER_INTERNAL_AND_RAM_CART_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromRawData({ rawInternalSaveArrayBuffer, rawCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw internal save + raw compressed cart Sega Saturn save to the long MiSTer format', async () => {\n    const rawInternalSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_INTERNAL_FILENAME);\n    const rawCartSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_CART_COMPRESSED_FILENAME);\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_MISTER_INTERNAL_AND_RAM_CART_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromRawData({ rawInternalSaveArrayBuffer, rawCartSaveArrayBuffer });\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getMisterArrayBuffer(), misterArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a MiSTer internal RAM save to raw format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_INTERNAL_ONLY_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_ONLY_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getRawArrayBuffer(MisterSegaSaturnSaveData.INTERNAL_MEMORY), rawArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getRawArrayBuffer(MisterSegaSaturnSaveData.RAM_CART), EMPTY_CART_SAVE)).to.equal(true);\n  });\n\n  it('should convert a MiSTer internal RAM save containing garbage at the beginning to raw format', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MISTER_INTERNAL_ONLY_WITH_GARBAGE_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_INTERNAL_ONLY_WITH_GARBAGE_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getRawArrayBuffer(MisterSegaSaturnSaveData.INTERNAL_MEMORY), rawArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getRawArrayBuffer(MisterSegaSaturnSaveData.RAM_CART), EMPTY_CART_SAVE)).to.equal(true);\n  });\n\n  it('should parse a MiSTer combined save and convert to emulator files', async () => {\n    const misterArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_MISTER_INTERNAL_AND_RAM_CART_FILENAME);\n    const rawInternalArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_INTERNAL_FILENAME);\n    const rawCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMBINED_CART_FILENAME);\n\n    const misterSegaSaturnSaveData = MisterSegaSaturnSaveData.createFromMisterData(misterArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getRawArrayBuffer(MisterSegaSaturnSaveData.INTERNAL_MEMORY), rawInternalArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(misterSegaSaturnSaveData.getRawArrayBuffer(MisterSegaSaturnSaveData.RAM_CART), rawCartArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/N64/DexDrive.spec.js",
    "content": "import { expect } from 'chai';\nimport seedrandom from 'seedrandom';\nimport N64DexDriveSaveData from '@/save-formats/N64/DexDrive';\nimport N64GameSerialCodeUtil from '@/save-formats/N64/Components/GameSerialCodeUtil';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/n64/dexdrive';\n\nconst DEXDRIVE_ONE_FILE_FILENAME = `${DIR}/mario-kart-64.1116.n64`;\nconst RAW_ONE_FILE_FILENAME = `${DIR}/mario-kart-64.1116.mpk`;\nconst RAW_ONE_FILE_NOTE_FILENAME = `${DIR}/mario-kart-64.1116-1`;\n\nconst DEXDRIVE_COMMENT_FILENAME = `${DIR}/perfect-dark.1043.n64`;\nconst RAW_COMMENT_FILENAME = `${DIR}/perfect-dark.1043.mpk`;\nconst RAW_COMMENT_NOTE_FILENAME = `${DIR}/perfect-dark.1043.1116-1`;\n\nconst DEXDRIVE_TWO_FILES_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077.n64`;\nconst RAW_TWO_FILES_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077.mpk`;\nconst RAW_TWO_FILES_NOTE_1_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077-1`;\nconst RAW_TWO_FILES_NOTE_2_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077-2`;\n\nconst DEXDRIVE_TWO_FILES_OUTPUT_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077-output.n64`;\n\nconst DEXDRIVE_05KB_EEP_FILENAME = `${DIR}/super-mario-64.1091.n64`;\nconst RAW_05KB_EEP_FILENAME = `${DIR}/super-mario-64.1091.mpk`;\nconst RAW_05KB_EEP_NOTE_FILENAME = `${DIR}/super-mario-64.1091-1`;\n\nconst DEXDRIVE_05KB_EEP_BLACKBAG_FILENAME = `${DIR}/banjokaz.n64`;\nconst RAW_05KB_EEP_BLACKBAG_FILENAME = `${DIR}/banjokaz.mpk`;\nconst RAW_05KB_EEP_BLACKBAG_NOTE_1_FILENAME = `${DIR}/banjokaz-1`;\nconst RAW_05KB_EEP_BLACKBAG_NOTE_2_FILENAME = `${DIR}/banjokaz-2`;\n\nconst DEXDRIVE_2KB_EEP_FILENAME = `${DIR}/donkey-kong-64.1156.n64`;\nconst RAW_2KB_EEP_FILENAME = `${DIR}/donkey-kong-64.1156.mpk`;\nconst RAW_2KB_EEP_NOTE_FILENAME = `${DIR}/donkey-kong-64.1156-1`;\n\nconst DEXDRIVE_FOUR_FILES_FILENAME = `${DIR}/banjo-kazooie.1141.n64`;\nconst RAW_FOUR_FILES_FILENAME = `${DIR}/banjo-kazooie.1141.mpk`;\nconst RAW_FOUR_FILES_NOTE_1_FILENAME = `${DIR}/banjo-kazooie.1141-1`;\nconst RAW_FOUR_FILES_NOTE_2_FILENAME = `${DIR}/banjo-kazooie.1141-2`;\nconst RAW_FOUR_FILES_NOTE_3_FILENAME = `${DIR}/banjo-kazooie.1141-3`;\nconst RAW_FOUR_FILES_NOTE_4_FILENAME = `${DIR}/banjo-kazooie.1141-4`;\n\nconst DEXDRIVE_SINGLE_PAGE_FILENAME = `${DIR}/ecw-hardcore-revolution.1000.n64`;\nconst RAW_SINGLE_PAGE_FILENAME = `${DIR}/ecw-hardcore-revolution.1000.mpk`;\nconst RAW_SINGLE_PAGE_NOTE_1_FILENAME = `${DIR}/ecw-hardcore-revolution.1000-1`;\n\nconst DEXDRIVE_EMPTY_HEADER_FILENAME = `${DIR}/ecw-hardcore-revolution-empty-header.1000.n64`; // We're reusing the same data, just manually setting the header to be all blank, so the other two files are exactly the same\nconst RAW_EMPTY_HEADER_FILENAME = RAW_SINGLE_PAGE_FILENAME;\nconst RAW_EMPTY_HEADER_NOTE_1_FILENAME = RAW_SINGLE_PAGE_NOTE_1_FILENAME;\n\nconst DEXDRIVE_NO_HEADER_FILENAME = `${DIR}/ecw-hardcore-revolution-no-header.1000.n64`; // We're reusing the same data, just manually deleting the header, so the other two files are exactly the same\nconst RAW_NO_HEADER_FILENAME = RAW_SINGLE_PAGE_FILENAME;\nconst RAW_NO_HEADER_NOTE_1_FILENAME = RAW_SINGLE_PAGE_NOTE_1_FILENAME;\n\nconst DEXDRIVE_CORRUPTED_FILENAME = `${DIR}/Ready 2 Rumble Boxing (U) [!].n64`;\nconst RAW_FIXED_FILENAME = `${DIR}/Ready 2 Rumble Boxing (U) [!]-fixed.mpk`;\nconst RAW_FIXED_NOTE_1_FILENAME = `${DIR}/Ready 2 Rumble Boxing (U) [!]-fixed-1`;\nconst RAW_FIXED_NOTE_2_FILENAME = `${DIR}/Ready 2 Rumble Boxing (U) [!]-fixed-2`;\n\nconst DEXDRIVE_PERIODS_IN_NOTENAME_FILENAME = `${DIR}/san-francisco-rush-extreme-racing.1103.n64`;\nconst RAW_PERIODS_IN_NOTENAME_FILENAME = `${DIR}/san-francisco-rush-extreme-racing.1103.mpk`;\nconst RAW_PERIODS_IN_NOTENAME_NOTE_FILENAME = `${DIR}/san-francisco-rush-extreme-racing.1103-1`;\n\ndescribe('N64 - DexDrive save format', () => {\n  let randomNumberGenerator = null;\n\n  beforeEach(() => {\n    // Replace Math.random() so that the results are predictable\n    // We can't just override the global Math.random() because these tests run concurrently with tests of the\n    // N64 mempack format, which also depends on random numbers. When they execute concurrently, re-seeding\n    // causes unpredictable results\n    randomNumberGenerator = seedrandom('Happy day = when I realized collectathons were no longer a genre');\n  });\n\n  it('should convert a file containing a single save that is 121 pages', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_ONE_FILE_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ONE_FILE_FILENAME);\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ONE_FILE_NOTE_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(121);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('MARIOKART64');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NKTJ');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('01');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('J');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('Japan');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNoteArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing a single save that is 28 pages and has a comment', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_COMMENT_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_COMMENT_FILENAME);\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_COMMENT_NOTE_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(28);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('PERFECT DARK');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('All missions completed on all difficulties, all challenges, most cheats');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NPDE');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('4Y');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNoteArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing two saves that are 27 and 20 pages', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_TWO_FILES_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_FILENAME);\n    const rawNote1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_NOTE_1_FILENAME);\n    const rawNote2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_NOTE_2_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(27);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('T2-\\'');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('G');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NTQE');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('52');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNote1ArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[1].startingPage).to.equal(32);\n    expect(dexDriveSaveData.getSaveFiles()[1].pageNumbers.length).to.equal(20);\n    expect(dexDriveSaveData.getSaveFiles()[1].noteName).to.equal('T2-WAREHOUSE');\n    expect(dexDriveSaveData.getSaveFiles()[1].noteNameExtension).to.equal('P');\n    expect(dexDriveSaveData.getSaveFiles()[1].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[1].gameSerialCode).to.equal('NTQE');\n    expect(dexDriveSaveData.getSaveFiles()[1].publisherCode).to.equal('52');\n    expect(dexDriveSaveData.getSaveFiles()[1].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[1].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[1].rawData, rawNote2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a file containing two saves that are 27 and 20 pages with comments', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_TWO_FILES_OUTPUT_FILENAME);\n    const rawNote1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_NOTE_1_FILENAME);\n    const rawNote2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_NOTE_2_FILENAME);\n\n    const saveFiles = [{\n      noteName: 'T2-\\'',\n      noteNameExtension: 'G',\n      gameSerialCode: 'NTQE',\n      publisherCode: '52',\n      comment: 'Comment 1',\n      rawData: rawNote1ArrayBuffer,\n    },\n    {\n      noteName: 'T2-WAREHOUSE',\n      noteNameExtension: 'P',\n      gameSerialCode: 'NTQE',\n      publisherCode: '52',\n      comment: 'Comment 2',\n      rawData: rawNote2ArrayBuffer,\n    }];\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromSaveFiles(saveFiles, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getArrayBuffer(), dexDriveArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(27);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('T2-\\'');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('G');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('Comment 1');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NTQE');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('52');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNote1ArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[1].startingPage).to.equal(32);\n    expect(dexDriveSaveData.getSaveFiles()[1].pageNumbers.length).to.equal(20);\n    expect(dexDriveSaveData.getSaveFiles()[1].noteName).to.equal('T2-WAREHOUSE');\n    expect(dexDriveSaveData.getSaveFiles()[1].noteNameExtension).to.equal('P');\n    expect(dexDriveSaveData.getSaveFiles()[1].comment).to.equal('Comment 2');\n    expect(dexDriveSaveData.getSaveFiles()[1].gameSerialCode).to.equal('NTQE');\n    expect(dexDriveSaveData.getSaveFiles()[1].publisherCode).to.equal('52');\n    expect(dexDriveSaveData.getSaveFiles()[1].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[1].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[1].rawData, rawNote2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing a 0.5kB EEPROM save', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_05KB_EEP_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_05KB_EEP_FILENAME);\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_05KB_EEP_NOTE_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(2);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('SMSM');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('100% Completed');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_REGION_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('Unknown region');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_MEDIA_CODE);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNoteArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing 2 0.5kB EEPROM saves created with the BlackBag memory manager', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_05KB_EEP_BLACKBAG_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_05KB_EEP_BLACKBAG_FILENAME);\n    const rawNote1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_05KB_EEP_BLACKBAG_NOTE_1_FILENAME);\n    const rawNote2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_05KB_EEP_BLACKBAG_NOTE_2_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(2);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('BK6');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('SRAM');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('Save spot 3 contains a save with 63 jigsaws and 563 notes (time: 13:43:23)');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal(N64GameSerialCodeUtil.BLACKBAG_CART_SAVE_GAME_SERIAL_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal(N64GameSerialCodeUtil.BLACKBAG_CART_SAVE_PUBLISHER_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal(N64GameSerialCodeUtil.BLACKBAG_CART_SAVE_REGION_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('Unknown region');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal(N64GameSerialCodeUtil.BLACKBAG_CART_SAVE_MEDIA_CODE);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNote1ArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[1].startingPage).to.equal(7);\n    expect(dexDriveSaveData.getSaveFiles()[1].pageNumbers.length).to.equal(2);\n    expect(dexDriveSaveData.getSaveFiles()[1].noteName).to.equal('BK7');\n    expect(dexDriveSaveData.getSaveFiles()[1].noteNameExtension).to.equal('SRAM');\n    expect(dexDriveSaveData.getSaveFiles()[1].comment).to.equal('not working?');\n    expect(dexDriveSaveData.getSaveFiles()[1].gameSerialCode).to.equal(N64GameSerialCodeUtil.BLACKBAG_CART_SAVE_GAME_SERIAL_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[1].publisherCode).to.equal(N64GameSerialCodeUtil.BLACKBAG_CART_SAVE_PUBLISHER_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[1].region).to.equal(N64GameSerialCodeUtil.BLACKBAG_CART_SAVE_REGION_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[1].regionName).to.equal('Unknown region');\n    expect(dexDriveSaveData.getSaveFiles()[1].media).to.equal(N64GameSerialCodeUtil.BLACKBAG_CART_SAVE_MEDIA_CODE);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[1].rawData, rawNote2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing a 2kB EEPROM save', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_2KB_EEP_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_2KB_EEP_FILENAME);\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_2KB_EEP_NOTE_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(7);\n    expect(dexDriveSaveData.getSaveFiles()[0].rawData.byteLength).to.equal(2048); // Only 7 pages, but 2048 bytes: that reflects the extra padding we're adding to the end of truncated cart saves\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('DODO');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('101% Compleat, but I did not beat the game yet on this file.  '\n      + 'Some stages have all 500 bananas collected, but others are missing some.  Try to find those if you want, but I\\'ll try to update this file once I get those');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_REGION_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('Unknown region');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_MEDIA_CODE);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNoteArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing 4 notes, two of which are 0.5kB EEPROM saves whose filename have extensions', async () => {\n    // We had a bug where the extensions on the .eep notes in this save weren't read correctly, so adding a test for them specifically\n\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_FOUR_FILES_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FOUR_FILES_FILENAME);\n    const rawNote1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FOUR_FILES_NOTE_1_FILENAME);\n    const rawNote2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FOUR_FILES_NOTE_2_FILENAME);\n    const rawNote3ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FOUR_FILES_NOTE_3_FILENAME);\n    const rawNote4ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FOUR_FILES_NOTE_4_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(4);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(2);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('ARMY MEN SARGE');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NAME');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('5H');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNote1ArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[1].startingPage).to.equal(7);\n    expect(dexDriveSaveData.getSaveFiles()[1].pageNumbers.length).to.equal(12);\n    expect(dexDriveSaveData.getSaveFiles()[1].noteName).to.equal('A BUG\\'S LIFE');\n    expect(dexDriveSaveData.getSaveFiles()[1].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[1].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[1].gameSerialCode).to.equal('NBYE');\n    expect(dexDriveSaveData.getSaveFiles()[1].publisherCode).to.equal('52');\n    expect(dexDriveSaveData.getSaveFiles()[1].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[1].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[1].rawData, rawNote2ArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[2].startingPage).to.equal(19);\n    expect(dexDriveSaveData.getSaveFiles()[2].pageNumbers.length).to.equal(2);\n    expect(dexDriveSaveData.getSaveFiles()[2].noteName).to.equal('SMSM');\n    expect(dexDriveSaveData.getSaveFiles()[2].noteNameExtension).to.equal('1');\n    expect(dexDriveSaveData.getSaveFiles()[2].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[2].gameSerialCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[2].publisherCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[2].region).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_REGION_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[2].regionName).to.equal('Unknown region');\n    expect(dexDriveSaveData.getSaveFiles()[2].media).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_MEDIA_CODE);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[2].rawData, rawNote3ArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[3].startingPage).to.equal(25); // There are 4 unused pages after the previous save. I assume something was deleted\n    expect(dexDriveSaveData.getSaveFiles()[3].pageNumbers.length).to.equal(2);\n    expect(dexDriveSaveData.getSaveFiles()[3].noteName).to.equal('BKBK');\n    expect(dexDriveSaveData.getSaveFiles()[3].noteNameExtension).to.equal('1');\n    expect(dexDriveSaveData.getSaveFiles()[3].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[3].gameSerialCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[3].publisherCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[3].region).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_REGION_CODE);\n    expect(dexDriveSaveData.getSaveFiles()[3].regionName).to.equal('Unknown region');\n    expect(dexDriveSaveData.getSaveFiles()[3].media).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_MEDIA_CODE);\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[3].rawData, rawNote4ArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file with a save consisting of just 1 page', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_SINGLE_PAGE_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_PAGE_FILENAME);\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_PAGE_NOTE_1_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(1);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('ECW');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('All Hidden Wrestlers and Cheats Unlocked');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NWIE');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('51');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNoteArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing an empty header (without the correct magic)', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_EMPTY_HEADER_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EMPTY_HEADER_FILENAME);\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EMPTY_HEADER_NOTE_1_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(1);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('ECW');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NWIE');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('51');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNoteArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing no header (a raw mempack files)', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_NO_HEADER_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_NO_HEADER_FILENAME);\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_NO_HEADER_NOTE_1_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(1);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('ECW');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NWIE');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('51');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNoteArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing corrupted controller pak data to one that is not corrupted', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_CORRUPTED_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FIXED_FILENAME);\n    const rawNote1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FIXED_NOTE_1_FILENAME);\n    const rawNote2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FIXED_NOTE_2_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(9);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('READY2RUMBLE');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NRDP');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('5D');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('P');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('Europe');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNote1ArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[1].startingPage).to.equal(14);\n    expect(dexDriveSaveData.getSaveFiles()[1].pageNumbers.length).to.equal(9);\n    expect(dexDriveSaveData.getSaveFiles()[1].noteName).to.equal('READY2RUMBLE');\n    expect(dexDriveSaveData.getSaveFiles()[1].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[1].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[1].gameSerialCode).to.equal('NRDP');\n    expect(dexDriveSaveData.getSaveFiles()[1].publisherCode).to.equal('5D');\n    expect(dexDriveSaveData.getSaveFiles()[1].region).to.equal('P');\n    expect(dexDriveSaveData.getSaveFiles()[1].regionName).to.equal('Europe');\n    expect(dexDriveSaveData.getSaveFiles()[1].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[1].rawData, rawNote2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file a note with multiple periods in its name', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_PERIODS_IN_NOTENAME_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PERIODS_IN_NOTENAME_FILENAME);\n    const rawNote1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PERIODS_IN_NOTENAME_NOTE_FILENAME);\n\n    const dexDriveSaveData = N64DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getMempack().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(16);\n    expect(dexDriveSaveData.getSaveFiles()[0].noteName).to.equal('S.F. RUSH');\n    expect(dexDriveSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('Every Thing in the game complete, All Keys, and The special Track 7, and all Cars');\n    expect(dexDriveSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NSFE');\n    expect(dexDriveSaveData.getSaveFiles()[0].publisherCode).to.equal('5D');\n    expect(dexDriveSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNote1ArrayBuffer)).to.equal(true);\n\n    // We saw an issue where the N64DexDriveSaveData has the correct note name, but the internal N64MempackSaveData has an incorrect note name\n\n    const mempackSaveData = dexDriveSaveData.getMempack();\n\n    expect(mempackSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(mempackSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(mempackSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(16);\n    expect(mempackSaveData.getSaveFiles()[0].noteName).to.equal('S.F. RUSH');\n    expect(mempackSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(mempackSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NSFE');\n    expect(mempackSaveData.getSaveFiles()[0].publisherCode).to.equal('5D');\n    expect(mempackSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(mempackSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(mempackSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawNote1ArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/N64/IndividualSaveFilename.spec.js",
    "content": "import { expect } from 'chai';\nimport N64IndividualSaveFilename from '@/save-formats/N64/IndividualSaveFilename';\nimport N64GameSerialCodeUtil from '@/save-formats/N64/Components/GameSerialCodeUtil';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/n64/mempack';\n\nconst RAW_ONE_FILE_NOTE_FILENAME = `${DIR}/mario-kart-64.1116-1`;\n\nconst RAW_TWO_FILES_NOTE_1_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077-1`;\n\nconst RAW_PERIODS_IN_NOTENAME_NOTE_FILENAME = `${DIR}/san-francisco-rush-extreme-racing.1103-1`;\nconst RAW_CART_SAVE_WITH_NOTE_NAME_EXTENSION = `${DIR}/banjokaz-1`;\nconst RAW_CART_SAVE_WITHOUT_NOTE_NAME_EXTENSION = `${DIR}/super-mario-64.1091-1`;\n\ndescribe('N64 - Individual save filename', () => {\n  it('should create a new-style filename for a game without a note name extension', async () => {\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ONE_FILE_NOTE_FILENAME);\n\n    const saveFile = {\n      noteName: 'MARIOKART64',\n      noteNameExtension: '',\n      gameSerialCode: 'NKTJ',\n      publisherCode: '01',\n      rawData: rawNoteArrayBuffer,\n    };\n\n    expect(N64IndividualSaveFilename.createFilename(saveFile)).to.equal('RAW-4d4152494f4b4152543634--4e4b544a-3031');\n  });\n\n  it('should parse a new-style filename for a game without a note name extension', async () => {\n    const saveFile = N64IndividualSaveFilename.parseFilename('RAW-4d4152494f4b4152543634--4e4b544a-3031');\n\n    expect(saveFile.noteName).to.equal('MARIOKART64');\n    expect(saveFile.noteNameExtension).to.equal('');\n    expect(saveFile.gameSerialCode).to.equal('NKTJ');\n    expect(saveFile.publisherCode).to.equal('01');\n  });\n\n  it('should parse an old-style filename for a game without a note name extension', async () => {\n    const saveFile = N64IndividualSaveFilename.parseFilename('RAW-4d4152494f4b4152543634-4e4b544a-3031');\n\n    expect(saveFile.noteName).to.equal('MARIOKART64');\n    expect(saveFile.noteNameExtension).to.equal('');\n    expect(saveFile.gameSerialCode).to.equal('NKTJ');\n    expect(saveFile.publisherCode).to.equal('01');\n  });\n\n  it('should create a new-style filename for a game with a note name extension', async () => {\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_NOTE_1_FILENAME);\n\n    const saveFile = {\n      noteName: 'T2-\\'',\n      noteNameExtension: 'G',\n      gameSerialCode: 'NTQE',\n      publisherCode: '52',\n      rawData: rawNoteArrayBuffer,\n    };\n\n    expect(N64IndividualSaveFilename.createFilename(saveFile)).to.equal('RAW-54322d27-47-4e545145-3532');\n  });\n\n  it('should parse a new-style filename for a game with a note name extension', async () => {\n    const saveFile = N64IndividualSaveFilename.parseFilename('RAW-54322d27-47-4e545145-3532');\n\n    expect(saveFile.noteName).to.equal('T2-\\'');\n    expect(saveFile.noteNameExtension).to.equal('G');\n    expect(saveFile.gameSerialCode).to.equal('NTQE');\n    expect(saveFile.publisherCode).to.equal('52');\n  });\n\n  it('should parse an old-style filename for a game with a note name extension', async () => {\n    const saveFile = N64IndividualSaveFilename.parseFilename('RAW-54322d272e47-4e545145-3532');\n\n    expect(saveFile.noteName).to.equal('T2-\\'');\n    expect(saveFile.noteNameExtension).to.equal('G');\n    expect(saveFile.gameSerialCode).to.equal('NTQE');\n    expect(saveFile.publisherCode).to.equal('52');\n  });\n\n  it('should create a new-style filename for a game with periods in its note name', async () => {\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_PERIODS_IN_NOTENAME_NOTE_FILENAME);\n\n    const saveFile = {\n      noteName: 'S.F. RUSH',\n      noteNameExtension: '',\n      gameSerialCode: 'NSFE',\n      publisherCode: '5D',\n      rawData: rawNoteArrayBuffer,\n    };\n\n    expect(N64IndividualSaveFilename.createFilename(saveFile)).to.equal('RAW-532e462e2052555348--4e534645-3544');\n  });\n\n  it('should parse an new-style filename for a game with periods in its note name', async () => {\n    const saveFile = N64IndividualSaveFilename.parseFilename('RAW-532e462e2052555348--4e534645-3544');\n\n    expect(saveFile.noteName).to.equal('S.F. RUSH');\n    expect(saveFile.noteNameExtension).to.equal('');\n    expect(saveFile.gameSerialCode).to.equal('NSFE');\n    expect(saveFile.publisherCode).to.equal('5D');\n  });\n\n  it('should parse an old-style filename for a game with periods in its note name', async () => {\n    const saveFile = N64IndividualSaveFilename.parseFilename('RAW-532e462e2052555348-4e534645-3544');\n\n    expect(saveFile.noteName).to.equal('S.F. RUSH');\n    expect(saveFile.noteNameExtension).to.equal('');\n    expect(saveFile.gameSerialCode).to.equal('NSFE');\n    expect(saveFile.publisherCode).to.equal('5D');\n  });\n\n  it('should create a filename for a cart save with a note name extension in its name', async () => {\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_CART_SAVE_WITH_NOTE_NAME_EXTENSION);\n\n    const saveFile = {\n      noteName: 'BK6',\n      noteNameExtension: 'SRAM',\n      gameSerialCode: N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE,\n      publisherCode: N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE,\n      rawData: rawNoteArrayBuffer,\n    };\n\n    expect(N64IndividualSaveFilename.createFilename(saveFile)).to.equal('BK6.SRAM.eep');\n  });\n\n  it('should parse a filename filename for a cart save with a note name extension in its name', async () => {\n    const saveFile = N64IndividualSaveFilename.parseFilename('BK6.SRAM.eep');\n\n    expect(saveFile.noteName).to.equal('BK6');\n    expect(saveFile.noteNameExtension).to.equal('SRAM');\n    expect(saveFile.gameSerialCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE);\n    expect(saveFile.publisherCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE);\n  });\n\n  it('should create a filename for a cart save without a note name extension in its name', async () => {\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_CART_SAVE_WITHOUT_NOTE_NAME_EXTENSION);\n\n    const saveFile = {\n      noteName: 'SMSM',\n      noteNameExtension: '',\n      gameSerialCode: N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE,\n      publisherCode: N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE,\n      rawData: rawNoteArrayBuffer,\n    };\n\n    expect(N64IndividualSaveFilename.createFilename(saveFile)).to.equal('SMSM.eep');\n  });\n\n  it('should parse a filename filename for a cart save without a note name extension in its name', async () => {\n    const saveFile = N64IndividualSaveFilename.parseFilename('SMSM.eep');\n\n    expect(saveFile.noteName).to.equal('SMSM');\n    expect(saveFile.noteNameExtension).to.equal('');\n    expect(saveFile.gameSerialCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_GAME_SERIAL_CODE);\n    expect(saveFile.publisherCode).to.equal(N64GameSerialCodeUtil.GAMESHARK_ACTIONREPLAY_CART_SAVE_PUBLISHER_CODE);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/N64/Mempack.spec.js",
    "content": "import { expect } from 'chai';\nimport seedrandom from 'seedrandom';\nimport N64MempackSaveData from '@/save-formats/N64/Mempack';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/n64/mempack';\n\nconst RAW_ONE_FILE_FILENAME = `${DIR}/mario-kart-64.1116.mpk`;\nconst RAW_ONE_FILE_NOTE_FILENAME = `${DIR}/mario-kart-64.1116-1`;\n\nconst RAW_TWO_FILES_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077.mpk`;\nconst RAW_TWO_FILES_NOTE_1_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077-1`;\nconst RAW_TWO_FILES_NOTE_2_FILENAME = `${DIR}/tony-hawks-pro-skater-2.1077-2`;\n\ndescribe('N64 - Mempack save format', () => {\n  let randomNumberGenerator = null;\n\n  before(() => {\n    // Replace Math.random() so that the results are predictable\n    // We can't just override the global Math.random() because these tests run concurrently with tests of the\n    // N64 dexdrive format, which also depends on random numbers. When they execute concurrently, re-seeding\n    // causes unpredictable results\n    randomNumberGenerator = seedrandom('Zelda 2D > Zelda 3D');\n  });\n\n  it('should create a file containing a single save that is 121 pages', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ONE_FILE_FILENAME);\n    const rawNoteArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ONE_FILE_NOTE_FILENAME);\n\n    const saveFiles = [{\n      noteName: 'MARIOKART64',\n      noteNameExtension: '',\n      gameSerialCode: 'NKTJ',\n      publisherCode: '01',\n      rawData: rawNoteArrayBuffer,\n    }];\n\n    const mempackSaveData = N64MempackSaveData.createFromSaveFiles(saveFiles, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(mempackSaveData.getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(mempackSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(mempackSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(mempackSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(121);\n    expect(mempackSaveData.getSaveFiles()[0].noteName).to.equal('MARIOKART64');\n    expect(mempackSaveData.getSaveFiles()[0].noteNameExtension).to.equal('');\n    expect(mempackSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NKTJ');\n    expect(mempackSaveData.getSaveFiles()[0].publisherCode).to.equal('01');\n    expect(mempackSaveData.getSaveFiles()[0].region).to.equal('J');\n    expect(mempackSaveData.getSaveFiles()[0].regionName).to.equal('Japan');\n    expect(mempackSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(mempackSaveData.getSaveFiles()[0].rawData, rawNoteArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a file containing two saves that are 27 and 20 pages', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_FILENAME);\n    const rawNote1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_NOTE_1_FILENAME);\n    const rawNote2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_NOTE_2_FILENAME);\n\n    const saveFiles = [{\n      noteName: 'T2-\\'',\n      noteNameExtension: 'G',\n      gameSerialCode: 'NTQE',\n      publisherCode: '52',\n      rawData: rawNote1ArrayBuffer,\n    },\n    {\n      noteName: 'T2-WAREHOUSE',\n      noteNameExtension: 'P',\n      gameSerialCode: 'NTQE',\n      publisherCode: '52',\n      rawData: rawNote2ArrayBuffer,\n    }];\n\n    const mempackSaveData = N64MempackSaveData.createFromSaveFiles(saveFiles, randomNumberGenerator);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(mempackSaveData.getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n\n    expect(mempackSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(mempackSaveData.getSaveFiles()[0].startingPage).to.equal(5);\n    expect(mempackSaveData.getSaveFiles()[0].pageNumbers.length).to.equal(27);\n    expect(mempackSaveData.getSaveFiles()[0].noteName).to.equal('T2-\\'');\n    expect(mempackSaveData.getSaveFiles()[0].noteNameExtension).to.equal('G');\n    expect(mempackSaveData.getSaveFiles()[0].gameSerialCode).to.equal('NTQE');\n    expect(mempackSaveData.getSaveFiles()[0].publisherCode).to.equal('52');\n    expect(mempackSaveData.getSaveFiles()[0].region).to.equal('E');\n    expect(mempackSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(mempackSaveData.getSaveFiles()[0].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(mempackSaveData.getSaveFiles()[0].rawData, rawNote1ArrayBuffer)).to.equal(true);\n\n    expect(mempackSaveData.getSaveFiles()[1].startingPage).to.equal(32);\n    expect(mempackSaveData.getSaveFiles()[1].pageNumbers.length).to.equal(20);\n    expect(mempackSaveData.getSaveFiles()[1].noteName).to.equal('T2-WAREHOUSE');\n    expect(mempackSaveData.getSaveFiles()[1].noteNameExtension).to.equal('P');\n    expect(mempackSaveData.getSaveFiles()[1].gameSerialCode).to.equal('NTQE');\n    expect(mempackSaveData.getSaveFiles()[1].publisherCode).to.equal('52');\n    expect(mempackSaveData.getSaveFiles()[1].region).to.equal('E');\n    expect(mempackSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(mempackSaveData.getSaveFiles()[1].media).to.equal('N');\n    expect(ArrayBufferUtil.arrayBuffersEqual(mempackSaveData.getSaveFiles()[1].rawData, rawNote2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should return an understandable error message if the total size is too big', async () => {\n    const invalidIndividualSaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_TWO_FILES_FILENAME);\n\n    const saveFiles = [\n      {\n        noteName: 'T2-\\'',\n        noteNameExtension: 'G',\n        gameSerialCode: 'NTQE',\n        publisherCode: '52',\n        rawData: invalidIndividualSaveArrayBuffer,\n      },\n    ];\n\n    expect(() => N64MempackSaveData.createFromSaveFiles(saveFiles, randomNumberGenerator)).to.throw(\n      Error,\n      'These files are too large to fit in a single N64 Controller Pak: total size is 32768 bytes, but max is 31488',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/NintendoSwitchOnline/Gameboy.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport Util from '@/util/util';\n\nimport NsoGameboySaveData from '@/save-formats/NintendoSwitchOnline/Gameboy';\n\nconst textEncoder = new TextEncoder();\n\nconst DIR = './tests/data/save-formats/nintendoswitchonline/gb';\n\nconst NSO_GB_FILENAME = `${DIR}/Metroid_II_Return_of_Samus.sram`;\nconst RAW_GB_FILENAME = `${DIR}/Metroid_II_Return_of_Samus.sav`;\nconst GB_ROM_HASH = Util.bufferToArrayBuffer(textEncoder.encode('74a2fad86b9a4c013149b1e214bc4600efb1066d'));\nconst GB_GIT_REVISION_NUMBER = Util.bufferToArrayBuffer(textEncoder.encode('HEAD-v178.0'));\nconst GB_RTC_DATA = null;\n\nconst NSO_GB_NEWER_VERSION_FILENAME = `${DIR}/Kirbys_Dreamland_2.sram`;\nconst RAW_GB_NEWER_VERSION_FILENAME = `${DIR}/Kirbys_Dreamland_2.sav`;\nconst GB_NEWER_VERSION_ROM_HASH = Util.bufferToArrayBuffer(textEncoder.encode('8a2898ffa17e25f43793f40c88421d840d372d3c'));\nconst GB_NEWER_VERSION_GIT_REVISION_NUMBER = Util.bufferToArrayBuffer(textEncoder.encode('HEAD-v184.0'));\nconst GB_NEWER_VERSION_RTC_DATA = null;\n\nconst NSO_GBC_WITH_RTC_DATA_FILENAME = `${DIR}/Pokemon Cristal.sram`;\nconst RAW_GBC_WITH_RTC_DATA_FILENAME = `${DIR}/Pokemon Cristal.sav`;\nconst GBC_WITH_RTC_DATA_ROM_HASH = Util.bufferToArrayBuffer(textEncoder.encode('889a06fc0bb863666865aa69def0adf97945ac2a'));\nconst GBC_WITH_RTC_DATA_GIT_REVISION_NUMBER = Util.bufferToArrayBuffer(textEncoder.encode('HEAD-v203.0'));\nconst GBC_WITH_RTC_DATA_RTC_DATA = Util.bufferToArrayBuffer(\n  new Uint8Array(\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x0A, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00],\n  ),\n);\n\nconst NSO_GBC_WITH_MASTER_GIT_REVISION_FILENAME = `${DIR}/Pokemon_TCG.sram`;\nconst RAW_GBC_WITH_MASTER_GIT_REVISION_FILENAME = `${DIR}/Pokemon_TCG.sav`;\nconst GBC_WITH_MASTER_GIT_REVISION_ROM_HASH = Util.bufferToArrayBuffer(textEncoder.encode('0f8670a583255cff3e5b7ca71b5d7454d928fc48'));\nconst GBC_WITH_MASTER_GIT_REVISION_GIT_REVISION_NUMBER = Util.bufferToArrayBuffer(textEncoder.encode('master-v196.0'));\nconst GBC_WITH_MASTER_GIT_REVISION_RTC_DATA = null;\n\nconst NSO_GBC_WITH_COMMIT_HASH_FILENAME = `${DIR}/Pokemon_TCG_Europe.sram`;\nconst RAW_GBC_WITH_COMMIT_HASH_FILENAME = `${DIR}/Pokemon_TCG_Europe.sav`;\nconst GBC_WITH_COMMIT_HASH_ROM_HASH = Util.bufferToArrayBuffer(textEncoder.encode('dffc15f3063a4c2df84c6361406b41aec1696d3e'));\nconst GBC_WITH_COMMIT_HASH_GIT_REVISION_NUMBER = Util.bufferToArrayBuffer(textEncoder.encode('HEAD-v213.0-1-g59d2e63b'));\nconst GBC_WITH_COMMIT_HASH_RTC_DATA = null;\n\nconst NSO_GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_FILENAME = `${DIR}/Pokemon_-_Crystal_Version.sram`;\nconst RAW_GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_FILENAME = `${DIR}/Pokemon_-_Crystal_Version.sav`;\nconst GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_ROM_HASH = Util.bufferToArrayBuffer(textEncoder.encode('f2f52230b536214ef7c9924f483392993e226cfb'));\nconst GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_GIT_REVISION_NUMBER = Util.bufferToArrayBuffer(textEncoder.encode('master-v199.0'));\nconst GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_RTC_DATA = Util.bufferToArrayBuffer(\n  new Uint8Array(\n    [0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n      0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00],\n  ),\n);\n\nconst NSO_GB_GBC_FILENAME = `${DIR}/Links_Awakening_DX.sram`;\nconst RAW_GB_GBC_FILENAME = `${DIR}/Links_Awakening_DX.sav`;\nconst GB_GBC_ROM_HASH = Util.bufferToArrayBuffer(textEncoder.encode('1c091225688d966928cc74336dbef2e07d12a47c'));\nconst GB_GBC_GIT_REVISION_NUMBER = Util.bufferToArrayBuffer(textEncoder.encode('HEAD-v178.0'));\nconst GB_GBC_RTC_DATA = null;\n\nconst NSO_GBC_FILENAME = `${DIR}/Wario_Land_3.sram`;\nconst RAW_GBC_FILENAME = `${DIR}/Wario_Land_3.sav`;\nconst GBC_ROM_HASH = Util.bufferToArrayBuffer(textEncoder.encode('bb7877309834441fd03adb7fa65738e5d5b2d7ba'));\nconst GBC_GIT_REVISION_NUMBER = Util.bufferToArrayBuffer(textEncoder.encode('HEAD-v178.0'));\nconst GBC_RTC_DATA = null;\n\ndescribe('Nintendo Switch Online - Gameboy', () => {\n  it('should convert a raw GB save to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromRawData(rawArrayBuffer, GB_ROM_HASH, GB_GIT_REVISION_NUMBER, GB_RTC_DATA);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO GB save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRomHashArrayBuffer(), GB_ROM_HASH)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getGitRevisionNumberArrayBuffer(), GB_GIT_REVISION_NUMBER)).to.equal(true);\n    expect(nsoSaveData.getRtcDataArrayBuffer()).to.equal(GB_RTC_DATA);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw newer version GB save to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GB_NEWER_VERSION_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_NEWER_VERSION_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromRawData(rawArrayBuffer, GB_NEWER_VERSION_ROM_HASH, GB_NEWER_VERSION_GIT_REVISION_NUMBER, GB_NEWER_VERSION_RTC_DATA);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO newer version GB save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GB_NEWER_VERSION_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_NEWER_VERSION_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRomHashArrayBuffer(), GB_NEWER_VERSION_ROM_HASH)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getGitRevisionNumberArrayBuffer(), GB_NEWER_VERSION_GIT_REVISION_NUMBER)).to.equal(true);\n    expect(nsoSaveData.getRtcDataArrayBuffer()).to.equal(GB_NEWER_VERSION_RTC_DATA);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a GBC save with RTC data to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_WITH_RTC_DATA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_WITH_RTC_DATA_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromRawData(rawArrayBuffer, GBC_WITH_RTC_DATA_ROM_HASH, GBC_WITH_RTC_DATA_GIT_REVISION_NUMBER, GBC_WITH_RTC_DATA_RTC_DATA);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO GBC save with RTC data to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_WITH_RTC_DATA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_WITH_RTC_DATA_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRomHashArrayBuffer(), GBC_WITH_RTC_DATA_ROM_HASH)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getGitRevisionNumberArrayBuffer(), GBC_WITH_RTC_DATA_GIT_REVISION_NUMBER)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRtcDataArrayBuffer(), GBC_WITH_RTC_DATA_RTC_DATA)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw GBC save with master git revision to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_WITH_MASTER_GIT_REVISION_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_WITH_MASTER_GIT_REVISION_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromRawData(\n      rawArrayBuffer,\n      GBC_WITH_MASTER_GIT_REVISION_ROM_HASH,\n      GBC_WITH_MASTER_GIT_REVISION_GIT_REVISION_NUMBER,\n      GBC_WITH_MASTER_GIT_REVISION_RTC_DATA,\n    );\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO GBC save with master git revision to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_WITH_MASTER_GIT_REVISION_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_WITH_MASTER_GIT_REVISION_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRomHashArrayBuffer(), GBC_WITH_MASTER_GIT_REVISION_ROM_HASH)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getGitRevisionNumberArrayBuffer(), GBC_WITH_MASTER_GIT_REVISION_GIT_REVISION_NUMBER)).to.equal(true);\n    expect(nsoSaveData.getRtcDataArrayBuffer()).to.equal(GBC_WITH_MASTER_GIT_REVISION_RTC_DATA);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw GBC save with a commit hash to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_WITH_COMMIT_HASH_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_WITH_COMMIT_HASH_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromRawData(\n      rawArrayBuffer,\n      GBC_WITH_COMMIT_HASH_ROM_HASH,\n      GBC_WITH_COMMIT_HASH_GIT_REVISION_NUMBER,\n      GBC_WITH_COMMIT_HASH_RTC_DATA,\n    );\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO GBC save with a commit hash to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_WITH_COMMIT_HASH_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_WITH_COMMIT_HASH_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRomHashArrayBuffer(), GBC_WITH_COMMIT_HASH_ROM_HASH)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getGitRevisionNumberArrayBuffer(), GBC_WITH_COMMIT_HASH_GIT_REVISION_NUMBER)).to.equal(true);\n    expect(nsoSaveData.getRtcDataArrayBuffer()).to.equal(GBC_WITH_COMMIT_HASH_RTC_DATA);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw GBC save with master git revision number and RTC data to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromRawData(\n      rawArrayBuffer,\n      GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_ROM_HASH,\n      GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_GIT_REVISION_NUMBER,\n      GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_RTC_DATA,\n    );\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO GBC save with master git revision number and RTC data to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRomHashArrayBuffer(), GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_ROM_HASH)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getGitRevisionNumberArrayBuffer(), GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_GIT_REVISION_NUMBER)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRtcDataArrayBuffer(), GBC_WITH_MASTER_GIT_REVISION_AND_RTC_DATA_RTC_DATA)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw dual compatibility GB/GBC save to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GB_GBC_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_GBC_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromRawData(rawArrayBuffer, GB_GBC_ROM_HASH, GB_GBC_GIT_REVISION_NUMBER, GB_GBC_RTC_DATA);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO dual compatibility GB/GBC save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GB_GBC_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_GBC_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRomHashArrayBuffer(), GB_GBC_ROM_HASH)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getGitRevisionNumberArrayBuffer(), GB_GBC_GIT_REVISION_NUMBER)).to.equal(true);\n    expect(nsoSaveData.getRtcDataArrayBuffer()).to.equal(GB_GBC_RTC_DATA);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw GBC save to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromRawData(rawArrayBuffer, GBC_ROM_HASH, GBC_GIT_REVISION_NUMBER, GBC_RTC_DATA);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO GBC save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_GBC_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_FILENAME);\n\n    const nsoSaveData = NsoGameboySaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRomHashArrayBuffer(), GBC_ROM_HASH)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getGitRevisionNumberArrayBuffer(), GBC_GIT_REVISION_NUMBER)).to.equal(true);\n    expect(nsoSaveData.getRtcDataArrayBuffer()).to.equal(GBC_RTC_DATA);\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/NintendoSwitchOnline/GameboyAdvance.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport NsoGbaSaveData from '@/save-formats/NintendoSwitchOnline/GameboyAdvance';\n\nconst DIR = './tests/data/save-formats/nintendoswitchonline/gba';\n\nconst GBA_FILENAME = `${DIR}/The_Legend_of_Zelda_The_Minish_Cap.sram`;\n\ndescribe('Nintendo Switch Online - GBA', () => {\n  it('should convert a raw GBA save to NSO format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GBA_FILENAME);\n\n    const nsoGbaSaveData = NsoGbaSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoGbaSaveData.getNsoArrayBuffer(), nsoGbaSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a NSO GBA save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GBA_FILENAME);\n\n    const nsoGbaSaveData = NsoGbaSaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoGbaSaveData.getNsoArrayBuffer(), nsoGbaSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/NintendoSwitchOnline/Genesis.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport NsoGenesisSaveData from '@/save-formats/NintendoSwitchOnline/Genesis';\n\nconst DIR = './tests/data/save-formats/nintendoswitchonline/genesis';\n\nconst GENESIS_SRAM_FILENAME = `${DIR}/Phantasy Star 4 SEGA GENESIS.sram`;\nconst RAW_SRAM_FILENAME = `${DIR}/Phantasy Star 4 SEGA GENESIS.sav`;\n\nconst GENESIS_EEPROM_FILENAME = `${DIR}/MegaMan Wily Wars SEGA GENESIS.sram`;\nconst RAW_EEPROM_FILENAME = `${DIR}/MegaMan Wily Wars SEGA GENESIS.sav`;\n\ndescribe('Nintendo Switch Online - Genesis', () => {\n  it('should convert a raw Genesis SRAM save to NSO format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_FILENAME);\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GENESIS_SRAM_FILENAME);\n\n    const nsoGenesisSaveData = NsoGenesisSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoGenesisSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO Genesis SRAM save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_FILENAME);\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GENESIS_SRAM_FILENAME);\n\n    const nsoGenesisSaveData = NsoGenesisSaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoGenesisSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw Genesis EEPROM save to NSO format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EEPROM_FILENAME);\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GENESIS_EEPROM_FILENAME);\n\n    const nsoGenesisSaveData = NsoGenesisSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoGenesisSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO Genesis EEPROM save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EEPROM_FILENAME);\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(GENESIS_EEPROM_FILENAME);\n\n    const nsoGenesisSaveData = NsoGenesisSaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoGenesisSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/NintendoSwitchOnline/N64.spec.js",
    "content": "import { expect } from 'chai';\nimport NsoN64SaveData from '@/save-formats/NintendoSwitchOnline/N64';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/nintendoswitchonline/n64';\n\nconst RAW_2_KILOBIT_EEPROM_FILENAME = `${DIR}/Mario 64 N64.sram`;\nconst RAW_16_KILOBIT_EEPROM_FILENAME = `${DIR}/Mario Tennis N64.sram`;\n\nconst RAW_SRAM_FILENAME = `${DIR}/F-Zero N64.sra`;\nconst NSO_SRAM_FILENAME = `${DIR}/F-Zero N64.sram`;\n\nconst RAW_FLASHRAM_FILENAME = `${DIR}/Majoras Mask N64.fla`;\nconst NSO_FLASHRAM_FILENAME = `${DIR}/Majoras Mask N64.sram`;\n\n// Note that we also have a save for Operation Winback in the above directory. That game uses the Controller Pak\n// to save, which isn't emulated by Nintendo Switch Online. Keeping the resultant save here (which just contains\n// the magic \"BLANKSRAM\") for documentation purposes.\n\ndescribe('Nintendo Switch Online - N64', () => {\n  it('should convert a raw 2kb EEPROM N64 save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_2_KILOBIT_EEPROM_FILENAME);\n\n    const nsoN64SaveData = NsoN64SaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoN64SaveData.getNsoArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a flash cart 2kb EEPROM N64 save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_2_KILOBIT_EEPROM_FILENAME);\n\n    const nsoN64SaveData = NsoN64SaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoN64SaveData.getRawArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw 16kb EEPROM N64 save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_16_KILOBIT_EEPROM_FILENAME);\n\n    const nsoN64SaveData = NsoN64SaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoN64SaveData.getNsoArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a flash cart 16kb EEPROM N64 save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_16_KILOBIT_EEPROM_FILENAME);\n\n    const nsoN64SaveData = NsoN64SaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoN64SaveData.getRawArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw SRAM N64 save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_FILENAME);\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_SRAM_FILENAME);\n\n    const nsoN64SaveData = NsoN64SaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoN64SaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a flash cart SRAM N64 save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_FILENAME);\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_SRAM_FILENAME);\n\n    const nsoN64SaveData = NsoN64SaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoN64SaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw FlashRAM N64 save to flash cart format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASHRAM_FILENAME);\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_FLASHRAM_FILENAME);\n\n    const nsoN64SaveData = NsoN64SaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoN64SaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a flash cart FlashRAM N64 save to raw format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASHRAM_FILENAME);\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_FLASHRAM_FILENAME);\n\n    const nsoN64SaveData = NsoN64SaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoN64SaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/NintendoSwitchOnline/Nes.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport NsoNesSaveData from '@/save-formats/NintendoSwitchOnline/Nes';\n\nconst DIR = './tests/data/save-formats/nintendoswitchonline/nes';\n\nconst NSO_FILENAME = `${DIR}/Legend_of_Zelda_The_USA_Rev_1.sram`;\nconst RAW_FILENAME = `${DIR}/Zelda-converted.srm`;\n\ndescribe('Nintendo Switch Online - NES', () => {\n  it('should convert a raw NES save to NSO format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const nsoSaveData = NsoNesSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getNsoArrayBuffer(), nsoArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a NSO NES save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NSO_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const nsoSaveData = NsoNesSaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/NintendoSwitchOnline/Snes.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport NsoSnesSaveData from '@/save-formats/NintendoSwitchOnline/Snes';\n\nconst DIR = './tests/data/save-formats/nintendoswitchonline/snes';\n\nconst SNES_FILENAME = `${DIR}/Super Mario World SNES.sram`;\n\ndescribe('Nintendo Switch Online - SNES', () => {\n  it('should convert a raw SNES save to NSO format', async () => {\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SNES_FILENAME);\n\n    const nsoSnesSaveData = NsoSnesSaveData.createFromRawData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSnesSaveData.getNsoArrayBuffer(), nsoSnesSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n\n  it('should convert a NSO SNES save to raw format', async () => {\n    const nsoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SNES_FILENAME);\n\n    const nsoSnesSaveData = NsoSnesSaveData.createFromNsoData(nsoArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(nsoSnesSaveData.getNsoArrayBuffer(), nsoSnesSaveData.getRawArrayBuffer())).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/OnlineEmulators/Emulators/Gambatte.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GambatteSaveStateData from '@/save-formats/OnlineEmulators/Emulators/Gambatte';\n\nconst DIR = './tests/data/save-formats/online-emulators/retrogames.onl/gb';\n\n// We have some multiples here to test that SRAM of different sizes, and on different machines (GB vs GBC vs dual compatibility games)\n// all have the SRAM at the same spot in the save state\n\nconst EMULATOR_WRONG_SIZE_SAVE_STATE_FILE = `${DIR}/wrong-size.state`;\nconst EMULATOR_INVALID_FILE_SAVE_STATE_FILE = `${DIR}/invalid-file.state`;\n\nconst EMULATOR_GB_512B_FILENAME = `${DIR}/final-fantasy-legend-gboy.state`;\nconst RAW_GB_512B_FILENAME = `${DIR}/final-fantasy-legend-gboy.sav`;\n\nconst EMULATOR_GB_32KB_FILENAME = `${DIR}/pokemon-yellow.state`;\nconst RAW_GB_32KB_FILENAME = `${DIR}/pokemon-yellow.sav`;\n\nconst EMULATOR_GB_GBC_32KB_FILENAME = `${DIR}/legend-zelda-link-awakening-dx.state`;\nconst RAW_GB_GBC_32KB_FILENAME = `${DIR}/legend-zelda-link-awakening-dx.sav`;\n\nconst EMULATOR_GB_GBC_32KB_2_FILENAME = `${DIR}/wario-land-2-gbcolor.state`; // There's not a ton of dual-compatibility games, and these 2 happen to have the same save size\nconst RAW_GB_GBC_32KB_2_FILENAME = `${DIR}/wario-land-2-gbcolor.sav`;\n\nconst EMULATOR_GBC_8KB_FILENAME = `${DIR}/zelda-oracle-sesion.state`;\nconst RAW_GBC_8KB_FILENAME = `${DIR}/zelda-oracle-sesion.sav`;\n\nconst EMULATOR_GBC_32KB_FILENAME = `${DIR}/pokemon-crystal.state`;\nconst RAW_GBC_32KB_FILENAME = `${DIR}/pokemon-crystal.sav`;\n\ndescribe('OnlineEmulators - Gambatte', () => {\n  it('should convert an emulator save state containing a 512B GB save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_512B_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_512B_FILENAME);\n\n    const emulatorSaveStateData = GambatteSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 32kB GB save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_32KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_32KB_FILENAME);\n\n    const emulatorSaveStateData = GambatteSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 32kB GB/GBC save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_GBC_32KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_GBC_32KB_FILENAME);\n\n    const emulatorSaveStateData = GambatteSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert another emulator save state containing a 32kB GB/GBC save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_GBC_32KB_2_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_GBC_32KB_2_FILENAME);\n\n    const emulatorSaveStateData = GambatteSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 8kB GBC save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GBC_8KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_8KB_FILENAME);\n\n    const emulatorSaveStateData = GambatteSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 32kB GBC save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GBC_32KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_32KB_FILENAME);\n\n    const emulatorSaveStateData = GambatteSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly reject a file that is too short', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_WRONG_SIZE_SAVE_STATE_FILE);\n\n    expect(() => GambatteSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer)).to.throw(\n      Error,\n      'This does not appear to be an Gambatte save state file: file is too short',\n    );\n  });\n\n  it('should correctly reject a file missing the required magic', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_INVALID_FILE_SAVE_STATE_FILE);\n\n    expect(() => GambatteSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer)).to.throw(\n      Error,\n      'Save appears corrupted: found \\'\\x00\\x00\\x00\\x00\\' instead of \\'sram\\'',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/OnlineEmulators/Emulators/Gb.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport GbSaveStateData from '@/save-formats/OnlineEmulators/Emulators/Gb';\n\nconst DIR = './tests/data/save-formats/online-emulators/arcadespot.com/gb';\n\n// We have some multiples here to test that SRAM of different sizes, and on different machines (GB vs GBC vs dual compatibility games)\n// all have the SRAM at the same spot in the save state\n\nconst EMULATOR_INVALID_SAVE_STATE_FILE = `${DIR}/invalid-save-state.save`;\n\nconst EMULATOR_GB_512B_FILENAME = `${DIR}/final-fantasy-legend.save`;\nconst RAW_GB_512B_FILENAME = `${DIR}/final-fantasy-legend.sav`;\n\nconst EMULATOR_GB_8KB_FILENAME = `${DIR}/legend-of-zelda-the-links-awakening.save`;\nconst RAW_GB_8KB_FILENAME = `${DIR}/legend-of-zelda-the-links-awakening.sav`;\n\nconst EMULATOR_GB_32KB_FILENAME = `${DIR}/pokemon-yellow.save`;\nconst RAW_GB_32KB_FILENAME = `${DIR}/pokemon-yellow.sav`;\n\nconst EMULATOR_GB_GBC_32KB_FILENAME = `${DIR}/the-legend-of-zelda-links-awakening-dx.save`;\nconst RAW_GB_GBC_32KB_FILENAME = `${DIR}/the-legend-of-zelda-links-awakening-dx.sav`;\n\nconst EMULATOR_GB_GBC_32KB_2_FILENAME = `${DIR}/wario-land-2.save`; // There's not a ton of dual-compatibility games, and these 2 happen to have the same save size\nconst RAW_GB_GBC_32KB_2_FILENAME = `${DIR}/wario-land-2.sav`;\n\nconst EMULATOR_GBC_8KB_FILENAME = `${DIR}/the-legend-of-zelda-oracle-of-seasons.save`;\nconst RAW_GBC_8KB_FILENAME = `${DIR}/the-legend-of-zelda-oracle-of-seasons.sav`;\n\nconst EMULATOR_GBC_32KB_FILENAME = `${DIR}/pokemon-crystal.save`;\nconst RAW_GBC_32KB_FILENAME = `${DIR}/pokemon-crystal.sav`;\n\ndescribe('OnlineEmulators - GB', () => {\n  it('should convert an emulator save state containing a 512B GB save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_512B_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_512B_FILENAME);\n\n    const emulatorSaveStateData = GbSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 512);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 8kB GB save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_8KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_8KB_FILENAME);\n\n    const emulatorSaveStateData = GbSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 8192);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 32kB GB save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_32KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_32KB_FILENAME);\n\n    const emulatorSaveStateData = GbSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 32768);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 32kB GB/GBC save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_GBC_32KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_GBC_32KB_FILENAME);\n\n    const emulatorSaveStateData = GbSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 32768);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert another emulator save state containing a 32kB GB/GBC save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GB_GBC_32KB_2_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GB_GBC_32KB_2_FILENAME);\n\n    const emulatorSaveStateData = GbSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 32768);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 8kB GBC save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GBC_8KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_8KB_FILENAME);\n\n    const emulatorSaveStateData = GbSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 8192);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 32kB GBC save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_GBC_32KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GBC_32KB_FILENAME);\n\n    const emulatorSaveStateData = GbSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 32768);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly reject a file that is too short', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_INVALID_SAVE_STATE_FILE);\n\n    expect(() => GbSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 512)).to.throw(\n      Error,\n      'This does not appear to be a Gameboy save state file',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/OnlineEmulators/Emulators/Snes9x.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport Snes9xSaveStateData from '@/save-formats/OnlineEmulators/Emulators/Snes9x';\n\nconst DIR = './tests/data/save-formats/online-emulators/arcadespot.com/snes';\n\nconst EMULATOR_FILENAME = `${DIR}/Legend-of-Zelda-The-A-Link-to-the-Past-U-.save`;\nconst RAW_FILENAME = `${DIR}/Legend-of-Zelda-The-A-Link-to-the-Past-U-.sav`;\n\ndescribe('OnlineEmulators - SNES - Snes9x', () => {\n  it('should convert an emulator save state to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const emulatorSaveStateData = Snes9xSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(emulatorSaveStateData.getRawArrayBuffer().byteLength).to.equal(131072); // This is the value specified in the save state\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/OnlineEmulators/Emulators/VBA-Next.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport VbaNextSaveStateData from '@/save-formats/OnlineEmulators/Emulators/VBA-Next';\n\nconst DIR = './tests/data/save-formats/online-emulators/arcadespot.com/gba';\n\nconst EMULATOR_INVALID_SAVE_STATE_FILE = `${DIR}/invalid-save-state.save`;\n\n// We have some multiples here because it can be tricky to find the in-game save within a save state file:\n// that file also contains the system's memory which might also contain a copy of the in-game save.\n// So we have a couple of examples of most of the save types to help make sure we're consistently finding the right\n// offsets in each save state file.\n\nconst EMULATOR_EEPROM_512B_FILENAME = `${DIR}/donkey-kong-country-3.save`;\nconst RAW_EEPROM_512B_FILENAME = `${DIR}/donkey-kong-country-3.sav`;\n\nconst EMULATOR_EEPROM_8KB_FILENAME = `${DIR}/the-legend-of-zelda-the-minish-cap.save`;\nconst RAW_EEPROM_8KB_FILENAME = `${DIR}/the-legend-of-zelda-the-minish-cap.sav`;\n\nconst EMULATOR_SRAM_32KB_FILENAME_1 = `${DIR}/metroid-zero-mission.save`;\nconst RAW_SRAM_32KB_FILENAME_1 = `${DIR}/metroid-zero-mission.sav`;\n\nconst EMULATOR_SRAM_32KB_FILENAME_2 = `${DIR}/metroid-fusion.save`;\nconst RAW_SRAM_32KB_FILENAME_2 = `${DIR}/metroid-fusion.sav`;\n\nconst EMULATOR_FLASH_RAM_64KB_FILENAME_1 = `${DIR}/golden-sun.save`;\nconst RAW_FLASH_RAM_64KB_FILENAME_1 = `${DIR}/golden-sun.sav`;\n\nconst EMULATOR_FLASH_RAM_64KB_FILENAME_2 = `${DIR}/advance-wars.save`;\nconst RAW_FLASH_RAM_64KB_FILENAME_2 = `${DIR}/advance-wars.sav`;\n\nconst EMULATOR_FLASH_RAM_128KB_FILENAME_1 = `${DIR}/pokemon-sapphire.save`;\nconst RAW_FLASH_RAM_128KB_FILENAME_1 = `${DIR}/pokemon-sapphire.sav`;\n\nconst EMULATOR_FLASH_RAM_128KB_FILENAME_2 = `${DIR}/super-mario-advance-4.save`;\nconst RAW_FLASH_RAM_128KB_FILENAME_2 = `${DIR}/super-mario-advance-4.sav`;\n\ndescribe('OnlineEmulators - GBA - VBA-Next', () => {\n  it('should convert an emulator save state containing a 512B EEPROM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_EEPROM_512B_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EEPROM_512B_FILENAME);\n\n    const emulatorSaveStateData = VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 512);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 8kB EEPROM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_EEPROM_8KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EEPROM_8KB_FILENAME);\n\n    const emulatorSaveStateData = VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 8192);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 32kB SRAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SRAM_32KB_FILENAME_1);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_32KB_FILENAME_1);\n\n    const emulatorSaveStateData = VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 32768);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a second emulator save state containing a 32kB SRAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SRAM_32KB_FILENAME_2);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_32KB_FILENAME_2);\n\n    const emulatorSaveStateData = VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 32768);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 64kB Flash RAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FLASH_RAM_64KB_FILENAME_1);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASH_RAM_64KB_FILENAME_1);\n\n    const emulatorSaveStateData = VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 65536);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a second emulator save state containing a 64kB Flash RAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FLASH_RAM_64KB_FILENAME_2);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASH_RAM_64KB_FILENAME_2);\n\n    const emulatorSaveStateData = VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 65536);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 128kB Flash RAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FLASH_RAM_128KB_FILENAME_1);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASH_RAM_128KB_FILENAME_1);\n\n    const emulatorSaveStateData = VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 131072);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a second emulator save state containing a 128kB Flash RAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FLASH_RAM_128KB_FILENAME_2);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASH_RAM_128KB_FILENAME_2);\n\n    const emulatorSaveStateData = VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 131072);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly reject an invalid save size', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_EEPROM_512B_FILENAME);\n\n    expect(() => VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 1234)).to.throw(\n      Error,\n      '1234 is not a valid save size for a GBA game',\n    );\n  });\n\n  it('should correctly reject a file that is too short', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_INVALID_SAVE_STATE_FILE);\n\n    expect(() => VbaNextSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer, 512)).to.throw(\n      Error,\n      'This does not appear to be a VBA-Next save state file',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/OnlineEmulators/Emulators/mGba.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport MGbaSaveStateData from '@/save-formats/OnlineEmulators/Emulators/mGba';\n\nconst DIR = './tests/data/save-formats/online-emulators/retrogames.onl/gba';\n\n/*\nconst EMULATOR_INVALID_SAVE_STATE_FILE = `${DIR}/invalid-save-state.save`;\n*/\n\n// We have some multiples here because it can be tricky to find the in-game save within a save state file:\n// that file also contains the system's memory which might also contain a copy of the in-game save.\n// So we have a couple of examples of most of the save types to help make sure we're consistently finding the right\n// offsets in each save state file.\n\nconst EMULATOR_EEPROM_512B_FILENAME = `${DIR}/baldurs-gate.state`;\nconst RAW_EEPROM_512B_FILENAME = `${DIR}/baldurs-gate.sav`;\n\nconst EMULATOR_EEPROM_8KB_FILENAME = `${DIR}/zelda-minish-cap.state`;\nconst RAW_EEPROM_8KB_FILENAME = `${DIR}/zelda-minish-cap.sav`;\n\nconst EMULATOR_SRAM_32KB_FILENAME_1 = `${DIR}/metroid-zero-mission.state`;\nconst RAW_SRAM_32KB_FILENAME_1 = `${DIR}/metroid-zero-mission.sav`;\n\nconst EMULATOR_SRAM_32KB_FILENAME_2 = `${DIR}/metroid-fusion.state`;\nconst RAW_SRAM_32KB_FILENAME_2 = `${DIR}/metroid-fusion.sav`;\n\nconst EMULATOR_FLASH_RAM_64KB_FILENAME_1 = `${DIR}/golden-sun-gmba.state`;\nconst RAW_FLASH_RAM_64KB_FILENAME_1 = `${DIR}/golden-sun-gmba.sav`;\n\nconst EMULATOR_FLASH_RAM_64KB_FILENAME_2 = `${DIR}/advance-wars-gmba.state`;\nconst RAW_FLASH_RAM_64KB_FILENAME_2 = `${DIR}/advance-wars-gmba.sav`;\n\nconst EMULATOR_FLASH_RAM_128KB_FILENAME_1 = `${DIR}/pokemon-sapphire.state`;\nconst RAW_FLASH_RAM_128KB_FILENAME_1 = `${DIR}/pokemon-sapphire.sav`;\n\nconst EMULATOR_FLASH_RAM_128KB_FILENAME_2 = `${DIR}/super-mario-advance-4.state`;\nconst RAW_FLASH_RAM_128KB_FILENAME_2 = `${DIR}/super-mario-advance-4.sav`;\n\nconst EMULATOR_WRONG_SIZE_FILENAME = `${DIR}/wrong-size.state`;\nconst EMULATOR_INVALID_SAVE_STATE_FILE = `${DIR}/invalid-file.state`;\n\ndescribe('OnlineEmulators - GBA - mGBA', () => {\n  it('should convert an emulator save state containing a 512B EEPROM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_EEPROM_512B_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EEPROM_512B_FILENAME);\n\n    const emulatorSaveStateData = MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 8kB EEPROM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_EEPROM_8KB_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EEPROM_8KB_FILENAME);\n\n    const emulatorSaveStateData = MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 32kB SRAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SRAM_32KB_FILENAME_1);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_32KB_FILENAME_1);\n\n    const emulatorSaveStateData = MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a second emulator save state containing a 32kB SRAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SRAM_32KB_FILENAME_2);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SRAM_32KB_FILENAME_2);\n\n    const emulatorSaveStateData = MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 64kB Flash RAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FLASH_RAM_64KB_FILENAME_1);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASH_RAM_64KB_FILENAME_1);\n\n    const emulatorSaveStateData = MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a second emulator save state containing a 64kB Flash RAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FLASH_RAM_64KB_FILENAME_2);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASH_RAM_64KB_FILENAME_2);\n\n    const emulatorSaveStateData = MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an emulator save state containing a 128kB Flash RAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FLASH_RAM_128KB_FILENAME_1);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASH_RAM_128KB_FILENAME_1);\n\n    const emulatorSaveStateData = MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a second emulator save state containing a 128kB Flash RAM save to raw format', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_FLASH_RAM_128KB_FILENAME_2);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FLASH_RAM_128KB_FILENAME_2);\n\n    const emulatorSaveStateData = MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly reject an invalid save size', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_WRONG_SIZE_FILENAME);\n\n    expect(() => MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer)).to.throw(\n      Error,\n      'This does not appear to be an mGBA save state file: 305419896 is not a valid GBA save file size',\n    );\n  });\n\n  it('should correctly reject a file that is too short', async () => {\n    const emulatorSaveStateArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_INVALID_SAVE_STATE_FILE);\n\n    expect(() => MGbaSaveStateData.createFromSaveStateData(emulatorSaveStateArrayBuffer)).to.throw(\n      Error,\n      'This does not appear to be an mGBA save state file: file is too short',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/OnlineEmulators/OnlineEmulatorWrapper.spec.js",
    "content": "import { expect } from 'chai';\nimport Util from '@/util/util';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport OnlineEmulatorWrapper from '@/save-formats/OnlineEmulators/OnlineEmulatorWrapper';\n\nconst TIMEOUT_MS = 10000;\n\nconst MULTIPLE_SAVE_DIR = './tests/data/save-formats/online-emulators/myemulator.online';\nconst SINGLE_SAVE_DIR = './tests/data/save-formats/online-emulators/arcadespot.com';\nconst SINGLE_SAVE_ALTERNATE_FORMAT_DIR = './tests/data/save-formats/online-emulators/retrogames.onl';\n\nconst MULTIPLE_SAVE_SNES_DIR = `${MULTIPLE_SAVE_DIR}/snes`;\nconst MULTIPLE_SAVE_GBA_DIR = `${MULTIPLE_SAVE_DIR}/gba`;\n\nconst SINGLE_SAVE_SNES_DIR = `${SINGLE_SAVE_DIR}/snes`;\nconst SINGLE_SAVE_GBA_DIR = `${SINGLE_SAVE_DIR}/gba`;\nconst SINGLE_SAVE_ALTERNATE_FORMAT_GBA_DIR = `${SINGLE_SAVE_ALTERNATE_FORMAT_DIR}/gba`;\nconst SINGLE_SAVE_ALTERNATE_FORMAT_GB_DIR = `${SINGLE_SAVE_ALTERNATE_FORMAT_DIR}/gb`;\n\nconst EMULATOR_MULTIPLE_SAVE_SNES_FILENAME = `${MULTIPLE_SAVE_SNES_DIR}/sneszelda1.ggz`;\nconst RAW_MULTIPLE_SAVE_SNES_FILENAME = `${MULTIPLE_SAVE_SNES_DIR}/sneszelda1.sav`;\n\nconst EMULATOR_MULTIPLE_SAVE_GBA_FILENAME = `${MULTIPLE_SAVE_GBA_DIR}/gbazelda.ggz`;\nconst RAW_MULTIPLE_SAVE_GBA_FILENAMES = [\n  `${MULTIPLE_SAVE_GBA_DIR}/gbazelda-0.sav`,\n  `${MULTIPLE_SAVE_GBA_DIR}/gbazelda-1.sav`,\n  `${MULTIPLE_SAVE_GBA_DIR}/gbazelda-2.sav`,\n  `${MULTIPLE_SAVE_GBA_DIR}/gbazelda-3.sav`,\n];\n\nconst EMULATOR_SINGLE_SAVE_SNES_FILENAME = `${SINGLE_SAVE_SNES_DIR}/Legend-of-Zelda-The-A-Link-to-the-Past-U-.save`;\nconst RAW_SINGLE_SAVE_SNES_FILENAME = `${SINGLE_SAVE_SNES_DIR}/Legend-of-Zelda-The-A-Link-to-the-Past-U-.sav`;\n\nconst EMULATOR_SINGLE_SAVE_GBA_FILENAME = `${SINGLE_SAVE_GBA_DIR}/the-legend-of-zelda-the-minish-cap.save`;\nconst RAW_SINGLE_SAVE_GBA_FILENAME = `${SINGLE_SAVE_GBA_DIR}/the-legend-of-zelda-the-minish-cap.sav`;\n\nconst EMULATOR_SINGLE_SAVE_GBA_ALTERNATE_FORMAT_FILENAME = `${SINGLE_SAVE_ALTERNATE_FORMAT_GBA_DIR}/zelda-minish-cap.state`;\nconst RAW_SINGLE_SAVE_GBA_ALTERNATE_FORMAT_FILENAME = `${SINGLE_SAVE_ALTERNATE_FORMAT_GBA_DIR}/zelda-minish-cap.sav`;\n\nconst EMULATOR_SINGLE_SAVE_GB_ALTERNATE_FORMAT_FILENAME = `${SINGLE_SAVE_ALTERNATE_FORMAT_GB_DIR}/legend-zelda-link-awakening-dx.state`;\nconst RAW_SINGLE_SAVE_GB_ALTERNATE_FORMAT_FILENAME = `${SINGLE_SAVE_ALTERNATE_FORMAT_GB_DIR}/legend-zelda-link-awakening-dx.sav`;\n\ndescribe('OnlineEmulators - Wrapper', function () { // eslint-disable-line func-names, no-unused-expressions\n  this.timeout(TIMEOUT_MS); // Can't use arrow function above if referencing 'this' here\n\n  it('should convert an online emulator file containing multiple SNES save states to raw format', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_MULTIPLE_SAVE_SNES_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_MULTIPLE_SAVE_SNES_FILENAME);\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_MULTIPLE_SAVE_SNES_FILENAME), 'snes');\n\n    expect(onlineEmulatorWrapper.getFiles().length).to.equal(1);\n\n    expect(onlineEmulatorWrapper.getFiles()[0].name).to.equal('sneszelda12`Jan | 19 | 12:04 | 2024.snes');\n    expect(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer().byteLength).to.equal(131072); // This is the value specified in the save state\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an online emulator file containing multiple GBA save states to raw format', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_MULTIPLE_SAVE_GBA_FILENAME);\n    const rawArrayBuffers = await Promise.all(RAW_MULTIPLE_SAVE_GBA_FILENAMES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_MULTIPLE_SAVE_GBA_FILENAME), 'gba', 8192);\n\n    expect(onlineEmulatorWrapper.getFiles().length).to.equal(4);\n\n    expect(onlineEmulatorWrapper.getFiles()[0].name).to.equal('gbazelda1`Jan | 19 | 10:59 | 2024.gba');\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffers[0])).to.equal(true);\n\n    expect(onlineEmulatorWrapper.getFiles()[1].name).to.equal('gbazelda2`Jan | 19 | 10:59 | 2024.gba');\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[1].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffers[1])).to.equal(true);\n\n    expect(onlineEmulatorWrapper.getFiles()[2].name).to.equal('gbazelda3`Jan | 19 | 10:59 | 2024.gba');\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[2].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffers[2])).to.equal(true);\n\n    expect(onlineEmulatorWrapper.getFiles()[3].name).to.equal('gbazelda4`Jan | 19 | 10:59 | 2024.gba');\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[3].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffers[3])).to.equal(true);\n  });\n\n  it('should convert an online emulator file containing a single SNES save states to raw format', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SINGLE_SAVE_SNES_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_SAVE_SNES_FILENAME);\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_SINGLE_SAVE_SNES_FILENAME), 'snes');\n\n    expect(onlineEmulatorWrapper.getFiles().length).to.equal(1);\n\n    expect(onlineEmulatorWrapper.getFiles()[0].name).to.equal(Util.getFilename(EMULATOR_SINGLE_SAVE_SNES_FILENAME));\n    expect(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer().byteLength).to.equal(131072); // This is the value specified in the save state\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an online emulator file containing a single GBA save states to raw format', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SINGLE_SAVE_GBA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_SAVE_GBA_FILENAME);\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_SINGLE_SAVE_GBA_FILENAME), 'gba', 8192);\n\n    expect(onlineEmulatorWrapper.getFiles().length).to.equal(1);\n\n    expect(onlineEmulatorWrapper.getFiles()[0].name).to.equal(Util.getFilename(EMULATOR_SINGLE_SAVE_GBA_FILENAME));\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an online emulator file containing a single GBA save state to raw format', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SINGLE_SAVE_GBA_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_SAVE_GBA_FILENAME);\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_SINGLE_SAVE_GBA_FILENAME), 'gba', 8192);\n\n    expect(onlineEmulatorWrapper.getFiles().length).to.equal(1);\n\n    expect(onlineEmulatorWrapper.getFiles()[0].name).to.equal(Util.getFilename(EMULATOR_SINGLE_SAVE_GBA_FILENAME));\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an online emulator file containing a single GBA save state in alternate format to raw format', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SINGLE_SAVE_GBA_ALTERNATE_FORMAT_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_SAVE_GBA_ALTERNATE_FORMAT_FILENAME);\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_SINGLE_SAVE_GBA_ALTERNATE_FORMAT_FILENAME), 'gba', 8192);\n\n    expect(onlineEmulatorWrapper.getFiles().length).to.equal(1);\n\n    expect(onlineEmulatorWrapper.getFiles()[0].name).to.equal(Util.getFilename(EMULATOR_SINGLE_SAVE_GBA_ALTERNATE_FORMAT_FILENAME));\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert an online emulator file containing a single GB save state in alternate format to raw format', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SINGLE_SAVE_GB_ALTERNATE_FORMAT_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_SAVE_GB_ALTERNATE_FORMAT_FILENAME);\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_SINGLE_SAVE_GB_ALTERNATE_FORMAT_FILENAME), 'gb', 8192);\n\n    expect(onlineEmulatorWrapper.getFiles().length).to.equal(1);\n\n    expect(onlineEmulatorWrapper.getFiles()[0].name).to.equal(Util.getFilename(EMULATOR_SINGLE_SAVE_GB_ALTERNATE_FORMAT_FILENAME));\n    expect(ArrayBufferUtil.arrayBuffersEqual(onlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should resize saves within an online emulator file containing multiple GBA save states', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_MULTIPLE_SAVE_GBA_FILENAME);\n    const rawArrayBuffers = await Promise.all(RAW_MULTIPLE_SAVE_GBA_FILENAMES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_MULTIPLE_SAVE_GBA_FILENAME), 'gba', 8192);\n\n    const resizedOnlineEmulatorWrapper = OnlineEmulatorWrapper.createWithNewSize(onlineEmulatorWrapper, 512);\n\n    // These arraybuffers will be truncated versions of the correct in-game saves. They won't be valid to load in an emulator\n\n    expect(resizedOnlineEmulatorWrapper.getFiles().length).to.equal(4);\n    expect(resizedOnlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer().byteLength).to.equal(512);\n    expect(resizedOnlineEmulatorWrapper.getFiles()[1].emulatorSaveStateData.getRawArrayBuffer().byteLength).to.equal(512);\n    expect(resizedOnlineEmulatorWrapper.getFiles()[2].emulatorSaveStateData.getRawArrayBuffer().byteLength).to.equal(512);\n    expect(resizedOnlineEmulatorWrapper.getFiles()[3].emulatorSaveStateData.getRawArrayBuffer().byteLength).to.equal(512);\n\n    const rawArrayBuffersTruncated = rawArrayBuffers.map((i) => i.slice(0, 512));\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedOnlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffersTruncated[0])).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedOnlineEmulatorWrapper.getFiles()[1].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffersTruncated[1])).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedOnlineEmulatorWrapper.getFiles()[2].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffersTruncated[2])).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedOnlineEmulatorWrapper.getFiles()[3].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBuffersTruncated[3])).to.equal(true);\n  });\n\n  it('should resize saves within an online emulator file containing multiple SNES save states', async () => {\n    const emulatorArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMULATOR_SINGLE_SAVE_SNES_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_SAVE_SNES_FILENAME);\n\n    const onlineEmulatorWrapper = await OnlineEmulatorWrapper.createFromEmulatorData(emulatorArrayBuffer, Util.getFilename(EMULATOR_SINGLE_SAVE_SNES_FILENAME), 'snes');\n\n    const resizedOnlineEmulatorWrapper = OnlineEmulatorWrapper.createWithNewSize(onlineEmulatorWrapper, 512);\n\n    // These arraybuffers will be truncated versions of the correct in-game saves. They won't be valid to load in an emulator\n\n    expect(resizedOnlineEmulatorWrapper.getFiles().length).to.equal(1);\n    expect(resizedOnlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer().byteLength).to.equal(512);\n\n    const rawArrayBufferTruncated = rawArrayBuffer.slice(0, 512);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(resizedOnlineEmulatorWrapper.getFiles()[0].emulatorSaveStateData.getRawArrayBuffer(), rawArrayBufferTruncated)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/PS1/DexDrive.spec.js",
    "content": "import { expect } from 'chai';\nimport Ps1DexDriveSaveData from '@/save-formats/PS1/DexDrive';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/ps1/dexdrive';\n\nconst DEXDRIVE_NO_FILES_FILENAME = `${DIR}/castlevania-symphony-of-the-night.3172.gme`;\n\nconst DEXDRIVE_ONE_FILE_FILENAME = `${DIR}/castlevania-symphony-of-the-night.1368.gme`;\nconst RAW_ONE_FILE_FILENAME = `${DIR}/castlevania-symphony-of-the-night.1368-BASLUS-00067DRAX01.srm`;\n\nconst DEXDRIVE_TWO_FILES_FILENAME = `${DIR}/castlevania-symphony-of-the-night.1782.gme`;\nconst RAW_TWO_FILES_FILENAMES = [`${DIR}/castlevania-symphony-of-the-night.1782-BASLUS-00067DRAX00.srm`, `${DIR}/castlevania-symphony-of-the-night.1782-BASLUS-00067DRAX01.srm`];\n\nconst DEXDRIVE_FIVE_BLOCK_FILENAME = `${DIR}/gran-turismo.26535.gme`;\nconst RAW_FIVE_BLOCK_FILENAME = `${DIR}/gran-turismo.26535-BASCUS-94194GT.srm`;\n\nconst DEXDRIVE_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME = `${DIR}/gran-turismo.26537.gme`;\nconst RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME = [`${DIR}/gran-turismo.26537-BASCUS-94194GT.srm`, `${DIR}/gran-turismo.26537-BASCUS-94194RT.srm`];\nconst OUTPUT_DEXDRIVE_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME = `${DIR}/gran-turismo.26537-output.gme`;\n\nconst DEXDRIVE_EMPTY_HEADER_FILENAME = `${DIR}/digimon-world.21133.gme`;\nconst RAW_EMPTY_HEADER_FILENAME = `${DIR}/digimon-world.21133-BASLUS-01032DMR0.srm`;\n\nconst DEXDRIVE_NO_HEADER_FILENAME = `${DIR}/tony-hawks-pro-skater-4.24197.gme`;\nconst RAW_NO_HEADER_FILENAME = `${DIR}/tony-hawks-pro-skater-4.24197-BASLUS-01485PNMOG01.srm`;\n\nconst RAW_MEMCARD_FILENAME = `${DIR}/Castlevania - Symphony of the Night (USA).0.mcr`;\nconst RAW_MEMCARD_FILENAMES = [`${DIR}/Castlevania - Symphony of the Night (USA).0.BASLUS-00067DRAX00.srm`];\nconst DEXDRIVE_MEMCARD_FILENAME = `${DIR}/Castlevania - Symphony of the Night (USA).0.gme`;\n\nconst COMMENTS = [\n  'I used to have a DexDrive but then I foolishly gave it away when I was purging old stuff. Now I have regret.',\n  'I thought it was useless without a serial port, and that the included software was too old, but you can get a USB adaptor and memcardrex can talk to it.',\n];\n\ndescribe('PS1 - DexDrive save format', () => {\n  it('should correctly handle a file that contains no save data', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_NO_FILES_FILENAME);\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(0);\n  });\n\n  it('should convert a file containing a single save that is one block', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_ONE_FILE_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ONE_FILE_FILENAME);\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(dexDriveSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-00067DRAX01');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].description).to.equal('CASTLEVANIA-2 PHOENIX 208%');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing two saves that are each one block', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_TWO_FILES_FILENAME);\n    const rawArrayBuffers = await Promise.all(RAW_TWO_FILES_FILENAMES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(dexDriveSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-00067DRAX00');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].description).to.equal('CASTLEVANIA-1 ALUCARD 200%');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[1].startingBlock).to.equal(1);\n    expect(dexDriveSaveData.getSaveFiles()[1].filename).to.equal('BASLUS-00067DRAX01');\n    expect(dexDriveSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[1].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[1].description).to.equal('CASTLEVANIA-2 RICHTER 195%');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[1].rawData, rawArrayBuffers[1])).to.equal(true);\n  });\n\n  it('should convert a file containing a save that is five blocks long', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_FIVE_BLOCK_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FIVE_BLOCK_FILENAME);\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(dexDriveSaveData.getSaveFiles()[0].filename).to.equal('BASCUS-94194GT');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].description).to.equal('GT game data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing a save that is five blocks long and a save that is three blocks long plus some deleted files', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME);\n    const rawArrayBuffers = await Promise.all(RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingBlock).to.equal(6);\n    expect(dexDriveSaveData.getSaveFiles()[0].filename).to.equal('BASCUS-94194GT');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].description).to.equal('GT game data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[1].startingBlock).to.equal(12);\n    expect(dexDriveSaveData.getSaveFiles()[1].filename).to.equal('BASCUS-94194RT');\n    expect(dexDriveSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[1].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[1].description).to.equal('GT replay data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[1].rawData, rawArrayBuffers[1])).to.equal(true);\n  });\n\n  it('should correctly create a file that has two saves of 3 and 5 blocks respectively', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(OUTPUT_DEXDRIVE_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME);\n    const saveFilesArrayBuffers = await Promise.all(RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n    const saveFilenames = RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.map((n) => n.substr(-18, 14));\n    const saveFiles = RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.map((n, i) => ({ filename: saveFilenames[i], rawData: saveFilesArrayBuffers[i], comment: COMMENTS[i] }));\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromSaveFiles(saveFiles);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.length);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(dexDriveSaveData.getSaveFiles()[0].filename).to.equal('BASCUS-94194GT');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal(COMMENTS[0]);\n    expect(dexDriveSaveData.getSaveFiles()[0].description).to.equal('GT game data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, saveFilesArrayBuffers[0])).to.equal(true);\n\n    expect(dexDriveSaveData.getSaveFiles()[1].startingBlock).to.equal(5);\n    expect(dexDriveSaveData.getSaveFiles()[1].filename).to.equal('BASCUS-94194RT');\n    expect(dexDriveSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[1].comment).to.equal(COMMENTS[1]);\n    expect(dexDriveSaveData.getSaveFiles()[1].description).to.equal('GT replay data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[1].rawData, saveFilesArrayBuffers[1])).to.equal(true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getArrayBuffer(), dexDriveArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing an empty header (without the correct magic)', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_EMPTY_HEADER_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_EMPTY_HEADER_FILENAME);\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(dexDriveSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-01032DMR0');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].description).to.equal('Digi 1onFou');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a file containing no header (just a raw memory card image file)', async () => {\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_NO_HEADER_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_NO_HEADER_FILENAME);\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromDexDriveData(dexDriveArrayBuffer);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(dexDriveSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-01485PNMOG01');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].comment).to.equal('');\n    expect(dexDriveSaveData.getSaveFiles()[0].description).to.equal('THPS4 CAREERー PHELIPE E RENATO');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly create a DexDrive memcard image from a raw memcard image', async () => {\n    const rawMemcardArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_MEMCARD_FILENAME);\n    const saveFilesArrayBuffers = await Promise.all(RAW_MEMCARD_FILENAMES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n    const dexDriveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(DEXDRIVE_MEMCARD_FILENAME);\n\n    const dexDriveSaveData = Ps1DexDriveSaveData.createFromMemoryCardData(rawMemcardArrayBuffer);\n\n    expect(dexDriveSaveData.getSaveFiles().length).to.equal(RAW_MEMCARD_FILENAMES.length);\n\n    expect(dexDriveSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(dexDriveSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-00067DRAX00');\n    expect(dexDriveSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(dexDriveSaveData.getSaveFiles()[0].description).to.equal('CASTLEVANIA-1 EUAN 2%');\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getSaveFiles()[0].rawData, saveFilesArrayBuffers[0])).to.equal(true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(dexDriveSaveData.getArrayBuffer(), dexDriveArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/PS1/Memcard.spec.js",
    "content": "import { expect } from 'chai';\nimport Ps1MemcardSaveData from '@/save-formats/PS1/Memcard';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/ps1/memcard';\n\nconst SINGLE_BLOCK_TWO_FILES_FILENAMES = [`${DIR}/castlevania-symphony-of-the-night.1782-BASLUS-00067DRAX00.srm`, `${DIR}/castlevania-symphony-of-the-night.1782-BASLUS-00067DRAX01.srm`];\n\nconst MULTI_BLOCK_TWO_FILES_FILENAMES = [`${DIR}/gran-turismo.26537-BASCUS-94194GT.srm`, `${DIR}/gran-turismo.26537-BASCUS-94194RT.srm`];\n\nconst SINGLE_FILE_SAVE_FILENAME = `${DIR}/Castlevania - Symphony of the Night (USA).0.mcr`;\nconst RAW_SINGLE_FILE_FILENAME = `${DIR}/Castlevania - Symphony of the Night (USA).0.BASLUS-00067DRAX00.srm`;\n\nconst NO_FILES_SAVE_FILENAME = `${DIR}/Castlevania - Symphony of the Night (USA).1.mcr`;\n\ndescribe('PS1 memcard save format', () => {\n  it('should correctly create a file that has two saves of one block each', async () => {\n    const saveFilesArrayBuffers = await Promise.all(SINGLE_BLOCK_TWO_FILES_FILENAMES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n    const saveFilenames = SINGLE_BLOCK_TWO_FILES_FILENAMES.map((n) => n.substr(-22, 18));\n    const saveFiles = SINGLE_BLOCK_TWO_FILES_FILENAMES.map((n, i) => ({ filename: saveFilenames[i], rawData: saveFilesArrayBuffers[i] }));\n\n    const ps1MemcardSaveData = Ps1MemcardSaveData.createFromSaveFiles(saveFiles);\n\n    expect(ps1MemcardSaveData.getSaveFiles().length).to.equal(SINGLE_BLOCK_TWO_FILES_FILENAMES.length);\n\n    expect(ps1MemcardSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(ps1MemcardSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-00067DRAX00');\n    expect(ps1MemcardSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(ps1MemcardSaveData.getSaveFiles()[0].description).to.equal('CASTLEVANIA-1 ALUCARD 200%');\n    expect(ArrayBufferUtil.arrayBuffersEqual(ps1MemcardSaveData.getSaveFiles()[0].rawData, saveFilesArrayBuffers[0])).to.equal(true);\n\n    expect(ps1MemcardSaveData.getSaveFiles()[1].startingBlock).to.equal(1);\n    expect(ps1MemcardSaveData.getSaveFiles()[1].filename).to.equal('BASLUS-00067DRAX01');\n    expect(ps1MemcardSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(ps1MemcardSaveData.getSaveFiles()[1].description).to.equal('CASTLEVANIA-2 RICHTER 195%');\n    expect(ArrayBufferUtil.arrayBuffersEqual(ps1MemcardSaveData.getSaveFiles()[1].rawData, saveFilesArrayBuffers[1])).to.equal(true);\n  });\n\n  it('should correctly create a file that has two saves of 3 and 5 blocks respectively', async () => {\n    const saveFilesArrayBuffers = await Promise.all(MULTI_BLOCK_TWO_FILES_FILENAMES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n    const saveFilenames = MULTI_BLOCK_TWO_FILES_FILENAMES.map((n) => n.substr(-18, 14));\n    const saveFiles = MULTI_BLOCK_TWO_FILES_FILENAMES.map((n, i) => ({ filename: saveFilenames[i], rawData: saveFilesArrayBuffers[i] }));\n\n    const ps1MemcardSaveData = Ps1MemcardSaveData.createFromSaveFiles(saveFiles);\n\n    expect(ps1MemcardSaveData.getSaveFiles().length).to.equal(MULTI_BLOCK_TWO_FILES_FILENAMES.length);\n\n    expect(ps1MemcardSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(ps1MemcardSaveData.getSaveFiles()[0].filename).to.equal('BASCUS-94194GT');\n    expect(ps1MemcardSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(ps1MemcardSaveData.getSaveFiles()[0].description).to.equal('GT game data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(ps1MemcardSaveData.getSaveFiles()[0].rawData, saveFilesArrayBuffers[0])).to.equal(true);\n\n    expect(ps1MemcardSaveData.getSaveFiles()[1].startingBlock).to.equal(5);\n    expect(ps1MemcardSaveData.getSaveFiles()[1].filename).to.equal('BASCUS-94194RT');\n    expect(ps1MemcardSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(ps1MemcardSaveData.getSaveFiles()[1].description).to.equal('GT replay data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(ps1MemcardSaveData.getSaveFiles()[1].rawData, saveFilesArrayBuffers[1])).to.equal(true);\n  });\n\n  it('should load a file containing no savese', async () => {\n    const saveFileArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NO_FILES_SAVE_FILENAME);\n\n    const ps1MemcardSaveData = Ps1MemcardSaveData.createFromPs1MemcardData(saveFileArrayBuffer);\n\n    expect(ps1MemcardSaveData.getSaveFiles().length).to.equal(0);\n  });\n\n  it('should load a file containing a single save', async () => {\n    const saveFileArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SINGLE_FILE_SAVE_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SINGLE_FILE_FILENAME);\n\n    const ps1MemcardSaveData = Ps1MemcardSaveData.createFromPs1MemcardData(saveFileArrayBuffer);\n\n    expect(ps1MemcardSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ps1MemcardSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(ps1MemcardSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-00067DRAX00');\n    expect(ps1MemcardSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(ps1MemcardSaveData.getSaveFiles()[0].description).to.equal('CASTLEVANIA-1 EUAN 2%');\n    expect(ArrayBufferUtil.arrayBuffersEqual(ps1MemcardSaveData.getSaveFiles()[0].rawData, rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/PS1/Ps3.spec.js",
    "content": "import { expect } from 'chai';\nimport Ps3SaveData from '@/save-formats/PS1/Ps3';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/ps1/ps3';\n\nconst PS3_STREET_FIGHTER_EX2_PLUS_FILENAME = `${DIR}/Street Fighter EX2 Plus-BASLUS-0110553595354454D.PSV`;\nconst PS3_STREET_FIGHTER_EX2_PLUS_BASE_FILENAME = PS3_STREET_FIGHTER_EX2_PLUS_FILENAME.substr(-28, 24);\nconst RAW_STREET_FIGHTER_EX2_PLUS_FILENAME = `${DIR}/street-fighter-ex2-plus.17782.mcr`;\n\nconst RAW_SUIKODEN_2_FILENAME = `${DIR}/Suikoden 2-BASLUS-00958GS2-7.srm`;\nconst RAW_SUIKODEN_2_BASE_FILENAME = RAW_SUIKODEN_2_FILENAME.substr(-21, 17);\nconst PS3_SUIKODEN_2_FILENAME = `${DIR}/Suikoden 2-BASLUS-009584753322D37.PSV`;\n\ndescribe('PS1 - PS3 save format', () => {\n  it('should convert a PS3 file to PS1, which contains a Street Fighter EX2 Plus save', async () => {\n    const ps3SaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PS3_STREET_FIGHTER_EX2_PLUS_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_STREET_FIGHTER_EX2_PLUS_FILENAME);\n\n    const ps3SaveFiles = [\n      {\n        filename: PS3_STREET_FIGHTER_EX2_PLUS_BASE_FILENAME,\n        rawData: ps3SaveArrayBuffer,\n      },\n    ];\n\n    const ps3SaveData = Ps3SaveData.createFromPs3SaveFiles(ps3SaveFiles);\n\n    expect(ps3SaveData.getSaveFiles().length).to.equal(1);\n    expect(ps3SaveData.getPs3SaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(ps3SaveData.getMemoryCard().getArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a PS1 file to PS3 file, which contains a Suikoden 2 save', async () => {\n    const ps1SaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_SUIKODEN_2_FILENAME);\n    const ps3SaveArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PS3_SUIKODEN_2_FILENAME);\n\n    const ps1SaveFiles = [\n      {\n        filename: RAW_SUIKODEN_2_BASE_FILENAME,\n        rawData: ps1SaveArrayBuffer,\n      },\n    ];\n\n    const ps3SaveData = Ps3SaveData.createFromPs1SaveFiles(ps1SaveFiles);\n\n    expect(ps3SaveData.getSaveFiles().length).to.equal(1);\n    expect(ps3SaveData.getPs3SaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(ps3SaveData.getPs3SaveFiles()[0].rawData, ps3SaveArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/PS1/Psp.spec.js",
    "content": "import { expect } from 'chai';\nimport PspSaveData from '@/save-formats/PS1/Psp';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/ps1/psp';\n\nconst PSP_SIGNATURE_FILENAME = `${DIR}/Suikoden 2-psp-signature.VMP`;\nconst PROGRAM_SIGNATURE_FILENAME = `${DIR}/Suikoden 2-vita-mcr2vmp-signature.VMP`;\nconst WEB_SIGNATURE_FILENAME = `${DIR}/Suikoden 1-save-editor-signature.VMP`;\nconst NO_SIGNATURE_FILENAME = `${DIR}/Suikoden 2-no-signature.VMP`;\n\nconst PSP_SEVEN_FILES_FILENAME = `${DIR}/Suikoden 2.VMP`;\nconst RAW_SEVEN_FILES_FILENAMES = [\n  `${DIR}/Suikoden 2-BASLUS-00958GS2-1.srm`,\n  `${DIR}/Suikoden 2-BASLUS-00958GS2-2.srm`,\n  `${DIR}/Suikoden 2-BASLUS-00958GS2-3.srm`,\n  `${DIR}/Suikoden 2-BASLUS-00958GS2-4.srm`,\n  `${DIR}/Suikoden 2-BASLUS-00958GS2-5.srm`,\n  `${DIR}/Suikoden 2-BASLUS-00958GS2-6.srm`,\n  `${DIR}/Suikoden 2-BASLUS-00958GS2-7.srm`,\n];\n\nconst RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME = [`${DIR}/gran-turismo.26537-BASCUS-94194GT.srm`, `${DIR}/gran-turismo.26537-BASCUS-94194RT.srm`];\nconst OUTPUT_PSP_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME = `${DIR}/gran-turismo.26537-output.vmp`;\n\nconst RAW_MEMCARD_FILENAME = `${DIR}/Castlevania - Symphony of the Night (USA).0.mcr`;\nconst RAW_MEMCARD_FILENAMES = [`${DIR}/Castlevania - Symphony of the Night (USA).0.BASLUS-00067DRAX00.srm`];\nconst PSP_MEMCARD_FILENAME = `${DIR}/Castlevania - Symphony of the Night (USA).0.VMP`;\n\ndescribe('PS1 - PSP save format', () => {\n  it('should correctly verify the signature of a file written by a PSP', async () => {\n    const pspArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PSP_SIGNATURE_FILENAME);\n\n    PspSaveData.createFromPspData(pspArrayBuffer);\n  });\n\n  it('should correctly verify the signature of a file written by vita-mcr2vmp', async () => {\n    const pspArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PROGRAM_SIGNATURE_FILENAME);\n\n    PspSaveData.createFromPspData(pspArrayBuffer);\n  });\n\n  it('should correctly verify the signature of a file written by save-editor.com', async () => {\n    const pspArrayBuffer = await ArrayBufferUtil.readArrayBuffer(WEB_SIGNATURE_FILENAME);\n\n    PspSaveData.createFromPspData(pspArrayBuffer);\n  });\n\n  it('should correctly reject a file with an incorrect signature', async () => {\n    const pspArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NO_SIGNATURE_FILENAME);\n\n    expect(() => PspSaveData.createFromPspData(pspArrayBuffer)).to.throw(\n      // Passing in a specific instance of an Error triggers a comparison of the references: https://github.com/chaijs/chai/issues/430\n      Error,\n      'Save appears to be corrupted: expected signature 0000000000000000000000000000000000000000 but calculated signature 93a06a162ae1808643027aeb2c95d80bbee92a39',\n    );\n  });\n\n  it('should convert a file containing seven saves that are each two blocks', async () => {\n    const pspArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PSP_SEVEN_FILES_FILENAME);\n    const rawArrayBuffers = await Promise.all(RAW_SEVEN_FILES_FILENAMES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const pspSaveData = PspSaveData.createFromPspData(pspArrayBuffer);\n\n    expect(pspSaveData.getSaveFiles().length).to.equal(7);\n\n    expect(pspSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(pspSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-00958GS2-1');\n    expect(pspSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[0].description).to.equal('SUIKODEN2-(1) LV57  31:11:33');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[0].rawData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(pspSaveData.getSaveFiles()[1].startingBlock).to.equal(2);\n    expect(pspSaveData.getSaveFiles()[1].filename).to.equal('BASLUS-00958GS2-2');\n    expect(pspSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[1].description).to.equal('SUIKODEN2-(2) LV57  31:16:35');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[1].rawData, rawArrayBuffers[1])).to.equal(true);\n\n    expect(pspSaveData.getSaveFiles()[2].startingBlock).to.equal(4);\n    expect(pspSaveData.getSaveFiles()[2].filename).to.equal('BASLUS-00958GS2-3');\n    expect(pspSaveData.getSaveFiles()[2].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[2].description).to.equal('SUIKODEN2-(3) LV57  31:25:14');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[2].rawData, rawArrayBuffers[2])).to.equal(true);\n\n    expect(pspSaveData.getSaveFiles()[3].startingBlock).to.equal(6);\n    expect(pspSaveData.getSaveFiles()[3].filename).to.equal('BASLUS-00958GS2-4');\n    expect(pspSaveData.getSaveFiles()[3].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[3].description).to.equal('SUIKODEN2-(4) LV54  30:31:12');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[3].rawData, rawArrayBuffers[3])).to.equal(true);\n\n    expect(pspSaveData.getSaveFiles()[4].startingBlock).to.equal(8);\n    expect(pspSaveData.getSaveFiles()[4].filename).to.equal('BASLUS-00958GS2-5');\n    expect(pspSaveData.getSaveFiles()[4].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[4].description).to.equal('SUIKODEN2-(5) LV59  32:30:22');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[4].rawData, rawArrayBuffers[4])).to.equal(true);\n\n    expect(pspSaveData.getSaveFiles()[5].startingBlock).to.equal(10);\n    expect(pspSaveData.getSaveFiles()[5].filename).to.equal('BASLUS-00958GS2-6');\n    expect(pspSaveData.getSaveFiles()[5].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[5].description).to.equal('SUIKODEN2-(6) LV60  32:39:39');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[5].rawData, rawArrayBuffers[5])).to.equal(true);\n\n    expect(pspSaveData.getSaveFiles()[6].startingBlock).to.equal(12);\n    expect(pspSaveData.getSaveFiles()[6].filename).to.equal('BASLUS-00958GS2-7');\n    expect(pspSaveData.getSaveFiles()[6].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[6].description).to.equal('SUIKODEN2-(7) LV60  32:54:42');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[6].rawData, rawArrayBuffers[6])).to.equal(true);\n  });\n\n  it('should correctly create a file that has two saves of 3 and 5 blocks respectively', async () => {\n    const pspArrayBuffer = await ArrayBufferUtil.readArrayBuffer(OUTPUT_PSP_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME);\n    const saveFilesArrayBuffers = await Promise.all(RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n    const saveFilenames = RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.map((n) => n.substr(-18, 14));\n    const saveFiles = RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.map((n, i) => ({ filename: saveFilenames[i], rawData: saveFilesArrayBuffers[i] }));\n\n    const pspSaveData = PspSaveData.createFromSaveFiles(saveFiles);\n\n    expect(pspSaveData.getSaveFiles().length).to.equal(RAW_FIVE_BLOCK_PLUS_OTHER_STUFF_FILENAME.length);\n\n    expect(pspSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(pspSaveData.getSaveFiles()[0].filename).to.equal('BASCUS-94194GT');\n    expect(pspSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[0].description).to.equal('GT game data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[0].rawData, saveFilesArrayBuffers[0])).to.equal(true);\n\n    expect(pspSaveData.getSaveFiles()[1].startingBlock).to.equal(5);\n    expect(pspSaveData.getSaveFiles()[1].filename).to.equal('BASCUS-94194RT');\n    expect(pspSaveData.getSaveFiles()[1].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[1].description).to.equal('GT replay data');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[1].rawData, saveFilesArrayBuffers[1])).to.equal(true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getArrayBuffer(), pspArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly create a PSP memcard image from a raw memcard image', async () => {\n    const rawMemcardArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_MEMCARD_FILENAME);\n    const saveFilesArrayBuffers = await Promise.all(RAW_MEMCARD_FILENAMES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n    const pspArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PSP_MEMCARD_FILENAME);\n\n    const pspSaveData = PspSaveData.createFromMemoryCardData(rawMemcardArrayBuffer);\n\n    expect(pspSaveData.getSaveFiles().length).to.equal(RAW_MEMCARD_FILENAMES.length);\n\n    expect(pspSaveData.getSaveFiles()[0].startingBlock).to.equal(0);\n    expect(pspSaveData.getSaveFiles()[0].filename).to.equal('BASLUS-00067DRAX00');\n    expect(pspSaveData.getSaveFiles()[0].regionName).to.equal('North America');\n    expect(pspSaveData.getSaveFiles()[0].description).to.equal('CASTLEVANIA-1 EUAN 2%');\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getSaveFiles()[0].rawData, saveFilesArrayBuffers[0])).to.equal(true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getArrayBuffer(), pspArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/PSP/Executable.spec.js",
    "content": "import { expect } from 'chai';\nimport PspExecutable from '@/save-formats/PSP/Executable';\nimport PspEncryptionUtil from '@/save-formats/PSP/PspEncryptionUtil';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/rom-formats/psp';\n\nconst TIMEOUT_MS = 40000; // Decrypting executables in debug mode is pretty slow\n\nconst KIRK_INIT_SEED = 0x12345678;\n\nconst CASTLEVANIA_ENCRYPTED_EXECUTABLE_FILENAME = `${DIR}/retail/Castlevania - Dracula X Chronicles - EBOOT.BIN`;\nconst CASTLEVANIA_UNENCRYPTED_EXECUTABLE_FILENAME = `${DIR}/retail/Castlevania - Dracula X Chronicles - EBOOT-decrypted.BIN`;\n\nconst FINAL_FANTASY_TACTICS_ENCRYPTED_EXECUTABLE_FILENAME = `${DIR}/retail/Final Fantasy Tactics - War of the Lions - EBOOT.BIN`;\nconst FINAL_FANTASY_TACTICS_UNENCRYPTED_EXECUTABLE_FILENAME = `${DIR}/retail/Final Fantasy Tactics - War of the Lions - EBOOT-decrypted.BIN`;\n\nconst MEGA_MAN_ENCRYPTED_EXECUTABLE_FILENAME = `${DIR}/retail/Mega Man Maverick Hunter X - EBOOT.BIN`;\nconst MEGA_MAN_UNENCRYPTED_EXECUTABLE_FILENAME = `${DIR}/retail/Mega Man Maverick Hunter X - EBOOT-decrypted.BIN`;\n\nconst NEED_FOR_SPEED_ENCRYPTED_EXECUTABLE_FILENAME = `${DIR}/retail/Need for Speed Underground Rivals - EBOOT.BIN`;\nconst NEED_FOR_SPEED_UNENCRYPTED_EXECUTABLE_FILENAME = `${DIR}/retail/Need for Speed Underground Rivals - EBOOT-decrypted.BIN`;\n\ndescribe('PSP executable decryption', function () { // eslint-disable-line func-names, no-unused-expressions\n  this.timeout(TIMEOUT_MS); // Can't use arrow function above if referencing 'this' here\n\n  before(async () => {\n    await PspEncryptionUtil.init(KIRK_INIT_SEED); // Load in the wasm file and initialize the kirk engine deterministically (so that the encryption results aren't random)\n  });\n\n  it('should decrypt an encrypted PSP executable for Castlevania', async () => {\n    const encryptedExecutableFileExists = await ArrayBufferUtil.fileExists(CASTLEVANIA_ENCRYPTED_EXECUTABLE_FILENAME);\n    const unencryptedExecutableFileExists = await ArrayBufferUtil.fileExists(CASTLEVANIA_UNENCRYPTED_EXECUTABLE_FILENAME);\n\n    expect(encryptedExecutableFileExists).to.equal(unencryptedExecutableFileExists);\n\n    if (encryptedExecutableFileExists && unencryptedExecutableFileExists) { // These files are not included in our repo for obvious reasons\n      const encryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CASTLEVANIA_ENCRYPTED_EXECUTABLE_FILENAME);\n      const unencryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CASTLEVANIA_UNENCRYPTED_EXECUTABLE_FILENAME);\n\n      const pspExecutable = PspExecutable.createFromEncryptedData(encryptedArrayBuffer);\n\n      expect(ArrayBufferUtil.arrayBuffersEqual(pspExecutable.getUnencryptedArrayBuffer(), unencryptedArrayBuffer)).to.equal(true);\n      expect(pspExecutable.getExecutableInfo().compressionAttributes).to.equal(0);\n      expect(pspExecutable.getExecutableInfo().elfSize).to.equal(3697876);\n      expect(pspExecutable.getExecutableInfo().pspSize).to.equal(3698224);\n    }\n  });\n\n  it('should decrypt an encrypted PSP executable for Final Fantasy Tactics', async () => {\n    const encryptedExecutableFileExists = await ArrayBufferUtil.fileExists(FINAL_FANTASY_TACTICS_ENCRYPTED_EXECUTABLE_FILENAME);\n    const unencryptedExecutableFileExists = await ArrayBufferUtil.fileExists(FINAL_FANTASY_TACTICS_UNENCRYPTED_EXECUTABLE_FILENAME);\n\n    expect(encryptedExecutableFileExists).to.equal(unencryptedExecutableFileExists);\n\n    if (encryptedExecutableFileExists && unencryptedExecutableFileExists) { // These files are not included in our repo for obvious reasons\n      const encryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FINAL_FANTASY_TACTICS_ENCRYPTED_EXECUTABLE_FILENAME);\n      const unencryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FINAL_FANTASY_TACTICS_UNENCRYPTED_EXECUTABLE_FILENAME);\n\n      const pspExecutable = PspExecutable.createFromEncryptedData(encryptedArrayBuffer);\n\n      expect(ArrayBufferUtil.arrayBuffersEqual(pspExecutable.getUnencryptedArrayBuffer(), unencryptedArrayBuffer)).to.equal(true);\n      expect(pspExecutable.getExecutableInfo().compressionAttributes).to.equal(2);\n      expect(pspExecutable.getExecutableInfo().elfSize).to.equal(3835044);\n      expect(pspExecutable.getExecutableInfo().pspSize).to.equal(3835392);\n    }\n  });\n\n  it('should decrypt an encrypted PSP executable for Mega Man', async () => {\n    const encryptedExecutableFileExists = await ArrayBufferUtil.fileExists(MEGA_MAN_ENCRYPTED_EXECUTABLE_FILENAME);\n    const unencryptedExecutableFileExists = await ArrayBufferUtil.fileExists(MEGA_MAN_UNENCRYPTED_EXECUTABLE_FILENAME);\n\n    expect(encryptedExecutableFileExists).to.equal(unencryptedExecutableFileExists);\n\n    if (encryptedExecutableFileExists && unencryptedExecutableFileExists) { // These files are not included in our repo for obvious reasons\n      const encryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_MAN_ENCRYPTED_EXECUTABLE_FILENAME);\n      const unencryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(MEGA_MAN_UNENCRYPTED_EXECUTABLE_FILENAME);\n\n      const pspExecutable = PspExecutable.createFromEncryptedData(encryptedArrayBuffer);\n\n      expect(ArrayBufferUtil.arrayBuffersEqual(pspExecutable.getUnencryptedArrayBuffer(), unencryptedArrayBuffer)).to.equal(true);\n      expect(pspExecutable.getExecutableInfo().compressionAttributes).to.equal(0);\n      expect(pspExecutable.getExecutableInfo().elfSize).to.equal(2293524);\n      expect(pspExecutable.getExecutableInfo().pspSize).to.equal(2293872);\n    }\n  });\n\n  it('should decrypt an encrypted PSP executable for Need for Speed', async () => {\n    const encryptedExecutableFileExists = await ArrayBufferUtil.fileExists(NEED_FOR_SPEED_ENCRYPTED_EXECUTABLE_FILENAME);\n    const unencryptedExecutableFileExists = await ArrayBufferUtil.fileExists(NEED_FOR_SPEED_UNENCRYPTED_EXECUTABLE_FILENAME);\n\n    expect(encryptedExecutableFileExists).to.equal(unencryptedExecutableFileExists);\n\n    if (encryptedExecutableFileExists && unencryptedExecutableFileExists) { // These files are not included in our repo for obvious reasons\n      const encryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEED_FOR_SPEED_ENCRYPTED_EXECUTABLE_FILENAME);\n      const unencryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(NEED_FOR_SPEED_UNENCRYPTED_EXECUTABLE_FILENAME);\n\n      const pspExecutable = PspExecutable.createFromEncryptedData(encryptedArrayBuffer);\n\n      expect(ArrayBufferUtil.arrayBuffersEqual(pspExecutable.getUnencryptedArrayBuffer(), unencryptedArrayBuffer)).to.equal(true);\n      expect(pspExecutable.getExecutableInfo().compressionAttributes).to.equal(0);\n      expect(pspExecutable.getExecutableInfo().elfSize).to.equal(4247409);\n      expect(pspExecutable.getExecutableInfo().pspSize).to.equal(4247760);\n    }\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/PSP/ParamSfo.spec.js",
    "content": "import { expect } from 'chai';\nimport PspParamSfo from '@/save-formats/PSP/ParamSfo';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/psp';\n\nconst PARAM_SFO_FILENAME = `${DIR}/PARAM.SFO`;\n\ndescribe('PSP PARAM.SFO', () => {\n  it('should parse a PARAM.SFO file', async () => {\n    const paramSfoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PARAM_SFO_FILENAME);\n\n    const pspParamSfo = new PspParamSfo(paramSfoArrayBuffer);\n\n    expect(pspParamSfo.getValue('BOOTABLE')).to.equal(1);\n    expect(pspParamSfo.getValue('CATEGORY')).to.equal('UG');\n    expect(pspParamSfo.getValue('DISC_ID')).to.equal('ULUS12345');\n    expect(pspParamSfo.getValue('DISC_NUMBER')).to.equal(1);\n    expect(pspParamSfo.getValue('DISC_TOTAL')).to.equal(1);\n    expect(pspParamSfo.getValue('DISC_VERSION')).to.equal('1.02');\n    expect(pspParamSfo.getValue('PARENTAL_LEVEL')).to.equal(5);\n    expect(pspParamSfo.getValue('PSP_SYSTEM_VER')).to.equal('3.52');\n    expect(pspParamSfo.getValue('REGION')).to.equal(32768);\n    expect(pspParamSfo.getValue('TITLE')).to.equal('Test game');\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/PSP/Savefile.spec.js",
    "content": "import { expect } from 'chai';\nimport PspSaveData from '@/save-formats/PSP/Savefile';\nimport PspEncryptionUtil from '@/save-formats/PSP/PspEncryptionUtil';\nimport Util from '@/util/util';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/psp';\n\nconst PSP_ENCRYPTION_WASM_BUILD_MODE = 'release'; // For some reason, the outputted encrypted files are different if the psp-encryption lib is built in debug or release, but the results are still deterministic within those build modes\nconst KIRK_INIT_SEED = 0x12345678;\n\nconst GAME_KEY = Buffer.from('01020304050607080900010203040506', 'hex'); // Apparently Castlevania: Dracula X Chronicles uses a super sekret encryption key for its save data\n\nconst ENCRYPTED_FILENAME = `${DIR}/DRACULA.BIN`;\nconst PARAM_SFO_FILENAME = `${DIR}/DRACULA-PARAM.SFO`;\n\nconst UNENCRYPTED_FILENAME = `${DIR}/DRACULA-unencrypted.BIN`;\n\nconst REENCRYPTED_FILENAME = {\n  debug: `${DIR}/DRACULA-reencrypted-debug.BIN`,\n  release: `${DIR}/DRACULA-reencrypted-release.BIN`,\n};\nconst REENCRYPTED_PARAM_SFO_FILENAME = {\n  debug: `${DIR}/DRACULA-PARAM-reencrypted-debug.SFO`,\n  release: `${DIR}/DRACULA-PARAM-reencrypted-release.SFO`,\n};\n\ndescribe('PSP save decryption', () => {\n  before(async () => {\n    await PspEncryptionUtil.init(KIRK_INIT_SEED); // Load in the wasm file and initialize the kirk engine deterministically (so that the encryption results aren't random)\n  });\n\n  it('should decrypt an encrypted PSP save file', async () => {\n    const encryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(ENCRYPTED_FILENAME);\n    const unencryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(UNENCRYPTED_FILENAME);\n\n    const pspSaveData = PspSaveData.createFromEncryptedData(encryptedArrayBuffer, GAME_KEY);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getUnencryptedArrayBuffer(), unencryptedArrayBuffer)).to.equal(true);\n  });\n\n  it('should encrypt an unencrypted PSP save file', async () => {\n    // Note that the 2 files get re-encrypted to different contents than the originally-encrypted files.\n    // The new contents are deterministic though, due to how we initialized PspSaveData above.\n\n    const unencryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(UNENCRYPTED_FILENAME);\n    const paramSfoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PARAM_SFO_FILENAME);\n\n    const reencryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(REENCRYPTED_FILENAME[PSP_ENCRYPTION_WASM_BUILD_MODE]);\n    const reencryptedParamSfoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(REENCRYPTED_PARAM_SFO_FILENAME[PSP_ENCRYPTION_WASM_BUILD_MODE]);\n\n    const encryptedFilename = Util.getFilename(ENCRYPTED_FILENAME);\n\n    const pspSaveData = PspSaveData.createFromUnencryptedData(unencryptedArrayBuffer, encryptedFilename, paramSfoArrayBuffer, GAME_KEY);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getEncryptedArrayBuffer(), reencryptedArrayBuffer)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspSaveData.getParamSfoArrayBuffer(), reencryptedParamSfoArrayBuffer)).to.equal(true);\n  });\n\n  it('should decrypt a re-encrypted PSP save file to get the same data', async () => {\n    // Note that the 2 files get re-encrypted to different contents than the originally-encrypted files.\n    // The new contents are deterministic though, due to how we initialized PspSaveData above.\n\n    const unencryptedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(UNENCRYPTED_FILENAME);\n    const paramSfoArrayBuffer = await ArrayBufferUtil.readArrayBuffer(PARAM_SFO_FILENAME);\n\n    const encryptedFilename = Util.getFilename(ENCRYPTED_FILENAME);\n\n    const pspEncryptedSaveData = PspSaveData.createFromUnencryptedData(unencryptedArrayBuffer, encryptedFilename, paramSfoArrayBuffer, GAME_KEY);\n\n    const pspRedecryptedSaveData = PspSaveData.createFromEncryptedData(pspEncryptedSaveData.getEncryptedArrayBuffer(), GAME_KEY);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(pspRedecryptedSaveData.getUnencryptedArrayBuffer(), unencryptedArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Retron5/Retron5.spec.js",
    "content": "import { expect } from 'chai';\nimport Retron5SaveData from '@/save-formats/Retron5/Retron5';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/retron5';\n\nconst RETRON5_FILENAME = `${DIR}/Final Fantasy III (USA).sav`;\nconst RAW_FILENAME = `${DIR}/Final Fantasy III (USA).srm`;\n\nconst RETRON5_WITH_PADDING_FILENAME = `${DIR}/Tomato Adventure (Japan).sav`;\nconst RAW_WITHOUT_PADDING_FILENAME = `${DIR}/Tomato Adventure (Japan)-truncated.srm`;\n\ndescribe('Retron 5 save format', () => {\n  it('should convert a Retron 5 file to a raw file', async () => {\n    const retron5ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RETRON5_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const retron5SaveData = Retron5SaveData.createFromRetron5Data(retron5ArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(retron5SaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a raw file to a Retron 5 file', async () => {\n    const retron5ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RETRON5_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    const retron5SaveData = Retron5SaveData.createFromEmulatorData(rawArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(retron5SaveData.getRetron5ArrayBuffer(), retron5ArrayBuffer)).to.equal(true);\n  });\n\n  it('should convert a Retron 5 file with extra padding to a raw file without padding', async () => {\n    const retron5ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RETRON5_WITH_PADDING_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_WITHOUT_PADDING_FILENAME);\n\n    const retron5SaveData = Retron5SaveData.createFromRetron5Data(retron5ArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(retron5SaveData.getRawArrayBuffer(), rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaCd/SegaCd.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport SegaCdSaveData from '@/save-formats/SegaCd/SegaCd';\n\nconst DIR = './tests/data/save-formats/segacd';\n\nconst INTERNAL_MEMORY_1_FILE_FILENAME = `${DIR}/Popful Mail (U)-internal-memory.brm`;\nconst INTERNAL_MEMORY_1_FILE_FILENAME_FILE_1 = `${DIR}/Popful Mail (U)-internal-memory-1.srm`;\n\nconst INTERNAL_MEMORY_MULTIPLE_FILES_FILENAME = `${DIR}/Multiple titles.brm`;\nconst INTERNAL_MEMORY_MULTIPLE_FILES_FILES = [\n  `${DIR}/Multiple titles-1.srm`,\n  `${DIR}/Multiple titles-2.srm`,\n  `${DIR}/Multiple titles-3.srm`,\n  `${DIR}/Multiple titles-4.srm`,\n  `${DIR}/Multiple titles-5.srm`,\n  `${DIR}/Multiple titles-6.srm`,\n  `${DIR}/Multiple titles-7.srm`,\n];\n\nconst RAM_CARTRIDGE_ENCODED_DATA_FILENAME = `${DIR}/SHINING FORCE CD.brm`;\nconst RAM_CARTRIDGE_ENCODED_DATA_FILES = [\n  `${DIR}/SHINING FORCE CD-0.srm`,\n  `${DIR}/SHINING FORCE CD-1.srm`,\n  `${DIR}/SHINING FORCE CD-2.srm`,\n  `${DIR}/SHINING FORCE CD-3.srm`,\n  `${DIR}/SHINING FORCE CD-4.srm`,\n];\n\nconst CREATED_FILE_FILENAME = `${DIR}/Multiple titles - created by program.brm`;\n\nconst CORRUPTED_DATA_FILENAME = `${DIR}/Multiple titles - corrupted.brm`;\n\ndescribe('Sega CD', () => {\n  it('should extract a save from an internal memory file containing 1 save', async () => {\n    const segaCdArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_1_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_1_FILE_FILENAME_FILE_1);\n\n    const segaCdSaveData = SegaCdSaveData.createFromSegaCdData(segaCdArrayBuffer);\n\n    expect(segaCdSaveData.getNumFreeBlocks()).to.equal(112);\n    expect(segaCdSaveData.getFormat()).to.equal('SEGA_CD_ROM');\n    expect(segaCdSaveData.getVolume()).to.equal('');\n    expect(segaCdSaveData.getMediaId()).to.equal('RAM_CARTRIDGE');\n\n    expect(segaCdSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(segaCdSaveData.getSaveFiles()[0].filename).to.equal('POPFUL_MAIL');\n    expect(segaCdSaveData.getSaveFiles()[0].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[0].startBlockNumber).to.equal(1);\n    expect(segaCdSaveData.getSaveFiles()[0].fileSizeBlocks).to.equal(13);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[0].fileData, file1ArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract all of the saves from an internal memory file containing multiple saves', async () => {\n    const segaCdArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_MULTIPLE_FILES_FILENAME);\n    const rawArrayBuffers = await Promise.all(INTERNAL_MEMORY_MULTIPLE_FILES_FILES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const segaCdSaveData = SegaCdSaveData.createFromSegaCdData(segaCdArrayBuffer);\n\n    expect(segaCdSaveData.getNumFreeBlocks()).to.equal(24);\n    expect(segaCdSaveData.getFormat()).to.equal('SEGA_CD_ROM');\n    expect(segaCdSaveData.getVolume()).to.equal('');\n    expect(segaCdSaveData.getMediaId()).to.equal('RAM_CARTRIDGE');\n\n    expect(segaCdSaveData.getSaveFiles().length).to.equal(7);\n\n    expect(segaCdSaveData.getSaveFiles()[0].filename).to.equal('POPFUL_MAIL');\n    expect(segaCdSaveData.getSaveFiles()[0].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[0].startBlockNumber).to.equal(1);\n    expect(segaCdSaveData.getSaveFiles()[0].fileSizeBlocks).to.equal(13);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[0].fileData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[1].filename).to.equal('DW__DATA_00');\n    expect(segaCdSaveData.getSaveFiles()[1].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[1].startBlockNumber).to.equal(14);\n    expect(segaCdSaveData.getSaveFiles()[1].fileSizeBlocks).to.equal(40);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[1].fileData, rawArrayBuffers[1])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[2].filename).to.equal('SFCD_DAT_09');\n    expect(segaCdSaveData.getSaveFiles()[2].dataIsEncoded).to.equal(true);\n    expect(segaCdSaveData.getSaveFiles()[2].startBlockNumber).to.equal(54);\n    expect(segaCdSaveData.getSaveFiles()[2].fileSizeBlocks).to.equal(1);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[2].fileData, rawArrayBuffers[2])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[3].filename).to.equal('SONICCD__01');\n    expect(segaCdSaveData.getSaveFiles()[3].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[3].startBlockNumber).to.equal(55);\n    expect(segaCdSaveData.getSaveFiles()[3].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[3].fileData, rawArrayBuffers[3])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[4].filename).to.equal('SONICCD__02');\n    expect(segaCdSaveData.getSaveFiles()[4].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[4].startBlockNumber).to.equal(66);\n    expect(segaCdSaveData.getSaveFiles()[4].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[4].fileData, rawArrayBuffers[4])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[5].filename).to.equal('SONICCD');\n    expect(segaCdSaveData.getSaveFiles()[5].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[5].startBlockNumber).to.equal(77);\n    expect(segaCdSaveData.getSaveFiles()[5].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[5].fileData, rawArrayBuffers[5])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[6].filename).to.equal('SONICCD__03');\n    expect(segaCdSaveData.getSaveFiles()[6].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[6].startBlockNumber).to.equal(88);\n    expect(segaCdSaveData.getSaveFiles()[6].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[6].fileData, rawArrayBuffers[6])).to.equal(true);\n  });\n\n  it('should extract all of the saves from a concatenated internal memory + RAM cartridge file (which also contains encoded data)', async () => {\n    const segaCdArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAM_CARTRIDGE_ENCODED_DATA_FILENAME);\n    const rawArrayBuffers = await Promise.all(RAM_CARTRIDGE_ENCODED_DATA_FILES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const segaCdSaveData = SegaCdSaveData.createFromSegaCdData(segaCdArrayBuffer);\n\n    // This is for the newly-created, combined, memory that holds the saves in both portions of the file\n    expect(segaCdSaveData.getNumFreeBlocks()).to.equal(1646);\n    expect(segaCdSaveData.getFormat()).to.equal('SEGA_CD_ROM');\n    expect(segaCdSaveData.getVolume()).to.equal('');\n    expect(segaCdSaveData.getMediaId()).to.equal('RAM_CARTRIDGE');\n\n    expect(segaCdSaveData.getSaveFiles().length).to.equal(5);\n\n    expect(segaCdSaveData.getSaveFiles()[0].filename).to.equal('SFCD_DAT_09');\n    expect(segaCdSaveData.getSaveFiles()[0].dataIsEncoded).to.equal(true);\n    expect(segaCdSaveData.getSaveFiles()[0].startBlockNumber).to.equal(1);\n    expect(segaCdSaveData.getSaveFiles()[0].fileSizeBlocks).to.equal(1);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[0].fileData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[1].filename).to.equal('SFCD_DAT_01');\n    expect(segaCdSaveData.getSaveFiles()[1].dataIsEncoded).to.equal(true);\n    expect(segaCdSaveData.getSaveFiles()[1].startBlockNumber).to.equal(2);\n    expect(segaCdSaveData.getSaveFiles()[1].fileSizeBlocks).to.equal(99);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[1].fileData, rawArrayBuffers[1])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[2].filename).to.equal('SFCD_DAT_02');\n    expect(segaCdSaveData.getSaveFiles()[2].dataIsEncoded).to.equal(true);\n    expect(segaCdSaveData.getSaveFiles()[2].startBlockNumber).to.equal(101);\n    expect(segaCdSaveData.getSaveFiles()[2].fileSizeBlocks).to.equal(99);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[2].fileData, rawArrayBuffers[2])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[3].filename).to.equal('SFCD_DAT_03');\n    expect(segaCdSaveData.getSaveFiles()[3].dataIsEncoded).to.equal(true);\n    expect(segaCdSaveData.getSaveFiles()[3].startBlockNumber).to.equal(200);\n    expect(segaCdSaveData.getSaveFiles()[3].fileSizeBlocks).to.equal(99);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[3].fileData, rawArrayBuffers[3])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[4].filename).to.equal('SFCD_DAT_04');\n    expect(segaCdSaveData.getSaveFiles()[4].dataIsEncoded).to.equal(true);\n    expect(segaCdSaveData.getSaveFiles()[4].startBlockNumber).to.equal(299);\n    expect(segaCdSaveData.getSaveFiles()[4].fileSizeBlocks).to.equal(99);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[4].fileData, rawArrayBuffers[4])).to.equal(true);\n  });\n\n  it('should be able to create a save file from individual files', async () => {\n    const rawArrayBuffers = await Promise.all(INTERNAL_MEMORY_MULTIPLE_FILES_FILES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    // This is identical to the data created by the reference tool https://github.com/superctr/buram for this data.\n    // It's different from the file created by the BIOS though: the final block of directory information (i.e. closest to the top of the file)\n    // is different for some reason.\n    // Also, the BIOS fills in some data in the reserved block at the beginning of the file\n    //\n    // This file was tested as being able to be loaded by the BIOS\n    const expectedCreatedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CREATED_FILE_FILENAME);\n\n    const saveFiles = [\n      {\n        filename: 'POPFUL_MAIL',\n        fileData: rawArrayBuffers[0],\n        dataIsEncoded: false,\n      },\n      {\n        filename: 'DW__DATA_00',\n        fileData: rawArrayBuffers[1],\n        dataIsEncoded: false,\n      },\n      {\n        filename: 'SFCD_DAT_09',\n        fileData: rawArrayBuffers[2],\n        dataIsEncoded: true,\n      },\n      {\n        filename: 'SONICCD__01',\n        fileData: rawArrayBuffers[3],\n        dataIsEncoded: false,\n      },\n      {\n        filename: 'SONICCD__02',\n        fileData: rawArrayBuffers[4],\n        dataIsEncoded: false,\n      },\n      {\n        filename: 'SONICCD',\n        fileData: rawArrayBuffers[5],\n        dataIsEncoded: false,\n      },\n      {\n        filename: 'SONICCD__03',\n        fileData: rawArrayBuffers[6],\n        dataIsEncoded: false,\n      },\n    ];\n\n    const createdSegaCdSaveData = SegaCdSaveData.createFromSaveFiles(saveFiles, 8192);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(expectedCreatedArrayBuffer, createdSegaCdSaveData.getArrayBuffer())).to.equal(true);\n\n    const segaCdSaveData = SegaCdSaveData.createFromSegaCdData(createdSegaCdSaveData.getArrayBuffer());\n\n    expect(segaCdSaveData.getNumFreeBlocks()).to.equal(24);\n    expect(segaCdSaveData.getFormat()).to.equal('SEGA_CD_ROM');\n    expect(segaCdSaveData.getVolume()).to.equal('');\n    expect(segaCdSaveData.getMediaId()).to.equal('RAM_CARTRIDGE');\n\n    expect(segaCdSaveData.getSaveFiles().length).to.equal(7);\n\n    expect(segaCdSaveData.getSaveFiles()[0].filename).to.equal('POPFUL_MAIL');\n    expect(segaCdSaveData.getSaveFiles()[0].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[0].startBlockNumber).to.equal(1);\n    expect(segaCdSaveData.getSaveFiles()[0].fileSizeBlocks).to.equal(13);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[0].fileData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[1].filename).to.equal('DW__DATA_00');\n    expect(segaCdSaveData.getSaveFiles()[1].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[1].startBlockNumber).to.equal(14);\n    expect(segaCdSaveData.getSaveFiles()[1].fileSizeBlocks).to.equal(40);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[1].fileData, rawArrayBuffers[1])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[2].filename).to.equal('SFCD_DAT_09');\n    expect(segaCdSaveData.getSaveFiles()[2].dataIsEncoded).to.equal(true);\n    expect(segaCdSaveData.getSaveFiles()[2].startBlockNumber).to.equal(54);\n    expect(segaCdSaveData.getSaveFiles()[2].fileSizeBlocks).to.equal(1);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[2].fileData, rawArrayBuffers[2])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[3].filename).to.equal('SONICCD__01');\n    expect(segaCdSaveData.getSaveFiles()[3].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[3].startBlockNumber).to.equal(55);\n    expect(segaCdSaveData.getSaveFiles()[3].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[3].fileData, rawArrayBuffers[3])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[4].filename).to.equal('SONICCD__02');\n    expect(segaCdSaveData.getSaveFiles()[4].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[4].startBlockNumber).to.equal(66);\n    expect(segaCdSaveData.getSaveFiles()[4].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[4].fileData, rawArrayBuffers[4])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[5].filename).to.equal('SONICCD');\n    expect(segaCdSaveData.getSaveFiles()[5].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[5].startBlockNumber).to.equal(77);\n    expect(segaCdSaveData.getSaveFiles()[5].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[5].fileData, rawArrayBuffers[5])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[6].filename).to.equal('SONICCD__03');\n    expect(segaCdSaveData.getSaveFiles()[6].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[6].startBlockNumber).to.equal(88);\n    expect(segaCdSaveData.getSaveFiles()[6].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[6].fileData, rawArrayBuffers[6])).to.equal(true);\n  });\n\n  it('should correctly set the number of free blocks when the number of files is even', async () => {\n    const rawArrayBuffers = await Promise.all(INTERNAL_MEMORY_MULTIPLE_FILES_FILES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const saveFiles = [\n      {\n        filename: 'POPFUL_MAIL',\n        fileData: rawArrayBuffers[0],\n        dataIsEncoded: false,\n      },\n      {\n        filename: 'DW__DATA_00',\n        fileData: rawArrayBuffers[1],\n        dataIsEncoded: false,\n      },\n    ];\n\n    const createdSegaCdSaveData = SegaCdSaveData.createFromSaveFiles(saveFiles, 8192);\n\n    // 8192 bytes = 128 blocks\n    // 2 reserved blocks\n    // 13 blocks in first file\n    // 40 blocks in second file\n    // 1 block for the 2 directory entries\n    // 1 more block reserved for the next future directory entry\n    //\n    // Result is 71 free blocks\n\n    expect(createdSegaCdSaveData.getNumFreeBlocks()).to.equal(71);\n  });\n\n  it('should correctly set the number of free blocks when the number of files is odd', async () => {\n    const rawArrayBuffers = await Promise.all(INTERNAL_MEMORY_MULTIPLE_FILES_FILES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const saveFiles = [\n      {\n        filename: 'DW__DATA_00',\n        fileData: rawArrayBuffers[1],\n        dataIsEncoded: false,\n      },\n    ];\n\n    const createdSegaCdSaveData = SegaCdSaveData.createFromSaveFiles(saveFiles, 8192);\n\n    // 8192 bytes = 128 blocks\n    // 2 reserved blocks\n    // 40 blocks in first file\n    // 1 block for the 1 directory entry and next future directory entry\n    //\n    // Result is 85 free blocks\n\n    expect(createdSegaCdSaveData.getNumFreeBlocks()).to.equal(85);\n  });\n\n  it('should extract all of the saves from an internal memory file containing corrupted data', async () => {\n    const segaCdArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CORRUPTED_DATA_FILENAME);\n    const rawArrayBuffers = await Promise.all(INTERNAL_MEMORY_MULTIPLE_FILES_FILES.map((n) => ArrayBufferUtil.readArrayBuffer(n)));\n\n    const segaCdSaveData = SegaCdSaveData.createFromSegaCdData(segaCdArrayBuffer);\n\n    expect(segaCdSaveData.getNumFreeBlocks()).to.equal(24);\n    expect(segaCdSaveData.getFormat()).to.equal('SEGA_CD_ROM');\n    expect(segaCdSaveData.getVolume()).to.equal('');\n    expect(segaCdSaveData.getMediaId()).to.equal('RAM_CARTRIDGE');\n\n    expect(segaCdSaveData.getSaveFiles().length).to.equal(7);\n\n    expect(segaCdSaveData.getSaveFiles()[0].filename).to.equal('POPFUL_MAIL');\n    expect(segaCdSaveData.getSaveFiles()[0].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[0].startBlockNumber).to.equal(1);\n    expect(segaCdSaveData.getSaveFiles()[0].fileSizeBlocks).to.equal(13);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[0].fileData, rawArrayBuffers[0])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[1].filename).to.equal('DW__DATA_00');\n    expect(segaCdSaveData.getSaveFiles()[1].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[1].startBlockNumber).to.equal(14);\n    expect(segaCdSaveData.getSaveFiles()[1].fileSizeBlocks).to.equal(40);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[1].fileData, rawArrayBuffers[1])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[2].filename).to.equal('SFCD_DAT_09');\n    expect(segaCdSaveData.getSaveFiles()[2].dataIsEncoded).to.equal(true);\n    expect(segaCdSaveData.getSaveFiles()[2].startBlockNumber).to.equal(54);\n    expect(segaCdSaveData.getSaveFiles()[2].fileSizeBlocks).to.equal(1);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[2].fileData, rawArrayBuffers[2])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[3].filename).to.equal('SONICCD__01');\n    expect(segaCdSaveData.getSaveFiles()[3].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[3].startBlockNumber).to.equal(55);\n    expect(segaCdSaveData.getSaveFiles()[3].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[3].fileData, rawArrayBuffers[3])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[4].filename).to.equal('SONICCD__02');\n    expect(segaCdSaveData.getSaveFiles()[4].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[4].startBlockNumber).to.equal(66);\n    expect(segaCdSaveData.getSaveFiles()[4].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[4].fileData, rawArrayBuffers[4])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[5].filename).to.equal('SONICCD');\n    expect(segaCdSaveData.getSaveFiles()[5].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[5].startBlockNumber).to.equal(77);\n    expect(segaCdSaveData.getSaveFiles()[5].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[5].fileData, rawArrayBuffers[5])).to.equal(true);\n\n    expect(segaCdSaveData.getSaveFiles()[6].filename).to.equal('SONICCD__03');\n    expect(segaCdSaveData.getSaveFiles()[6].dataIsEncoded).to.equal(false);\n    expect(segaCdSaveData.getSaveFiles()[6].startBlockNumber).to.equal(88);\n    expect(segaCdSaveData.getSaveFiles()[6].fileSizeBlocks).to.equal(11);\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaCdSaveData.getSaveFiles()[6].fileData, rawArrayBuffers[6])).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaSaturn/Emulators/mednafen.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport ArrayUtil from '@/util/Array';\n\nimport MednafenSegaSaturnSaveData from '@/save-formats/SegaSaturn/Emulators/mednafen';\nimport SegaSaturnUtil from '@/save-formats/SegaSaturn/Util';\n\nconst DIR = './tests/data/save-formats/segasaturn';\n\nconst INTERNAL_MEMORY_FILE_FILENAME = `${DIR}/Hyper Duel (Japan).bkr`;\nconst INTERNAL_MEMORY_FILE_FILENAME_FILE_1 = `${DIR}/Hyper Duel (Japan)-1.raw`;\n\nconst CARTRIDGE_MEMORY_FILE_FILENAME = `${DIR}/Shining Force III Scenario 3 (English v25.1).bcr`;\nconst CARTRIDGE_MEMORY_FILE_FILENAME_RECREATED = `${DIR}/Shining Force III Scenario 3 (English v25.1)-recreated.bcr`; // This differs from the emulator-created file by 1 bit. Presumably something different in a compression header or something due to using different compression settings. The file still loads correctly in the emulator\nconst CARTRIDGE_MEMORY_FILE_FILENAME_FILE_1 = `${DIR}/Shining Force III Scenario 3 (English v25.1)-cart-1.raw`;\n\ndescribe('Sega Saturn - mednafen', () => {\n  it('should extract a save from an internal memory file containing 1 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME_FILE_1);\n\n    const segaSaturnSaveData = MednafenSegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(5);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(505);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('HYPERDUEL_0');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('ﾊｲﾊﾟｰﾃﾞｭｴﾙ'); // \"Hyper Duel\"\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Wed, 31 May 2000 01:00:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(3, 4))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(260);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create an internal memory file containing 1 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME_FILE_1);\n\n    const saveFiles = [\n      {\n        name: 'HYPERDUEL_0',\n        languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n        comment: 'ﾊｲﾊﾟｰﾃﾞｭｴﾙ', // \"Hyper Duel\"\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Wed, 31 May 2000 01:00:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = MednafenSegaSaturnSaveData.createFromSaveFiles(saveFiles, 0x40);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(5);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(505);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract a save from a cartridge file containing 1 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME_FILE_1);\n\n    const segaSaturnSaveData = MednafenSegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x200);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(524288);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(1022);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(49); // This save used 49*512 bytes = 25,088 bytes. Above, the same data used 435*64 bytes = 27,840 bytes due to the smaller block size and thus need to store extra blocks containing the block list\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(973);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('SFORCE33_01');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('Julian    ');\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Tue, 29 Oct 2024 16:45:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(3, 48))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(24344);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a cartridge file containing 1 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME_RECREATED);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME_FILE_1);\n\n    const saveFiles = [\n      {\n        name: 'SFORCE33_01',\n        languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n        comment: 'Julian    ',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 29 Oct 2024 16:45:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = MednafenSegaSaturnSaveData.createFromSaveFiles(saveFiles, 0x200);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x200);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(524288);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(1022);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(49);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(973);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaSaturn/Emulators/yabasanshiro.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport YabaSanshiroSegaSaturnSaveData from '@/save-formats/SegaSaturn/Emulators/yabasanshiro';\n\nconst DIR = './tests/data/save-formats/segasaturn/yabasanshiro';\n\nconst INTERNAL_MEMORY_FILE_FILENAME = `${DIR}/backup.bin`;\nconst EMPTY_INTERNAL_MEMORY_FILE_FILENAME = `${DIR}/empty-backup.bin`;\n\ndescribe('Sega Saturn - yaba sanshiro', () => {\n  it('should parse an internal memory file containing 25 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME);\n\n    const segaSaturnSaveData = YabaSanshiroSegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(4194304);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(65534);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(877);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(64657);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(25);\n\n    // Ugh, 25 saves in our example file. It seems to parse fine: I can't be bothered to list them all out in this test\n  });\n\n  it('should create an empty internal memory file', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMPTY_INTERNAL_MEMORY_FILE_FILENAME);\n    const segaSaturnSaveData = YabaSanshiroSegaSaturnSaveData.createFromSaveFiles([]);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(4194304);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(65534);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(0);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(65534);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaSaturn/Emulators/yabause.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport ArrayUtil from '@/util/Array';\n\nimport YabauseSegaSaturnSaveData from '@/save-formats/SegaSaturn/Emulators/yabause';\nimport SegaSaturnUtil from '@/save-formats/SegaSaturn/Util';\n\nconst DIR = './tests/data/save-formats/segasaturn/yabause';\n\nconst INTERNAL_MEMORY_FILE_FILENAME = `${DIR}/Akumajou Dracula X - Gekka no Yasoukyoku (Japan) (2M).srm`;\nconst INTERNAL_MEMORY_FILE_FILENAME_FILE_1 = `${DIR}/Akumajou Dracula X - Gekka no Yasoukyoku (Japan) (2M).srm-1.raw`;\n\ndescribe('Sega Saturn - yabause', () => {\n  it('should extract a save from an internal memory file containing 1 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME_FILE_1);\n\n    const segaSaturnSaveData = YabauseSegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(77);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(433);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('DRACULAX_01');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('ULTIMATE');\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Sat, 05 Apr 2025 11:54:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(3, 76))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(4388);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create an internal memory file containing 1 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME_FILE_1);\n\n    const saveFiles = [\n      {\n        name: 'DRACULAX_01',\n        languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n        comment: 'ULTIMATE',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Sat, 05 Apr 2025 11:54:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = YabauseSegaSaturnSaveData.createFromSaveFiles(saveFiles, 0x40);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(77);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(433);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaSaturn/IndividualSaves/Bup.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport SegaSaturnBupSaveData from '@/save-formats/SegaSaturn/IndividualSaves/Bup';\nimport SegaSaturnUtil from '@/save-formats/SegaSaturn/Util';\n\nconst DIR = './tests/data/save-formats/segasaturn';\n\nconst BUP_JAPANESE_FILENAME = `${DIR}/DRACULAX.BUP`;\nconst RAW_JAPANESE_FILENAME = `${DIR}/DRACULAX.raw`;\nconst BUP_JAPANESE_RECREATED_FILENAME = `${DIR}/DRACULAX-recreated.BUP`;\n\nconst BUP_ENGLISH_FILENAME = `${DIR}/SFORCE31.BUP`;\nconst RAW_ENGLISH_FILENAME = `${DIR}/SFORCE31.raw`;\nconst BUP_ENGLISH_RECREATED_FILENAME = `${DIR}/SFORCE31-recreated.BUP`;\n\ndescribe('Sega Saturn - .BUP', () => {\n  it('should correctly read a .BUP file with a Japanese comment', async () => {\n    const bupArrayBuffer = await ArrayBufferUtil.readArrayBuffer(BUP_JAPANESE_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_JAPANESE_FILENAME);\n\n    const segaSaturnSaveFiles = SegaSaturnBupSaveData.convertBupsToSaveFiles([bupArrayBuffer]);\n\n    expect(segaSaturnSaveFiles.length).to.equal(1);\n\n    expect(segaSaturnSaveFiles[0].name).to.equal('DRACULAX_02');\n    expect(segaSaturnSaveFiles[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveFiles[0].comment).to.equal('ﾄﾞﾗｷｭﾗX'); // \"Dracula X\"\n    expect(segaSaturnSaveFiles[0].date.toUTCString()).to.equal('Fri, 05 Sep 1997 05:38:00 GMT');\n    expect(segaSaturnSaveFiles[0].saveSize).to.equal(4388);\n    expect(segaSaturnSaveFiles[0].saveSize).to.equal(rawArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveFiles[0].rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write a .BUP file with a Japanese comment', async () => {\n    // The .BUP file that we write out differs at 2 points from the original one we got from the web.\n    //\n    // The first is that ours sets byte 0x1B to 0. This is the last character in the encoded name, and\n    // is one byte beyond what the actual Saturn can read. It's supposedly to store a NULL at the end of the name\n    // string (which is unnecessary). No idea why it's non-zero in our sample file\n    //\n    // The second is that ours sets byte 0x31 to 0. This is part of the block size specified by the file.\n    // The example code we based our implementation off of sets this to be zero. The example file\n    // contains 77 for the data size in blocks and we write it out as 0\n    const bupArrayBuffer = await ArrayBufferUtil.readArrayBuffer(BUP_JAPANESE_RECREATED_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_JAPANESE_FILENAME);\n\n    const saveFile = {\n      name: 'DRACULAX_02',\n      languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n      comment: 'ﾄﾞﾗｷｭﾗX', // \"Dracula X\"\n      dateCode: SegaSaturnUtil.getDateCode(new Date('Fri, 05 Sep 1997 05:38:00 GMT')),\n      saveSize: rawArrayBuffer.byteLength,\n      rawData: rawArrayBuffer,\n    };\n\n    const segaSaturnSaveFiles = SegaSaturnBupSaveData.convertSaveFilesToBups([saveFile]);\n\n    expect(segaSaturnSaveFiles.length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveFiles[0], bupArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly read a .BUP file with an English comment', async () => {\n    const bupArrayBuffer = await ArrayBufferUtil.readArrayBuffer(BUP_ENGLISH_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ENGLISH_FILENAME);\n\n    const segaSaturnSaveFiles = SegaSaturnBupSaveData.convertBupsToSaveFiles([bupArrayBuffer]);\n\n    expect(segaSaturnSaveFiles.length).to.equal(1);\n\n    expect(segaSaturnSaveFiles[0].name).to.equal('SFORCE31_01');\n    expect(segaSaturnSaveFiles[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveFiles[0].comment).to.equal('Synbios   ');\n    expect(segaSaturnSaveFiles[0].date.toUTCString()).to.equal('Tue, 24 Oct 1995 05:39:00 GMT');\n    expect(segaSaturnSaveFiles[0].saveSize).to.equal(12904);\n    expect(segaSaturnSaveFiles[0].saveSize).to.equal(rawArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveFiles[0].rawData, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should correctly write a .BUP file with an English comment', async () => {\n    // The .BUP file that we write out differs at 4 points from the original one we got from the web\n    //\n    // The first is that the save ID in the web one is set to 0x04, whereas ours sets it to be 0 since it's the first one in the list provided\n    //\n    // The second is that there are some stats set in the one from the web, whereas we set them all to 0\n    //\n    // The third one is that the one from the web has the data size in blocks set to 52 whereas our implementation sets it to 0\n    //\n    // The last one is that the one from the web has a different date set in date2, whereas ours sets both dates to be the same\n    const bupArrayBuffer = await ArrayBufferUtil.readArrayBuffer(BUP_ENGLISH_RECREATED_FILENAME);\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_ENGLISH_FILENAME);\n\n    const saveFile = {\n      name: 'SFORCE31_01',\n      languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n      comment: 'Synbios   ',\n      dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 24 Oct 1995 05:39:00 GMT')),\n      saveSize: rawArrayBuffer.byteLength,\n      rawData: rawArrayBuffer,\n    };\n\n    const segaSaturnSaveFiles = SegaSaturnBupSaveData.convertSaveFilesToBups([saveFile]);\n\n    expect(segaSaturnSaveFiles.length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveFiles[0], bupArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaSaturn/Saroo/Cart.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport SarooSegaSaturnCartSaveData from '@/save-formats/SegaSaturn/Saroo/Cart';\nimport ArrayUtil from '@/util/Array';\nimport SegaSaturnUtil from '@/save-formats/SegaSaturn/Util';\n\nconst DIR = './tests/data/save-formats/segasaturn/saroo';\n\nconst SAROO_FILENAME_EMPTY = `${DIR}/SS_MEMS_empty.BIN`; // This empty file was generated by a Saroo, and it contains a bunch of uninitialized memory that obviously we can't duplicate when we create an empty file\nconst SAROO_FILENAME_EMPTY_RECREATED = `${DIR}/SS_MEMS_empty-recreated.BIN`;\n\nconst SAROO_1_GAME_2_SAVES = `${DIR}/SS_MEMS_1_game_2_extend_saves.BIN`;\nconst SAROO_1_GAME_2_SAVES_RECREATED = `${DIR}/SS_MEMS_1_game_2_extend_saves-recreated.BIN`; // Again, the Saroo file has a bunch of uninitialized memory in it\nconst SAROO_1_GAME_2_SAVES_FILE_1 = `${DIR}/Daytona USA - Championship Circuit Edition (USA) 1-1.raw`;\nconst SAROO_1_GAME_2_SAVES_FILE_2 = `${DIR}/Daytona USA - Championship Circuit Edition (USA) 1-2.raw`;\n\nconst SAROO_2_GAMES_3_SAVES = `${DIR}/SS_MEMS_2_games_3_extend_saves.BIN`;\nconst SAROO_2_GAMES_3_SAVES_RECREATED = `${DIR}/SS_MEMS_2_games_3_extend_saves-recreated.BIN`; // Again, the Saroo file has a bunch of uninitialized memory in it\nconst SAROO_2_GAMES_3_SAVES_FILE_1 = `${DIR}/Blast Wind (Japan).raw`;\nconst SAROO_2_GAMES_3_SAVES_FILE_2 = `${DIR}/Daytona USA - Championship Circuit Edition (USA) 2-1.raw`;\nconst SAROO_2_GAMES_3_SAVES_FILE_3 = `${DIR}/Daytona USA - Championship Circuit Edition (USA) 2-2.raw`;\n\ndescribe('Sega Saturn - Saroo cart', () => {\n  it('should parse an empty file', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_EMPTY);\n\n    const segaSaturnSaveData = SarooSegaSaturnCartSaveData.createFromSarooData(sarooArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSize).to.equal(8388608);\n    expect(segaSaturnSaveData.getVolumeInfo().numFreeBlocks).to.equal(8056);\n    expect(segaSaturnSaveData.getVolumeInfo().numUsedBlocks).to.equal(8); // Header block + 7 directory blocks\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getVolumeInfo().usedBlocks, ArrayUtil.createSequentialArray(0, 8))).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n  });\n\n  it('should create an empty file', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_EMPTY_RECREATED);\n\n    const segaSaturnSaveData = SarooSegaSaturnCartSaveData.createFromSaveFiles([]);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSize).to.equal(8388608);\n    expect(segaSaturnSaveData.getVolumeInfo().numFreeBlocks).to.equal(8056);\n    expect(segaSaturnSaveData.getVolumeInfo().numUsedBlocks).to.equal(8); // Header block + 7 directory blocks\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getVolumeInfo().usedBlocks, ArrayUtil.createSequentialArray(0, 8))).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), sarooArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract saves from a Saroo cart file containing 2 saves, both from the same game', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_FILE_2);\n\n    const segaSaturnSaveData = SarooSegaSaturnCartSaveData.createFromSarooData(sarooArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSize).to.equal(8388608);\n    expect(segaSaturnSaveData.getVolumeInfo().numFreeBlocks).to.equal(7989);\n    expect(segaSaturnSaveData.getVolumeInfo().numUsedBlocks).to.equal(75); // Header block + 7 directory blocks + 2 archive entry blocks + 4 data blocks (save 0) + 61 data blocks (save 1)\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getVolumeInfo().usedBlocks, ArrayUtil.createSequentialArray(0, 75))).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('DAYTONA96_0');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('English');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('RECORDS');\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Wed, 11 Dec 2024 13:07:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(9, 4))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(4033);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles()[1].name).to.equal('DAYTONA96_1');\n    expect(segaSaturnSaveData.getSaveFiles()[1].language).to.equal('English');\n    expect(segaSaturnSaveData.getSaveFiles()[1].comment).to.equal('GHOST');\n    expect(segaSaturnSaveData.getSaveFiles()[1].date.toUTCString()).to.equal('Wed, 11 Dec 2024 13:07:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[1].blockList, ArrayUtil.createSequentialArray(14, 61))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(61713);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(file2ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[1].rawData, file2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a Saroo cart save file containing 2 saves, both from the same game', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_RECREATED);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_FILE_2);\n\n    const gameSaveFiles = [\n      {\n        name: 'DAYTONA96_0',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'RECORDS',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Wed, 11 Dec 2024 13:07:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n      {\n        name: 'DAYTONA96_1',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'GHOST',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Wed, 11 Dec 2024 13:07:00 GMT')),\n        saveSize: file2ArrayBuffer.byteLength,\n        rawData: file2ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = SarooSegaSaturnCartSaveData.createFromSaveFiles(gameSaveFiles);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSize).to.equal(8388608);\n    expect(segaSaturnSaveData.getVolumeInfo().numFreeBlocks).to.equal(7989);\n    expect(segaSaturnSaveData.getVolumeInfo().numUsedBlocks).to.equal(75); // Header block + 7 directory blocks + 2 archive entry blocks + 4 data blocks (save 0) + 61 data blocks (save 1)\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getVolumeInfo().usedBlocks, ArrayUtil.createSequentialArray(0, 75))).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), sarooArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract saves from a Saroo extend file containing 3 saves, from 2 different games where one fits in the archive block', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_2_GAMES_3_SAVES);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_2_GAMES_3_SAVES_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_2_GAMES_3_SAVES_FILE_2);\n    const file3ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_2_GAMES_3_SAVES_FILE_3);\n\n    const segaSaturnSaveData = SarooSegaSaturnCartSaveData.createFromSarooData(sarooArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSize).to.equal(8388608);\n    expect(segaSaturnSaveData.getVolumeInfo().numFreeBlocks).to.equal(7988);\n    expect(segaSaturnSaveData.getVolumeInfo().numUsedBlocks).to.equal(76); // Header block + 7 directory blocks + 3 archive entry blocks + 4 data blocks (save 1) + 61 data blocks (save 2)\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getVolumeInfo().usedBlocks, ArrayUtil.createSequentialArray(0, 76))).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(3);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('BLASTWIND_0');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('ﾌﾞﾗｽﾄｳｲﾝﾄﾞ'); // \"Blast Wind\"\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Sun, 01 Dec 2024 21:55:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, [])).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(268);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles()[1].name).to.equal('DAYTONA96_0');\n    expect(segaSaturnSaveData.getSaveFiles()[1].language).to.equal('English');\n    expect(segaSaturnSaveData.getSaveFiles()[1].comment).to.equal('RECORDS');\n    expect(segaSaturnSaveData.getSaveFiles()[1].date.toUTCString()).to.equal('Thu, 05 Dec 2024 12:23:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[1].blockList, ArrayUtil.createSequentialArray(10, 4))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(4033);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(file2ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[1].rawData, file2ArrayBuffer)).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles()[2].name).to.equal('DAYTONA96_1');\n    expect(segaSaturnSaveData.getSaveFiles()[2].language).to.equal('English');\n    expect(segaSaturnSaveData.getSaveFiles()[2].comment).to.equal('GHOST');\n    expect(segaSaturnSaveData.getSaveFiles()[2].date.toUTCString()).to.equal('Thu, 05 Dec 2024 11:51:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[2].blockList, ArrayUtil.createSequentialArray(15, 61))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[2].saveSize).to.equal(61713);\n    expect(segaSaturnSaveData.getSaveFiles()[2].saveSize).to.equal(file3ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[2].rawData, file3ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a Saroo cart file containing 3 saves, from 2 different games where one fits in the archive block', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_2_GAMES_3_SAVES_RECREATED);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_2_GAMES_3_SAVES_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_2_GAMES_3_SAVES_FILE_2);\n    const file3ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_2_GAMES_3_SAVES_FILE_3);\n\n    const gameSaveFiles = [\n      {\n        name: 'BLASTWIND_0',\n        languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n        comment: 'ﾌﾞﾗｽﾄｳｲﾝﾄﾞ', // \"Blast Wind\"\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Sun, 01 Dec 2024 21:55:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n      {\n        name: 'DAYTONA96_0',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'RECORDS',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Thu, 05 Dec 2024 12:23:00 GMT')),\n        saveSize: file2ArrayBuffer.byteLength,\n        rawData: file2ArrayBuffer,\n      },\n      {\n        name: 'DAYTONA96_1',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'GHOST',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Thu, 05 Dec 2024 11:51:00 GMT')),\n        saveSize: file3ArrayBuffer.byteLength,\n        rawData: file3ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = SarooSegaSaturnCartSaveData.createFromSaveFiles(gameSaveFiles);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSize).to.equal(8388608);\n    expect(segaSaturnSaveData.getVolumeInfo().numFreeBlocks).to.equal(7988);\n    expect(segaSaturnSaveData.getVolumeInfo().numUsedBlocks).to.equal(76); // Header block + 7 directory blocks + 3 archive entry blocks + 4 data blocks (save 1) + 61 data blocks (save 2)\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getVolumeInfo().usedBlocks, ArrayUtil.createSequentialArray(0, 76))).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(3);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), sarooArrayBuffer)).to.equal(true);\n  });\n\n  it('should upsert a new save file', async () => {\n    const existingSaveFiles = [\n      {\n        name: 'ExistingSaveFile1',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'Comment1',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')),\n        saveSize: 1234,\n        rawData: null,\n      },\n    ];\n\n    const newSaveFiles = [\n      {\n        name: 'NewSaveFile1',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'Comment2',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')),\n        saveSize: 2345,\n        rawData: null,\n      },\n    ];\n\n    const combinedSaveFiles = SarooSegaSaturnCartSaveData.upsertGameSaveFiles(existingSaveFiles, newSaveFiles);\n\n    expect(combinedSaveFiles.length).to.equal(2);\n\n    expect(combinedSaveFiles[0].name).to.equal('ExistingSaveFile1');\n    expect(combinedSaveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedSaveFiles[0].comment).to.equal('Comment1');\n    expect(combinedSaveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')));\n    expect(combinedSaveFiles[0].saveSize).to.equal(1234);\n    expect(combinedSaveFiles[0].rawData).to.equal(null);\n\n    expect(combinedSaveFiles[1].name).to.equal('NewSaveFile1');\n    expect(combinedSaveFiles[1].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedSaveFiles[1].comment).to.equal('Comment2');\n    expect(combinedSaveFiles[1].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')));\n    expect(combinedSaveFiles[1].saveSize).to.equal(2345);\n    expect(combinedSaveFiles[1].rawData).to.equal(null);\n  });\n\n  it('should upsert an existing save file into an existing game', async () => {\n    const existingSaveFiles = [\n      {\n        name: 'ExistingSaveFile1',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'Comment1',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')),\n        saveSize: 1234,\n        rawData: null,\n      },\n    ];\n\n    const newSaveFiles = [\n      {\n        name: 'ExistingSaveFile1',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'NewComment2',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')),\n        saveSize: 2345,\n        rawData: null,\n      },\n    ];\n\n    const combinedSaveFiles = SarooSegaSaturnCartSaveData.upsertGameSaveFiles(existingSaveFiles, newSaveFiles);\n\n    expect(combinedSaveFiles.length).to.equal(1);\n\n    expect(combinedSaveFiles[0].name).to.equal('ExistingSaveFile1');\n    expect(combinedSaveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedSaveFiles[0].comment).to.equal('NewComment2');\n    expect(combinedSaveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')));\n    expect(combinedSaveFiles[0].saveSize).to.equal(2345);\n    expect(combinedSaveFiles[0].rawData).to.equal(null);\n  });\n\n  it('should upsert a new save file into an existing game and a new save file into an existing save file', async () => {\n    const existingSaveFiles = [\n      {\n        name: 'ExistingSaveFile1',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'Comment1',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 11:00:00 GMT')),\n        saveSize: 1234,\n        rawData: null,\n      },\n      {\n        name: 'ExistingSaveFile2',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'Comment2',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 12:00:00 GMT')),\n        saveSize: 2345,\n        rawData: null,\n      },\n    ];\n\n    const newSaveFiles = [\n      {\n        name: 'NewSaveFile2',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'Comment5',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')),\n        saveSize: 5678,\n        rawData: null,\n      },\n      {\n        name: 'ExistingSaveFile2',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'NewComment6',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 16:00:00 GMT')),\n        saveSize: 6789,\n        rawData: null,\n      },\n    ];\n\n    const combinedSaveFiles = SarooSegaSaturnCartSaveData.upsertGameSaveFiles(existingSaveFiles, newSaveFiles);\n\n    expect(combinedSaveFiles.length).to.equal(3);\n\n    expect(combinedSaveFiles[0].name).to.equal('ExistingSaveFile1');\n    expect(combinedSaveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedSaveFiles[0].comment).to.equal('Comment1');\n    expect(combinedSaveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 11:00:00 GMT')));\n    expect(combinedSaveFiles[0].saveSize).to.equal(1234);\n    expect(combinedSaveFiles[0].rawData).to.equal(null);\n\n    expect(combinedSaveFiles[1].name).to.equal('ExistingSaveFile2');\n    expect(combinedSaveFiles[1].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedSaveFiles[1].comment).to.equal('NewComment6');\n    expect(combinedSaveFiles[1].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 16:00:00 GMT')));\n    expect(combinedSaveFiles[1].saveSize).to.equal(6789);\n    expect(combinedSaveFiles[1].rawData).to.equal(null);\n\n    expect(combinedSaveFiles[2].name).to.equal('NewSaveFile2');\n    expect(combinedSaveFiles[2].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedSaveFiles[2].comment).to.equal('Comment5');\n    expect(combinedSaveFiles[2].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')));\n    expect(combinedSaveFiles[2].saveSize).to.equal(5678);\n    expect(combinedSaveFiles[2].rawData).to.equal(null);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaSaturn/Saroo/Internal.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport SarooSegaSaturnInternalSaveData from '@/save-formats/SegaSaturn/Saroo/Internal';\nimport ArrayUtil from '@/util/Array';\nimport SegaSaturnUtil from '@/save-formats/SegaSaturn/Util';\n\nconst DIR = './tests/data/save-formats/segasaturn/saroo';\n\nconst SAROO_FILENAME_EMPTY = `${DIR}/SS_SAVE_empty.BIN`;\n\nconst SAROO_FILENAME_2_GAMES = `${DIR}/SS_SAVE_2_games.BIN`;\nconst SAROO_FILENAME_2_GAMES_RECREATED = `${DIR}/SS_SAVE_2_games-recreated.BIN`; // Because the original has 2 game with empty saves that are represented differently from each other so we can't know how to represent each\nconst SAROO_FILENAME_2_GAMES_FILE_1 = `${DIR}/Hyper Duel (Japan).raw`;\nconst SAROO_FILENAME_2_GAMES_FILE_2 = `${DIR}/Dungeons and Dragons Collection (Japan) (Disc 2) (Shadows over Mystara).raw`;\n\nconst SAROO_1_GAME_2_SAVES = `${DIR}/SS_SAVE_1_game_2_saves.BIN`;\nconst SAROO_1_GAME_2_SAVES_FILE_1 = `${DIR}/Shining Force III Scenario 1 (English v25.1)-1.raw`;\nconst SAROO_1_GAME_2_SAVES_FILE_2 = `${DIR}/Shining Force III Scenario 1 (English v25.1)-2.raw`;\n\nconst SAROO_HUGE_FILENAME = `${DIR}/SS_SAVE_huge.BIN`;\n\ndescribe('Sega Saturn - Saroo internal', () => {\n  it('should parse an empty file', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_EMPTY);\n\n    const segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSarooData(sarooArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSlots).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n  });\n\n  it('should create an empty file', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_EMPTY);\n\n    const segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSaveFiles([]);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSlots).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), sarooArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract saves from a Saroo internal file containing 4 saves all for different games, 2 of which are empty', async () => {\n    // One save is empty by having a blank slot for that game ID\n    // The other save is empty by having 0 as the first save block number\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_2_GAMES);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_2_GAMES_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_2_GAMES_FILE_2);\n\n    const segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSarooData(sarooArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSlots).to.equal(5);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('HYPERDUEL_0');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('ﾊｲﾊﾟｰﾃﾞｭｴﾙ'); // \"Hyper Duel\"\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Thu, 01 Jun 2000 01:00:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, [2, 3, 4])).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(260);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles()[1].name).to.equal('CAP_DAD_002');\n    expect(segaSaturnSaveData.getSaveFiles()[1].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[1].comment).to.equal('D&Dｺﾚｸｼｮﾝ2'); // \"D&D Collection 2\"\n    expect(segaSaturnSaveData.getSaveFiles()[1].date.toUTCString()).to.equal('Sun, 01 Dec 2024 21:31:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[1].blockList, [2, 3, 4, 5])).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(416);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(file2ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[1].rawData, file2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a Saroo internal file containing saves for 4 different games, 2 of which are empty', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_2_GAMES_RECREATED);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_2_GAMES_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_2_GAMES_FILE_2);\n\n    const gameSaveFiles = [\n      {\n        gameId: 'T-1809G   V1.001', // Hyper Duel\n        saveFiles: [\n          {\n            name: 'HYPERDUEL_0',\n            languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n            comment: 'ﾊｲﾊﾟｰﾃﾞｭｴﾙ', // \"Hyper Duel\"\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Thu, 01 Jun 2000 01:00:00 GMT')),\n            saveSize: file1ArrayBuffer.byteLength,\n            rawData: file1ArrayBuffer,\n          },\n        ],\n      },\n      {\n        gameId: 'T-1810G   V1.003', // Blast Wind\n        saveFiles: [],\n      },\n      {\n        gameId: 'T-1245G   V1.000', // Dungeons and Dragons Collection\n        saveFiles: [\n          {\n            name: 'CAP_DAD_002',\n            languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n            comment: 'D&Dｺﾚｸｼｮﾝ2', // \"D&D Collection 2\"\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Sun, 01 Dec 2024 21:31:00 GMT')),\n            saveSize: file2ArrayBuffer.byteLength,\n            rawData: file2ArrayBuffer,\n          },\n        ],\n      },\n      {\n        gameId: 'T-2301H   V1.000', // Shinobi Legions\n        saveFiles: [],\n      },\n    ];\n\n    const segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSaveFiles(gameSaveFiles);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSlots).to.equal(5);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), sarooArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract saves from a Saroo internal file containing 2 saves, both from the same game', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_FILE_2);\n\n    const segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSarooData(sarooArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSlots).to.equal(2);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('SFORCE31_01');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('Euan-1A   ');\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Wed, 11 Dec 2024 14:25:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(2, 101))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(12904);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles()[1].name).to.equal('SFORCE31_02');\n    expect(segaSaturnSaveData.getSaveFiles()[1].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[1].comment).to.equal('Euan-1A   ');\n    expect(segaSaturnSaveData.getSaveFiles()[1].date.toUTCString()).to.equal('Wed, 11 Dec 2024 14:26:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[1].blockList, ArrayUtil.createSequentialArray(104, 101))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(12904);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(file2ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[1].rawData, file2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a Saroo internal file containing 2 saves, both from the same game', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_1_GAME_2_SAVES_FILE_2);\n\n    const gameSaveFiles = [\n      {\n        gameId: 'SF3TRANS  V25.1 ', // Shining Force III Scenario 1, translated\n        saveFiles: [\n          {\n            name: 'SFORCE31_01',\n            languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n            comment: 'Euan-1A   ',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Wed, 11 Dec 2024 14:25:00 GMT')),\n            saveSize: file1ArrayBuffer.byteLength,\n            rawData: file1ArrayBuffer,\n          },\n          {\n            name: 'SFORCE31_02',\n            languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n            comment: 'Euan-1A   ',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Wed, 11 Dec 2024 14:26:00 GMT')),\n            saveSize: file2ArrayBuffer.byteLength,\n            rawData: file2ArrayBuffer,\n          },\n        ],\n      },\n    ];\n\n    const segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSaveFiles(gameSaveFiles);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSlots).to.equal(2);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), sarooArrayBuffer)).to.equal(true);\n  });\n\n  it('should parse a Saroo internal file with a comment that is too long', async () => {\n    // It looks like the Saroo doesn't do sufficient error checking, and the game Nissan Presents: Over Drivin' GT-R\n    // (or, more specifically, its fan translation?) has a comment that is too long. The comment field is\n    // supposed to be 0xA bytes long but this one appears to be 0xF bytes long and so it stomps the next fields,\n    // which are the language and date\n\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_HUGE_FILENAME);\n\n    const segaSaturnSaveData = SarooSegaSaturnInternalSaveData.createFromSarooData(sarooArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().totalSlots).to.equal(159);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(75);\n\n    // There's a ton of saves in this file, so let's just test the one with the issue\n\n    expect(segaSaturnSaveData.getSaveFiles()[22].name).to.equal('GTR______00');\n    expect(segaSaturnSaveData.getSaveFiles()[22].language).to.equal('Unknown');\n    expect(segaSaturnSaveData.getSaveFiles()[22].languageCode).to.equal(68); // The 'D' in 'DATA'\n    expect(segaSaturnSaveData.getSaveFiles()[22].comment).to.equal('OVERDRIVIN'); // In the file, this appears to be the string \"OVERDRIVIN DATA\"\n    expect(segaSaturnSaveData.getSaveFiles()[22].date.toUTCString()).to.equal('Wed, 05 Dec 4063 08:04:00 GMT'); // Garbage date because it has been stomped\n    expect(segaSaturnSaveData.getSaveFiles()[22].dateCode).to.equal(0x41544100); // The 'ATA' in 'DATA' followed by a null\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[22].blockList, ArrayUtil.createSequentialArray(2, 26))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[22].saveSize).to.equal(3270);\n  });\n\n  it('should upsert a new game into existing save files', async () => {\n    const existingGameSaveFiles = [\n      {\n        gameId: 'ExistingGameId1',\n        saveFiles: [\n          {\n            name: 'ExistingSaveFile1',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment1',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')),\n            saveSize: 1234,\n            rawData: null,\n          },\n        ],\n      },\n    ];\n\n    const newGameSaveFiles = [\n      {\n        gameId: 'NewGameId1',\n        saveFiles: [\n          {\n            name: 'NewSaveFile1',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment2',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')),\n            saveSize: 2345,\n            rawData: null,\n          },\n        ],\n      },\n    ];\n\n    const combinedGameSaveFiles = SarooSegaSaturnInternalSaveData.upsertGameSaveFiles(existingGameSaveFiles, newGameSaveFiles);\n\n    expect(combinedGameSaveFiles.length).to.equal(2);\n\n    expect(combinedGameSaveFiles[0].gameId).to.equal('ExistingGameId1');\n    expect(combinedGameSaveFiles[0].saveFiles.length).to.equal(1);\n\n    expect(combinedGameSaveFiles[0].saveFiles[0].name).to.equal('ExistingSaveFile1');\n    expect(combinedGameSaveFiles[0].saveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[0].saveFiles[0].comment).to.equal('Comment1');\n    expect(combinedGameSaveFiles[0].saveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')));\n    expect(combinedGameSaveFiles[0].saveFiles[0].saveSize).to.equal(1234);\n    expect(combinedGameSaveFiles[0].saveFiles[0].rawData).to.equal(null);\n\n    expect(combinedGameSaveFiles[1].gameId).to.equal('NewGameId1');\n    expect(combinedGameSaveFiles[1].saveFiles.length).to.equal(1);\n\n    expect(combinedGameSaveFiles[1].saveFiles[0].name).to.equal('NewSaveFile1');\n    expect(combinedGameSaveFiles[1].saveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[1].saveFiles[0].comment).to.equal('Comment2');\n    expect(combinedGameSaveFiles[1].saveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')));\n    expect(combinedGameSaveFiles[1].saveFiles[0].saveSize).to.equal(2345);\n    expect(combinedGameSaveFiles[1].saveFiles[0].rawData).to.equal(null);\n  });\n\n  it('should upsert a new save file into an existing game', async () => {\n    const existingGameSaveFiles = [\n      {\n        gameId: 'ExistingGameId1',\n        saveFiles: [\n          {\n            name: 'ExistingSaveFile1',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment1',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')),\n            saveSize: 1234,\n            rawData: null,\n          },\n        ],\n      },\n    ];\n\n    const newGameSaveFiles = [\n      {\n        gameId: 'ExistingGameId1',\n        saveFiles: [\n          {\n            name: 'NewSaveFile1',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment2',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')),\n            saveSize: 2345,\n            rawData: null,\n          },\n        ],\n      },\n    ];\n\n    const combinedGameSaveFiles = SarooSegaSaturnInternalSaveData.upsertGameSaveFiles(existingGameSaveFiles, newGameSaveFiles);\n\n    expect(combinedGameSaveFiles.length).to.equal(1);\n\n    expect(combinedGameSaveFiles[0].gameId).to.equal('ExistingGameId1');\n    expect(combinedGameSaveFiles[0].saveFiles.length).to.equal(2);\n\n    expect(combinedGameSaveFiles[0].saveFiles[0].name).to.equal('ExistingSaveFile1');\n    expect(combinedGameSaveFiles[0].saveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[0].saveFiles[0].comment).to.equal('Comment1');\n    expect(combinedGameSaveFiles[0].saveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')));\n    expect(combinedGameSaveFiles[0].saveFiles[0].saveSize).to.equal(1234);\n    expect(combinedGameSaveFiles[0].saveFiles[0].rawData).to.equal(null);\n\n    expect(combinedGameSaveFiles[0].saveFiles[1].name).to.equal('NewSaveFile1');\n    expect(combinedGameSaveFiles[0].saveFiles[1].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[0].saveFiles[1].comment).to.equal('Comment2');\n    expect(combinedGameSaveFiles[0].saveFiles[1].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')));\n    expect(combinedGameSaveFiles[0].saveFiles[1].saveSize).to.equal(2345);\n    expect(combinedGameSaveFiles[0].saveFiles[1].rawData).to.equal(null);\n  });\n\n  it('should upsert an existing save file into an existing game', async () => {\n    const existingGameSaveFiles = [\n      {\n        gameId: 'ExistingGameId1',\n        saveFiles: [\n          {\n            name: 'ExistingSaveFile1',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment1',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')),\n            saveSize: 1234,\n            rawData: null,\n          },\n        ],\n      },\n    ];\n\n    const newGameSaveFiles = [\n      {\n        gameId: 'ExistingGameId1',\n        saveFiles: [\n          {\n            name: 'ExistingSaveFile1',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'NewComment2',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')),\n            saveSize: 2345,\n            rawData: null,\n          },\n        ],\n      },\n    ];\n\n    const combinedGameSaveFiles = SarooSegaSaturnInternalSaveData.upsertGameSaveFiles(existingGameSaveFiles, newGameSaveFiles);\n\n    expect(combinedGameSaveFiles.length).to.equal(1);\n\n    expect(combinedGameSaveFiles[0].gameId).to.equal('ExistingGameId1');\n    expect(combinedGameSaveFiles[0].saveFiles.length).to.equal(1);\n\n    expect(combinedGameSaveFiles[0].saveFiles[0].name).to.equal('ExistingSaveFile1');\n    expect(combinedGameSaveFiles[0].saveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[0].saveFiles[0].comment).to.equal('NewComment2');\n    expect(combinedGameSaveFiles[0].saveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')));\n    expect(combinedGameSaveFiles[0].saveFiles[0].saveSize).to.equal(2345);\n    expect(combinedGameSaveFiles[0].saveFiles[0].rawData).to.equal(null);\n  });\n\n  it('should upsert a new game, a new save file into an existing game, and a new save file into an existing save file', async () => {\n    const existingGameSaveFiles = [\n      {\n        gameId: 'ExistingGameId1',\n        saveFiles: [\n          {\n            name: 'ExistingSaveFile1',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment1',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 11:00:00 GMT')),\n            saveSize: 1234,\n            rawData: null,\n          },\n          {\n            name: 'ExistingSaveFile2',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment2',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 12:00:00 GMT')),\n            saveSize: 2345,\n            rawData: null,\n          },\n        ],\n      },\n      {\n        gameId: 'ExistingGameId2',\n        saveFiles: [\n          {\n            name: 'ExistingSaveFile3',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment3',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 13:00:00 GMT')),\n            saveSize: 3456,\n            rawData: null,\n          },\n        ],\n      },\n    ];\n\n    const newGameSaveFiles = [\n      {\n        gameId: 'NewGameId1',\n        saveFiles: [\n          {\n            name: 'NewSaveFile1',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment4',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')),\n            saveSize: 4567,\n            rawData: null,\n          },\n        ],\n      },\n      {\n        gameId: 'ExistingGameId1',\n        saveFiles: [\n          {\n            name: 'NewSaveFile2',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'Comment5',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')),\n            saveSize: 5678,\n            rawData: null,\n          },\n          {\n            name: 'ExistingSaveFile2',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'NewComment6',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 16:00:00 GMT')),\n            saveSize: 6789,\n            rawData: null,\n          },\n        ],\n      },\n      {\n        gameId: 'ExistingGameId2',\n        saveFiles: [\n          {\n            name: 'ExistingSaveFile3',\n            languageCode: SegaSaturnUtil.getLanguageCode('English'),\n            comment: 'NewComment7',\n            dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 17:00:00 GMT')),\n            saveSize: 7890,\n            rawData: null,\n          },\n        ],\n      },\n    ];\n\n    const combinedGameSaveFiles = SarooSegaSaturnInternalSaveData.upsertGameSaveFiles(existingGameSaveFiles, newGameSaveFiles);\n\n    expect(combinedGameSaveFiles.length).to.equal(3);\n\n    expect(combinedGameSaveFiles[0].gameId).to.equal('ExistingGameId1');\n    expect(combinedGameSaveFiles[0].saveFiles.length).to.equal(3);\n\n    expect(combinedGameSaveFiles[0].saveFiles[0].name).to.equal('ExistingSaveFile1');\n    expect(combinedGameSaveFiles[0].saveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[0].saveFiles[0].comment).to.equal('Comment1');\n    expect(combinedGameSaveFiles[0].saveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 11:00:00 GMT')));\n    expect(combinedGameSaveFiles[0].saveFiles[0].saveSize).to.equal(1234);\n    expect(combinedGameSaveFiles[0].saveFiles[0].rawData).to.equal(null);\n\n    expect(combinedGameSaveFiles[0].saveFiles[1].name).to.equal('ExistingSaveFile2');\n    expect(combinedGameSaveFiles[0].saveFiles[1].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[0].saveFiles[1].comment).to.equal('NewComment6');\n    expect(combinedGameSaveFiles[0].saveFiles[1].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 16:00:00 GMT')));\n    expect(combinedGameSaveFiles[0].saveFiles[1].saveSize).to.equal(6789);\n    expect(combinedGameSaveFiles[0].saveFiles[1].rawData).to.equal(null);\n\n    expect(combinedGameSaveFiles[0].saveFiles[2].name).to.equal('NewSaveFile2');\n    expect(combinedGameSaveFiles[0].saveFiles[2].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[0].saveFiles[2].comment).to.equal('Comment5');\n    expect(combinedGameSaveFiles[0].saveFiles[2].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 15:00:00 GMT')));\n    expect(combinedGameSaveFiles[0].saveFiles[2].saveSize).to.equal(5678);\n    expect(combinedGameSaveFiles[0].saveFiles[2].rawData).to.equal(null);\n\n    expect(combinedGameSaveFiles[1].gameId).to.equal('ExistingGameId2');\n    expect(combinedGameSaveFiles[1].saveFiles.length).to.equal(1);\n\n    expect(combinedGameSaveFiles[1].saveFiles[0].name).to.equal('ExistingSaveFile3');\n    expect(combinedGameSaveFiles[1].saveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[1].saveFiles[0].comment).to.equal('NewComment7');\n    expect(combinedGameSaveFiles[1].saveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 17:00:00 GMT')));\n    expect(combinedGameSaveFiles[1].saveFiles[0].saveSize).to.equal(7890);\n    expect(combinedGameSaveFiles[1].saveFiles[0].rawData).to.equal(null);\n\n    expect(combinedGameSaveFiles[2].gameId).to.equal('NewGameId1');\n    expect(combinedGameSaveFiles[2].saveFiles.length).to.equal(1);\n\n    expect(combinedGameSaveFiles[2].saveFiles[0].name).to.equal('NewSaveFile1');\n    expect(combinedGameSaveFiles[2].saveFiles[0].languageCode).to.equal(SegaSaturnUtil.getLanguageCode('English'));\n    expect(combinedGameSaveFiles[2].saveFiles[0].comment).to.equal('Comment4');\n    expect(combinedGameSaveFiles[2].saveFiles[0].dateCode).to.equal(SegaSaturnUtil.getDateCode(new Date('Tue, 7 Jan 2025 14:00:00 GMT')));\n    expect(combinedGameSaveFiles[2].saveFiles[0].saveSize).to.equal(4567);\n    expect(combinedGameSaveFiles[2].saveFiles[0].rawData).to.equal(null);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaSaturn/Saroo/System.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport SarooSegaSaturnSystemSaveData from '@/save-formats/SegaSaturn/Saroo/System';\n\nconst DIR = './tests/data/save-formats/segasaturn/saroo';\n\nconst SAROO_FILENAME_EMPTY = `${DIR}/SS_BUP_empty.BIN`; // I've only ever seen an empty file here. Not a strong need to test others though because it's essentially just a regular Saturn save and we have more robust testing for that class\n\ndescribe('Sega Saturn - Saroo system', () => {\n  it('should parse an empty file', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_EMPTY);\n\n    const segaSaturnSaveData = SarooSegaSaturnSystemSaveData.createFromSarooData(sarooArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(0);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(510); // A real saturn will report 461 blocks free when the internal memory is empty. This is because it's estimating the amount of space that the various file headers will take: https://www.reddit.com/r/SegaSaturn/comments/y1rsaf/comment/ismy6wt/\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n  });\n\n  it('should create an empty file', async () => {\n    const sarooArrayBuffer = await ArrayBufferUtil.readArrayBuffer(SAROO_FILENAME_EMPTY);\n\n    const segaSaturnSaveData = SarooSegaSaturnSystemSaveData.createFromSaveFiles([]);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(0);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(510); // A real saturn will report 461 blocks free when the internal memory is empty. This is because it's estimating the amount of space that the various file headers will take: https://www.reddit.com/r/SegaSaturn/comments/y1rsaf/comment/ismy6wt/\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), sarooArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/SegaSaturn/SegaSaturn.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport ArrayUtil from '@/util/Array';\n\nimport SegaSaturnSaveData from '@/save-formats/SegaSaturn/SegaSaturn';\nimport SegaSaturnUtil from '@/save-formats/SegaSaturn/Util';\n\nconst DIR = './tests/data/save-formats/segasaturn';\n\nconst EMPTY_SAVE = `${DIR}/Empty save.bkr`;\n\nconst INTERNAL_MEMORY_FILE_FILENAME = `${DIR}/Hyper Duel (Japan).bkr`;\nconst INTERNAL_MEMORY_FILE_FILENAME_FILE_1 = `${DIR}/Hyper Duel (Japan)-1.raw`;\n\nconst CARTRIDGE_MEMORY_FILE_FILENAME = `${DIR}/Daytona USA - Championship Circuit Edition (USA)-uncompressed.bcr`;\nconst CARTRIDGE_MEMORY_FILE_FILENAME_RECREATED = `${DIR}/Daytona USA - Championship Circuit Edition (USA)-uncompressed-recreated.bcr`; // Our output is very similar to the BIO's output, except that it has some non-zero garbage in the comment field after the null-terminated text\nconst CARTRIDGE_MEMORY_FILE_FILENAME_FILE_1 = `${DIR}/Daytona USA - Championship Circuit Edition (USA)-1.raw`;\nconst CARTRIDGE_MEMORY_FILE_FILENAME_FILE_2 = `${DIR}/Daytona USA - Championship Circuit Edition (USA)-2.raw`;\n\nconst INTERNAL_MEMORY_SMALL_FILE_FILENAME = `${DIR}/Dezaemon 2 (Japan).bkr`;\nconst INTERNAL_MEMORY_SMALL_FILE_FILENAME_FILE_1 = `${DIR}/Dezaemon 2 (Japan)-1.raw`;\n\nconst INTERNAL_MEMORY_LARGE_FILE_FILENAME = `${DIR}/Shining Force III Scenario 3 (English v25.1).bkr`;\nconst INTERNAL_MEMORY_LARGE_FILE_FILENAME_FILE_1 = `${DIR}/Shining Force III Scenario 3 (English v25.1)-1.raw`;\n\nconst CARTRIDGE_MEMORY_LARGE_FILE_FILENAME = `${DIR}/Shining Force III Scenario 3 (English v25.1)-uncompressed.bcr`;\nconst CARTRIDGE_MEMORY_LARGE_FILE_FILENAME_FILE_1 = `${DIR}/Shining Force III Scenario 3 (English v25.1)-cart-1.raw`; // Virtually identical to INTERNAL_MEMORY_LARGE_FILE_FILENAME_FILE_1 but 3 bytes of game data are different\n\ndescribe('Sega Saturn', () => {\n  it('should correctly read an empty internal memory save file', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMPTY_SAVE);\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(0);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(510); // A real saturn will report 461 blocks free when the internal memory is empty. This is because it's estimating the amount of space that the various file headers will take: https://www.reddit.com/r/SegaSaturn/comments/y1rsaf/comment/ismy6wt/\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n  });\n\n  it('should correctly create an empty internal memory save file', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EMPTY_SAVE);\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles([], 0x40);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(0);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(510); // A real saturn will report 461 blocks free when the internal memory is empty. This is because it's estimating the amount of space that the various file headers will take: https://www.reddit.com/r/SegaSaturn/comments/y1rsaf/comment/ismy6wt/\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(0);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract a save from an internal memory file containing 1 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME_FILE_1);\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(5);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(505);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('HYPERDUEL_0');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('ﾊｲﾊﾟｰﾃﾞｭｴﾙ'); // \"Hyper Duel\"\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Wed, 31 May 2000 01:00:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(3, 4))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(260);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create an internal memory file containing 1 save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_FILE_FILENAME_FILE_1);\n\n    const saveFiles = [\n      {\n        name: 'HYPERDUEL_0',\n        languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n        comment: 'ﾊｲﾊﾟｰﾃﾞｭｴﾙ', // \"Hyper Duel\"\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Wed, 31 May 2000 01:00:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, 0x40);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(5);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(505);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract saves from a cartridge memory file containing 2 saves', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME_FILE_2);\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x200);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(524288);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(1022);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(132);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(890);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('DAYTONA96_0');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('English');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('RECORDS');\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Mon, 28 Oct 2024 13:27:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(3, 8))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(4033);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n\n    expect(segaSaturnSaveData.getSaveFiles()[1].name).to.equal('DAYTONA96_1');\n    expect(segaSaturnSaveData.getSaveFiles()[1].language).to.equal('English');\n    expect(segaSaturnSaveData.getSaveFiles()[1].comment).to.equal('GHOST');\n    expect(segaSaturnSaveData.getSaveFiles()[1].date.toUTCString()).to.equal('Mon, 28 Oct 2024 13:27:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[1].blockList, ArrayUtil.createSequentialArray(12, 122))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(61713);\n    expect(segaSaturnSaveData.getSaveFiles()[1].saveSize).to.equal(file2ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[1].rawData, file2ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a cartridge memory file containing 2 saves', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME_RECREATED);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME_FILE_1);\n    const file2ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_FILE_FILENAME_FILE_2);\n\n    const saveFiles = [\n      {\n        name: 'DAYTONA96_0',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'RECORDS',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Mon, 28 Oct 2024 13:27:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n      {\n        name: 'DAYTONA96_1',\n        languageCode: SegaSaturnUtil.getLanguageCode('English'),\n        comment: 'GHOST',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Mon, 28 Oct 2024 13:27:00 GMT')),\n        saveSize: file2ArrayBuffer.byteLength,\n        rawData: file2ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, 0x200);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x200);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(524288);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(1022);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(132);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(890);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(2);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract a save from an internal memory file containing 1 save which fits in a single block', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_SMALL_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_SMALL_FILE_FILENAME_FILE_1);\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(1);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(509);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('DEZA2___SYS');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('ﾃﾞｻﾞ2_ｼｽﾃﾑ'); // \"Deza 2_system\"\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Tue, 29 Oct 2024 12:27:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, [])).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(17);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create an internal memory file containing 1 save which fits in a single block', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_SMALL_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_SMALL_FILE_FILENAME_FILE_1);\n\n    const saveFiles = [\n      {\n        name: 'DEZA2___SYS',\n        languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n        comment: 'ﾃﾞｻﾞ2_ｼｽﾃﾑ', // \"Deza 2_system\"\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 29 Oct 2024 12:27:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, 0x40);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(1);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(509);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract a save from an internal memory file containing 1 save where the block list does not fit in the first block', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_LARGE_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_LARGE_FILE_FILENAME_FILE_1);\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(421);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(89);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('SFORCE33_01');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('Julian    ');\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Tue, 29 Oct 2024 16:45:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(3, 420))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(24344);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create an internal memory file containing 1 save where the block list does not fit in the first block', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_LARGE_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MEMORY_LARGE_FILE_FILENAME_FILE_1);\n\n    const saveFiles = [\n      {\n        name: 'SFORCE33_01',\n        languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n        comment: 'Julian    ',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 29 Oct 2024 16:45:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, 0x40);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x40);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(32768);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(510);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(421);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(89);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n\n  it('should extract a save from a cartridge file containing 1 save which was the same as the one that did not fit in the first block of an internal memory save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_LARGE_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_LARGE_FILE_FILENAME_FILE_1);\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSegaSaturnData(segaSaturnArrayBuffer);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x200);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(524288);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(1022);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(49); // This save used 49*512 bytes = 25,088 bytes. Above, the same data used 435*64 bytes = 27,840 bytes due to the smaller block size and thus need to store extra blocks containing the block list\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(973);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(segaSaturnSaveData.getSaveFiles()[0].name).to.equal('SFORCE33_01');\n    expect(segaSaturnSaveData.getSaveFiles()[0].language).to.equal('Japanese');\n    expect(segaSaturnSaveData.getSaveFiles()[0].comment).to.equal('Julian    ');\n    expect(segaSaturnSaveData.getSaveFiles()[0].date.toUTCString()).to.equal('Tue, 29 Oct 2024 16:45:00 GMT');\n    expect(ArrayUtil.arraysEqual(segaSaturnSaveData.getSaveFiles()[0].blockList, ArrayUtil.createSequentialArray(3, 48))).to.equal(true);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(24344);\n    expect(segaSaturnSaveData.getSaveFiles()[0].saveSize).to.equal(file1ArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getSaveFiles()[0].rawData, file1ArrayBuffer)).to.equal(true);\n  });\n\n  it('should create a cartridge file containing 1 save which was the same as the one that did not fit in the first block of an internal memory save', async () => {\n    const segaSaturnArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_LARGE_FILE_FILENAME);\n    const file1ArrayBuffer = await ArrayBufferUtil.readArrayBuffer(CARTRIDGE_MEMORY_LARGE_FILE_FILENAME_FILE_1);\n\n    const saveFiles = [\n      {\n        name: 'SFORCE33_01',\n        languageCode: SegaSaturnUtil.getLanguageCode('Japanese'),\n        comment: 'Julian    ',\n        dateCode: SegaSaturnUtil.getDateCode(new Date('Tue, 29 Oct 2024 16:45:00 GMT')),\n        saveSize: file1ArrayBuffer.byteLength,\n        rawData: file1ArrayBuffer,\n      },\n    ];\n\n    const segaSaturnSaveData = SegaSaturnSaveData.createFromSaveFiles(saveFiles, 0x200);\n\n    expect(segaSaturnSaveData.getVolumeInfo().blockSize).to.equal(0x200);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBytes).to.equal(524288);\n    expect(segaSaturnSaveData.getVolumeInfo().totalBlocks).to.equal(1022);\n    expect(segaSaturnSaveData.getVolumeInfo().usedBlocks).to.equal(49);\n    expect(segaSaturnSaveData.getVolumeInfo().freeBlocks).to.equal(973);\n\n    expect(segaSaturnSaveData.getSaveFiles().length).to.equal(1);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(segaSaturnSaveData.getArrayBuffer(), segaSaturnArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Wii/ConvertFrom/ConvertFromN64.spec.js",
    "content": "import { expect } from 'chai';\nimport ConvertFromN64 from '@/save-formats/Wii/ConvertFrom/ConvertFromN64';\n\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/wii/n64';\n\n// One save of each type from here: http://micro-64.com/database/gamesave.shtml\n\n// Maybe we should find a game where the extracted file is 2kB in size? The code we based the conversion off of seemed to think they exist\n\n// 0.5kB EEPROM\n// Curiously, the extracted file is 16kB in size, which is then cut down to 2kB by the conversion process. Loads fine in mupen64plus\nconst EEPROM_05KB_EXTRACTED_FILENAME = `${DIR}/super-mario-64.14546-extracted.bin`;\nconst EEPROM_05KB_RAW_FILENAME = `${DIR}/super-mario-64.14546-raw.eep`;\n\n// 2kB EEPROM\n// Again, the extracted file is 16kB in size, which is then cut down to 2kB\nconst EEPROM_2KB_EXTRACTED_FILENAME = `${DIR}/yoshis-story.17238-extracted.bin`;\nconst EEPROM_2KB_RAW_FILENAME = `${DIR}/yoshis-story.17238-raw.eep`;\n\n// 32kB SRAM (on cart)\nconst SRAM_32KB_CART_EXTRACTED_FILENAME = `${DIR}/f-zero-x.15165-extracted.bin`;\nconst SRAM_32KB_CART_RAW_FILENAME = `${DIR}/f-zero-x.15165-raw.sra`;\n\n// 32kB SRAM (on Controller Pak)\n// The extracted file here is 16kB in size\nconst SRAM_32KB_CONTROLLER_PAK_EXTRACTED_FILENAME = `${DIR}/mario-kart-64.14534-extracted.bin`;\nconst SRAM_32KB_CONTROLLER_PAK_RAW_FILENAME = `${DIR}/mario-kart-64.14534-raw.eep`;\n\n// 128kB Flash RAM\nconst FLASHRAM_128KB_CART_EXTRACTED_FILENAME = `${DIR}/paper-mario.17225-extracted.bin`;\nconst FLASHRAM_128KB_CART_RAW_FILENAME = `${DIR}/paper-mario.17225-raw.fla`;\n\n// 128kB Flash RAM (but extracted file is 256kB in size). Not sure if it's just has its save type listed incorrectly on that site, or if something else is going on\nconst FLASHRAM_128KB_CART_BUT_BIG_FILE_EXTRACTED_FILENAME = `${DIR}/the-legend-of-zelda-majoras-mask.19354-extracted.bin`;\nconst FLASHRAM_128KB_CART_BUT_BIG_FILE_RAW_FILENAME = `${DIR}/the-legend-of-zelda-majoras-mask.19354-raw.fla`;\n\n// RAM_NMFE\nconst RAM_NMFE_EXTRACTED_FILENAME = `${DIR}/mario-golf.23681-extracted.bin`;\nconst RAW_RAM_NFME_EXTRACTED_FILENAME = `${DIR}/mario-golf.23681-raw.sra`;\n\nconst REGULAR_INTERNAL_FILENAME = 'savedata.bin';\nconst RAM_NMFE_INTERNAL_FILENAME = 'RAM_NMFE';\n\ndescribe('Convert from the Wii N64 formats', () => {\n  it('should convert a 0.5kB EEPROM game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(EEPROM_05KB_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(EEPROM_05KB_RAW_FILENAME);\n\n    const convertedData = ConvertFromN64(extractedData, REGULAR_INTERNAL_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('eep');\n  });\n\n  it('should convert a 2kB EEPROM game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(EEPROM_2KB_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(EEPROM_2KB_RAW_FILENAME);\n\n    const convertedData = ConvertFromN64(extractedData, REGULAR_INTERNAL_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('eep');\n  });\n\n  it('should convert a 32kB SRAM (on cart) game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(SRAM_32KB_CART_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(SRAM_32KB_CART_RAW_FILENAME);\n\n    const convertedData = ConvertFromN64(extractedData, REGULAR_INTERNAL_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('sra');\n  });\n\n  it('should convert a 32kB SRAM (on Controller Pak) game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(SRAM_32KB_CONTROLLER_PAK_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(SRAM_32KB_CONTROLLER_PAK_RAW_FILENAME);\n\n    const convertedData = ConvertFromN64(extractedData, REGULAR_INTERNAL_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('eep');\n  });\n\n  it('should convert a 128kB Flash RAM game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(FLASHRAM_128KB_CART_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(FLASHRAM_128KB_CART_RAW_FILENAME);\n\n    const convertedData = ConvertFromN64(extractedData, REGULAR_INTERNAL_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('fla');\n  });\n\n  it('should convert a 128kB Flash RAM game that has a big extracted file correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(FLASHRAM_128KB_CART_BUT_BIG_FILE_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(FLASHRAM_128KB_CART_BUT_BIG_FILE_RAW_FILENAME);\n\n    const convertedData = ConvertFromN64(extractedData, REGULAR_INTERNAL_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('fla');\n  });\n\n  it('should convert a 32kB SRAM game with an internal filename of RAM_NMFE correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(RAM_NMFE_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(RAW_RAM_NFME_EXTRACTED_FILENAME);\n\n    const convertedData = ConvertFromN64(extractedData, RAM_NMFE_INTERNAL_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('sra');\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Wii/ConvertFrom/ConvertFromPcEngine.spec.js",
    "content": "import { expect } from 'chai';\nimport ConvertFromPcEngine from '@/save-formats/Wii/ConvertFrom/ConvertFromPcEngine';\n\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/wii/pcengine';\n\nconst CASTLEVANIA_MY_EXTRACTED_FILENAME = `${DIR}/Castlevania - Rondo of Blood (my save) - extracted.bup`;\nconst CASTLEVANIA_MY_RAW_FILENAME = `${DIR}/Castlevania - Rondo of Blood (my save) - raw.sav`;\n\nconst CASTLEVANIA_TEST_EXTRACTED_FILENAME = `${DIR}/Castlevania - Rondo of Blood (test save) - extracted.bup`;\nconst CASTLEVANIA_TEST_RAW_FILENAME = `${DIR}/Castlevania - Rondo of Blood (test save) - raw.sav`;\n\nconst BOMBERMAN_EXTRACTED_FILENAME = `${DIR}/bomberman-93.20114 - extracted.bup`;\nconst BOMBERMAN_RAW_FILENAME = `${DIR}/bomberman-93.20114 - raw.sav`;\n\nconst NEUTOPIA_EXTRACTED_FILENAME = `${DIR}/neutopia-ii.21439 - extracted.bup`;\nconst NEUTOPIA_RAW_FILENAME = `${DIR}/neutopia-ii.21439 - raw.sav`;\n\nconst LODERUNNER_EXTRACTED_FILENAME = `${DIR}/battle-lode-runner.16193 - extracted.bup`;\nconst LODERUNNER_RAW_FILENAME = `${DIR}/battle-lode-runner.16193 - raw.sav`;\n\ndescribe('Convert from the Wii PC Engine format', () => {\n  it('should convert Castlevania - Rondo of Blood (my save) correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(CASTLEVANIA_MY_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(CASTLEVANIA_MY_RAW_FILENAME);\n\n    const convertedData = ConvertFromPcEngine(extractedData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('sav');\n  });\n\n  it('should convert Castlevania - Rondo of Blood (test save) correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(CASTLEVANIA_TEST_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(CASTLEVANIA_TEST_RAW_FILENAME);\n\n    const convertedData = ConvertFromPcEngine(extractedData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('sav');\n  });\n\n  it('should convert Bomberman \\'93 correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(BOMBERMAN_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(BOMBERMAN_RAW_FILENAME);\n\n    const convertedData = ConvertFromPcEngine(extractedData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('sav');\n  });\n\n  it('should convert Neutopia II correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(NEUTOPIA_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(NEUTOPIA_RAW_FILENAME);\n\n    const convertedData = ConvertFromPcEngine(extractedData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('sav');\n  });\n\n  it('should convert Battle Lode Runner correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(LODERUNNER_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(LODERUNNER_RAW_FILENAME);\n\n    const convertedData = ConvertFromPcEngine(extractedData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('sav');\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Wii/ConvertFrom/ConvertFromSega.spec.js",
    "content": "import { expect } from 'chai';\nimport ConvertFromSega from '@/save-formats/Wii/ConvertFrom/ConvertFromSega';\n\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/wii/sega';\n\nconst MASTER_SYSTEM_EXTRACTED_FILENAME = `${DIR}/phantasy-star.21604-extracted.bin`; // This one contains \"compound data\"\nconst MASTER_SYSTEM_RAW_FILENAME = `${DIR}/phantasy-star.21604-raw.bin`;\n\nconst GENESIS_SRAM_EXTRACTED_FILENAME = `${DIR}/phantasy-star-ii.18168-extracted.bin`; // This one does not contain \"compound data\"\nconst GENESIS_SRAM_RAW_FILENAME = `${DIR}/phantasy-star-ii.18168-raw.bin`;\n\nconst GENESIS_EEPROM_EXTRACTED_FILENAME = `${DIR}/wonder-boy-in-monster-world-extracted.bin`; // This one does not contain \"compound data\"\nconst GENESIS_EEPROM_RAW_FILENAME = `${DIR}/wonder-boy-in-monster-world-raw.bin`;\n\nconst GENESIS_FRAM_EXTRACTED_FILENAME = `${DIR}/sonic-the-hedgehog-3.18899-extracted.bin`; // This one does not contain \"compound data\"\nconst GENESIS_FRAM_RAW_FILENAME = `${DIR}/sonic-the-hedgehog-3.18899-raw.bin`;\n\ndescribe('Convert from the Wii Sega formats', () => {\n  it('should convert a Master System game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(MASTER_SYSTEM_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(MASTER_SYSTEM_RAW_FILENAME);\n\n    const convertedData = ConvertFromSega(extractedData, 'VC-SMS');\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('sav');\n  });\n\n  it('should convert a Genesis SRAM game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(GENESIS_SRAM_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(GENESIS_SRAM_RAW_FILENAME);\n\n    const convertedData = ConvertFromSega(extractedData, 'VC-MD', 'MB8E'); // MB8E = Phantasy Star II\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('srm');\n  });\n\n  it('should convert a Genesis EEPROM game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(GENESIS_EEPROM_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(GENESIS_EEPROM_RAW_FILENAME);\n\n    const convertedData = ConvertFromSega(extractedData, 'VC-MD', 'MAVE'); // MAVE = Wonder Boy in Monster World\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('srm');\n  });\n\n  it('should convert a Genesis FRAM game correctly', async () => {\n    const extractedData = await ArrayBufferUtil.readArrayBuffer(GENESIS_FRAM_EXTRACTED_FILENAME);\n    const expectedRawData = await ArrayBufferUtil.readArrayBuffer(GENESIS_FRAM_RAW_FILENAME);\n\n    const convertedData = ConvertFromSega(extractedData, 'VC-MD', 'MBME'); // MBME = Sonic 3\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(convertedData.saveData, expectedRawData)).to.equal(true);\n    expect(convertedData.fileExtension).to.equal('srm');\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Wii/GetPlatform/GetPlatform.spec.js",
    "content": "import { expect } from 'chai';\nimport GetPlatform from '@/save-formats/Wii/GetPlatform/GetPlatform';\nimport getHttpClient from '@/save-formats/Wii/GetPlatform/HttpClient';\nimport getMockHttpClient from '#/unit/save-formats/Wii/GetPlatform/MockHttpClient';\n\nconst accessInternet = false; // Used to check if the website we're hitting changes their format in the future. Set to false to use the local copies of the HTML stored in this repo, set to true to hit the actual website and download the HTML\n\nconst TEST_TIMEOUT = 10000; // ms\n\ndescribe('Get Wii platform', function () { // eslint-disable-line func-names\n  // No arrow function above so that 'this' binds correctly\n  this.timeout(TEST_TIMEOUT);\n\n  before(() => {\n    const httpClient = accessInternet ? getHttpClient(GetPlatform.getBaseUrl()) : getMockHttpClient();\n\n    this.getPlatform = new GetPlatform(httpClient);\n  });\n\n  it('should get the correct VC platform for an NES game', async () => {\n    const gameInfo = await this.getPlatform.get('FBNE'); // Ninja Gaiden\n    expect(gameInfo.platform).equals('VC-NES');\n    expect(gameInfo.region).equals('North America');\n  });\n\n  it('should get the correct VC platform for a SNES game', async () => {\n    const gameInfo = await this.getPlatform.get('JECE'); // Chrono Trigger\n    expect(gameInfo.platform).equals('VC-SNES');\n    expect(gameInfo.region).equals('North America');\n  });\n\n  it('should get the correct VC platform for an N64 game', async () => {\n    const gameInfo = await this.getPlatform.get('NADJ'); // Star Fox 64\n    expect(gameInfo.platform).equals('VC-N64');\n    expect(gameInfo.region).equals('Japan');\n  });\n\n  it('should get the correct VC platform for a Turbografx 16 game', async () => {\n    const gameInfo = await this.getPlatform.get('QAPN'); // Castlevania: Rondo of Blood\n    expect(gameInfo.platform).equals('VC-PCE');\n    expect(gameInfo.region).equals('North America');\n  });\n\n  it('should get the correct VC platform for a Master System game', async () => {\n    const gameInfo = await this.getPlatform.get('LADE'); // Phantasy Star\n    expect(gameInfo.platform).equals('VC-SMS');\n    expect(gameInfo.region).equals('North America');\n  });\n\n  it('should get the correct VC platform for a Genesis game', async () => {\n    const gameInfo = await this.getPlatform.get('MC4E'); // Strider\n    expect(gameInfo.platform).equals('VC-MD');\n    expect(gameInfo.region).equals('North America');\n  });\n\n  it('should get the correct VC platform for a Neo Geo game', async () => {\n    const gameInfo = await this.getPlatform.get('EAEP'); // Samurai Shodown\n    expect(gameInfo.platform).equals('VC-NEOGEO');\n    expect(gameInfo.region).equals('Europe');\n  });\n\n  it('should get the correct VC platform for a C64 game', async () => {\n    const gameInfo = await this.getPlatform.get('C97E'); // California Games\n    expect(gameInfo.platform).equals('VC-C64');\n    expect(gameInfo.region).equals('North America');\n  });\n\n  it('should get the correct VC platform for an arcade game', async () => {\n    const gameInfo = await this.getPlatform.get('E6ZJ'); // Star Force\n    expect(gameInfo.platform).equals('VC-Arcade');\n    expect(gameInfo.region).equals('Japan');\n  });\n\n  it('should recognize a WiiWare game', async () => {\n    const gameInfo = await this.getPlatform.get('WKTE'); // Contra Rebirth\n    expect(gameInfo.platform).equals('WiiWare');\n    expect(gameInfo.region).equals('North America');\n  });\n\n  it('should recognize a Wii game', async () => {\n    const gameInfo = await this.getPlatform.get('R3OP01'); // Metroid: Other M\n    expect(gameInfo.platform).equals('Wii');\n    expect(gameInfo.region).equals('Europe');\n  });\n\n  it('should recognize a Homebrew game', async () => {\n    const gameInfo = await this.getPlatform.get('D40A'); // Luigi and the Island of Mystery\n    expect(gameInfo.platform).equals('Homebrew');\n    expect(gameInfo.region).equals(GetPlatform.unknownRegion());\n  });\n\n  it('should recognize a game without a platform listed', async () => {\n    // Some titles in the downloadable XML document don't have any platform listed. Those seem to get\n    // listed as 'Wii' when viewed on the main site\n    const gameInfo = await this.getPlatform.get('DAXE01'); // The Legend of Zelda: Skyward Sword (Demo)\n    expect(gameInfo.platform).equals('Wii');\n    expect(gameInfo.region).equals('North America');\n  });\n\n  it('should not recognize an unknown game', async () => {\n    const gameInfo = await this.getPlatform.get('ABCD');\n    expect(gameInfo.platform).equals(GetPlatform.unknownPlatform());\n    expect(gameInfo.region).equals(GetPlatform.unknownRegion());\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Wii/GetPlatform/MockHttpClient.js",
    "content": "import { readFile } from 'fs/promises';\n\nconst FILE_LOCATION = './tests/data/save-formats/wii/gametdb';\nconst ENCODING = 'utf8';\n\nexport default function getMockHttpClient() {\n  return {\n    get: async (gameId) => {\n      const filename = `${FILE_LOCATION}/${gameId}.html`;\n\n      try {\n        const data = await readFile(filename, ENCODING);\n        return {\n          data,\n        };\n      } catch (e) {\n        const error = new Error(`File not found: '${filename}'`, e);\n        error.response = {\n          status: 404,\n        };\n        throw error;\n      }\n    },\n  };\n}\n"
  },
  {
    "path": "frontend/tests/unit/save-formats/Wii/Wii.spec.js",
    "content": "import { expect } from 'chai';\nimport WiiSaveData from '@/save-formats/Wii/Wii';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/save-formats/wii';\n\nconst WII_FILENAME = `${DIR}/zelda-ii-the-adventure-of-link.15037.bin`;\nconst RAW_FILENAME = `${DIR}/zelda-ii-the-adventure-of-link.15037-extracted.bin`;\n\nconst WII_MULTIPLE_FILES_FILENAME = `${DIR}/Zelda NES Dolphin VC.bin`; // This file is the only one I've seen that has multiple files inside it, and it was also created by Dolphin. Not sure if the 2 facts are related\nconst RAW_MULTIPLE_FILES_FILENAME_1 = `${DIR}/Zelda NES Dolphin VC-extracted-1.bin`;\nconst RAW_MULTIPLE_FILES_FILENAME_2 = `${DIR}/Zelda NES Dolphin VC-extracted-2.bin`;\n\nconst WII_GENESIS_EEPROM_FILENAME = `${DIR}/wonder-boy-in-monster-world.bin`;\nconst RAW_GENESIS_EEPROM_FILENAME = `${DIR}/wonder-boy-in-monster-world-extracted.bin`;\n\nconst WII_GENESIS_FRAM_FILENAME = `${DIR}/sonic-the-hedgehog-3.18899.bin`;\nconst RAW_GENESIS_FRAM_FILENAME = `${DIR}/sonic-the-hedgehog-3.18899-extracted.bin`;\n\nconst WII_MARIO_GOLF_FILENAME = `${DIR}/mario-golf.23691.bin`;\nconst RAW_MARIO_GOLF_FILENAME = `${DIR}/mario-golf.23681-extracted.bin`;\n\ndescribe('Wii save format', () => {\n  it('should decrypt and parse a sample save file', async () => {\n    const wiiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(WII_FILENAME);\n    const wiiSaveData = new WiiSaveData(wiiArrayBuffer);\n\n    expect(wiiSaveData.getGameTitle()).to.equal('Zelda Ⅱ');\n    expect(wiiSaveData.getGameSubtitle()).to.equal('The Adv. of Link');\n    expect(wiiSaveData.getGameId()).to.equal('FA9E');\n    expect(wiiSaveData.getNumberOfFiles()).to.equal(1);\n    expect(wiiSaveData.getSizeOfFiles()).to.equal(8384);\n    expect(wiiSaveData.getTotalSize()).to.equal(9344);\n\n    const fileList = wiiSaveData.getFiles();\n\n    expect(fileList.length).to.equal(1);\n\n    const file = fileList[0];\n\n    expect(file.size).to.equal(8256);\n    expect(file.name).to.equal('savedata.bin');\n    expect(file.data.byteLength).to.equal(file.size);\n    expect(file.containsSaveData).to.equal(true);\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(file.data, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should decrypt a save file containing multiple files', async () => {\n    const wiiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(WII_MULTIPLE_FILES_FILENAME);\n    const rawArrayBuffer1 = await ArrayBufferUtil.readArrayBuffer(RAW_MULTIPLE_FILES_FILENAME_1);\n    const rawArrayBuffer2 = await ArrayBufferUtil.readArrayBuffer(RAW_MULTIPLE_FILES_FILENAME_2);\n\n    const wiiSaveData = new WiiSaveData(wiiArrayBuffer);\n\n    expect(wiiSaveData.getGameTitle()).to.equal('The Legend of Zelda');\n    expect(wiiSaveData.getGameSubtitle()).to.equal(' ');\n    expect(wiiSaveData.getGameId()).to.equal('FAKE'); // Surprisingly this is the correct game ID for Zelda\n    expect(wiiSaveData.getNumberOfFiles()).to.equal(3);\n    expect(wiiSaveData.getSizeOfFiles()).to.equal(32256);\n    expect(wiiSaveData.getTotalSize()).to.equal(33216);\n\n    const fileList = wiiSaveData.getFiles();\n\n    expect(fileList.length).to.equal(3);\n\n    expect(fileList[0].size).to.equal(0);\n    expect(fileList[0].name).to.equal('nocopy');\n    expect(fileList[0].data.byteLength).to.equal(fileList[0].size);\n    expect(fileList[0].containsSaveData).to.equal(false);\n\n    expect(fileList[1].size).to.equal(23616); // Whatever this file is for, it's just all zeros\n    expect(fileList[1].name).to.equal('nocopy/savework.bin');\n    expect(fileList[1].data.byteLength).to.equal(fileList[1].size);\n    expect(fileList[1].containsSaveData).to.equal(false);\n\n    expect(fileList[2].size).to.equal(8256);\n    expect(fileList[2].name).to.equal('savedata.bin');\n    expect(fileList[2].data.byteLength).to.equal(fileList[2].size);\n    expect(fileList[2].containsSaveData).to.equal(true);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(fileList[1].data, rawArrayBuffer1)).to.equal(true);\n    expect(ArrayBufferUtil.arrayBuffersEqual(fileList[2].data, rawArrayBuffer2)).to.equal(true);\n  });\n\n  it('should decrypt and parse a Genesis EEPROM save file', async () => {\n    const wiiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(WII_GENESIS_EEPROM_FILENAME);\n    const wiiSaveData = new WiiSaveData(wiiArrayBuffer);\n\n    expect(wiiSaveData.getGameTitle()).to.equal('Wonder Boy in MW');\n    expect(wiiSaveData.getGameSubtitle()).to.equal('GENESIS');\n    expect(wiiSaveData.getGameId()).to.equal('MAVE');\n    expect(wiiSaveData.getNumberOfFiles()).to.equal(1);\n    expect(wiiSaveData.getSizeOfFiles()).to.equal(49280);\n    expect(wiiSaveData.getTotalSize()).to.equal(50240);\n\n    const fileList = wiiSaveData.getFiles();\n\n    expect(fileList.length).to.equal(1);\n\n    const file = fileList[0];\n\n    expect(file.size).to.equal(49152);\n    expect(file.name).to.equal('savedata.bin');\n    expect(file.data.byteLength).to.equal(file.size);\n    expect(file.containsSaveData).to.equal(true);\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GENESIS_EEPROM_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(file.data, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should decrypt and parse a Genesis FRAM save file', async () => {\n    const wiiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(WII_GENESIS_FRAM_FILENAME);\n    const wiiSaveData = new WiiSaveData(wiiArrayBuffer);\n\n    expect(wiiSaveData.getGameTitle()).to.equal('Sonic the Hedgehog 3');\n    expect(wiiSaveData.getGameSubtitle()).to.equal('GENESIS');\n    expect(wiiSaveData.getGameId()).to.equal('MBME');\n    expect(wiiSaveData.getNumberOfFiles()).to.equal(1);\n    expect(wiiSaveData.getSizeOfFiles()).to.equal(49280);\n    expect(wiiSaveData.getTotalSize()).to.equal(50240);\n\n    const fileList = wiiSaveData.getFiles();\n\n    expect(fileList.length).to.equal(1);\n\n    const file = fileList[0];\n\n    expect(file.size).to.equal(49152);\n    expect(file.name).to.equal('savedata.bin');\n    expect(file.data.byteLength).to.equal(file.size);\n    expect(file.containsSaveData).to.equal(true);\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_GENESIS_FRAM_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(file.data, rawArrayBuffer)).to.equal(true);\n  });\n\n  it('should decrypt and parse a Mario Golf save file', async () => {\n    const wiiArrayBuffer = await ArrayBufferUtil.readArrayBuffer(WII_MARIO_GOLF_FILENAME);\n    const wiiSaveData = new WiiSaveData(wiiArrayBuffer);\n\n    expect(wiiSaveData.getGameTitle()).to.equal('Mario Golf');\n    expect(wiiSaveData.getGameSubtitle()).to.equal(' ');\n    expect(wiiSaveData.getGameId()).to.equal('NAUE');\n    expect(wiiSaveData.getNumberOfFiles()).to.equal(1);\n    expect(wiiSaveData.getSizeOfFiles()).to.equal(49280);\n    expect(wiiSaveData.getTotalSize()).to.equal(50240);\n\n    const fileList = wiiSaveData.getFiles();\n\n    const file = fileList[0];\n\n    expect(file.size).to.equal(49152);\n    expect(file.name).to.equal('RAM_NMFE');\n    expect(file.data.byteLength).to.equal(file.size);\n    expect(file.containsSaveData).to.equal(true);\n\n    const rawArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAW_MARIO_GOLF_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(file.data, rawArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/CompressionGzip.spec.js",
    "content": "import { expect } from 'chai';\nimport CompressionGzip from '@/util/CompressionGzip';\nimport Util from '@/util/util';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst PLAINTEXT_STRING = 'MY BARBER DIDN\\'T KNOW WHEN TO QUIT... DO YOU?';\nconst PLAINTEXT_ENCODING = 'utf8';\n\ndescribe('CompressionGzip', () => {\n  it('should compress and then decompress data', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const initialArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    const compressedArrayBuffer = CompressionGzip.compress(initialArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(initialArrayBuffer, compressedArrayBuffer)).to.equal(false);\n\n    const uncompressedArrayBuffer = CompressionGzip.decompress(compressedArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(uncompressedArrayBuffer, initialArrayBuffer)).to.equal(true);\n\n    const textDecoder = new TextDecoder(PLAINTEXT_ENCODING);\n    const decryptedBuffer = Buffer.from(uncompressedArrayBuffer);\n    const decryptedText = textDecoder.decode(decryptedBuffer);\n\n    expect(decryptedText).to.equal(PLAINTEXT_STRING);\n  });\n\n  it('should fail to decompress data not in the correct format', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const initialArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    expect(() => CompressionGzip.decompress(initialArrayBuffer)).to.throw(\n      // Passing in a specific instance of an Error triggers a comparison of the references: https://github.com/chaijs/chai/issues/430\n      Error,\n      'Could not decompress the data using gzip',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/CompressionLzo.spec.js",
    "content": "import { expect } from 'chai';\nimport CompressionLzo from '@/util/CompressionLzo';\nimport Util from '@/util/util';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst PLAINTEXT_STRING = 'I DRINK TO PREPARE FOR A FIGHT. TONIGHT I AM VERY PREPARED!';\nconst PLAINTEXT_ENCODING = 'utf8';\n\ndescribe('CompressionLzo', () => {\n  it('should compress and then decompress data', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const initialArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    const compressedArrayBuffer = CompressionLzo.compress(initialArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(initialArrayBuffer, compressedArrayBuffer)).to.equal(false);\n\n    const uncompressedArrayBuffer = CompressionLzo.decompress(compressedArrayBuffer, initialArrayBuffer.byteLength);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(uncompressedArrayBuffer, initialArrayBuffer)).to.equal(true);\n\n    const textDecoder = new TextDecoder(PLAINTEXT_ENCODING);\n    const decryptedBuffer = Buffer.from(uncompressedArrayBuffer);\n    const decryptedText = textDecoder.decode(decryptedBuffer);\n\n    expect(decryptedText).to.equal(PLAINTEXT_STRING);\n  });\n\n  it('should fail to decompress data not in the correct format', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const initialArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    expect(() => CompressionLzo.decompress(initialArrayBuffer)).to.throw(\n      // Passing in a specific instance of an Error triggers a comparison of the references: https://github.com/chaijs/chai/issues/430\n      Error,\n      'Encountered error -4 when trying to decompress LZO buffer',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/CompressionRzip.spec.js",
    "content": "import { expect } from 'chai';\nimport CompressionRzip from '@/util/CompressionRzip';\nimport Util from '@/util/util';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst PLAINTEXT_STRING = 'I CAN\\'T DRIVE, SO I\\'M GONNA WALK ALL OVER YOU.';\nconst PLAINTEXT_ENCODING = 'utf8';\n\nconst DIR = './tests/data/util';\n\nconst COMPRESSED_FILENAME = `${DIR}/Xenogears (USA) (Disc 1)-compressed.srm`;\nconst UNCOMPRESSED_FILENAME = `${DIR}/Xenogears (USA) (Disc 1)-uncompressed.srm`;\n\ndescribe('CompressionRzip', () => {\n  it('should compress and then decompress data', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const initialArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    const compressedArrayBuffer = CompressionRzip.compress(initialArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(initialArrayBuffer, compressedArrayBuffer)).to.equal(false);\n\n    const uncompressedArrayBuffer = CompressionRzip.decompress(compressedArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(uncompressedArrayBuffer, initialArrayBuffer)).to.equal(true);\n\n    const textDecoder = new TextDecoder(PLAINTEXT_ENCODING);\n    const decryptedBuffer = Buffer.from(uncompressedArrayBuffer);\n    const decryptedText = textDecoder.decode(decryptedBuffer);\n\n    expect(decryptedText).to.equal(PLAINTEXT_STRING);\n  });\n\n  it('should fail to decompress data not in the correct format', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const initialArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    expect(() => CompressionRzip.decompress(initialArrayBuffer)).to.throw(\n      // Passing in a specific instance of an Error triggers a comparison of the references: https://github.com/chaijs/chai/issues/430\n      Error,\n      'Could not decompress the data using rzip',\n    );\n  });\n\n  it('should decompress a save file from retroarch', async () => {\n    const compressedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMPRESSED_FILENAME);\n    const uncompressedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(UNCOMPRESSED_FILENAME);\n\n    const decompressedArrayBuffer = CompressionRzip.decompress(compressedArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(decompressedArrayBuffer, uncompressedArrayBuffer)).to.equal(true);\n  });\n\n  it('should compress a save file to be the same as retroarch', async () => {\n    const compressedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(COMPRESSED_FILENAME);\n    const uncompressedArrayBuffer = await ArrayBufferUtil.readArrayBuffer(UNCOMPRESSED_FILENAME);\n\n    const recompressedArrayBuffer = CompressionRzip.compress(uncompressedArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(recompressedArrayBuffer, compressedArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/CompressionZlib.spec.js",
    "content": "import { expect } from 'chai';\nimport CompressionZLib from '@/util/CompressionZlib';\nimport Util from '@/util/util';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst PLAINTEXT_STRING = 'I\\'LL GIVE YOU A TKO FROM TOKYO!';\nconst PLAINTEXT_ENCODING = 'utf8';\n\ndescribe('CompressionZlib', () => {\n  it('should compress and then decompress data', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const initialArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    const compressedArrayBuffer = CompressionZLib.compress(initialArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(initialArrayBuffer, compressedArrayBuffer)).to.equal(false);\n\n    const uncompressedArrayBuffer = CompressionZLib.decompress(compressedArrayBuffer);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(uncompressedArrayBuffer, initialArrayBuffer)).to.equal(true);\n\n    const textDecoder = new TextDecoder(PLAINTEXT_ENCODING);\n    const decryptedBuffer = Buffer.from(uncompressedArrayBuffer);\n    const decryptedText = textDecoder.decode(decryptedBuffer);\n\n    expect(decryptedText).to.equal(PLAINTEXT_STRING);\n  });\n\n  it('should fail to decompress data not in the correct format', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const initialArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    expect(() => CompressionZLib.decompress(initialArrayBuffer)).to.throw(\n      // Passing in a specific instance of an Error triggers a comparison of the references: https://github.com/chaijs/chai/issues/430\n      Error,\n      'Could not decompress the data using zlib',\n    );\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/Endian.spec.js",
    "content": "import { expect } from 'chai';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nimport EndianUtil from '@/util/Endian';\n\nconst DIR = './tests/data/util/endian';\n\nconst TWO_BYTE_INPUT_FILENAME = `${DIR}/2ByteWord-input.sav`;\nconst TWO_BYTE_OUTPUT_FILENAME = `${DIR}/2ByteWord-output.sav`;\n\nconst FOUR_BYTE_INPUT_FILENAME = `${DIR}/4ByteWord-input.sav`;\nconst FOUR_BYTE_OUTPUT_FILENAME = `${DIR}/4ByteWord-output.sav`;\n\nconst EIGHT_BYTE_INPUT_FILENAME = `${DIR}/8ByteWord-input.sav`;\nconst EIGHT_BYTE_OUTPUT_FILENAME = `${DIR}/8ByteWord-output.sav`;\n\ndescribe('EndianUtil', () => {\n  it('should throw an error if the input ArrayBuffer size is not a multiple of the word size', () => {\n    const dummyArrayBuffer = new ArrayBuffer(10);\n\n    expect(() => EndianUtil.swap(dummyArrayBuffer, 4)).to.throw(\n      // Passing in a specific instance of an Error triggers a comparison of the references: https://github.com/chaijs/chai/issues/430\n      Error,\n      'File length must be a multiple of 4 bytes',\n    );\n  });\n\n  it('should throw an error for an unknown word size', () => {\n    const dummyArrayBuffer = new ArrayBuffer(60);\n\n    expect(() => EndianUtil.swap(dummyArrayBuffer, 6)).to.throw(\n      // Passing in a specific instance of an Error triggers a comparison of the references: https://github.com/chaijs/chai/issues/430\n      Error,\n      'Word size must be one of 2, 4, 8',\n    );\n  });\n\n  it('should endian swap a 2 byte word size', async () => {\n    const inputArrayBuffer = await ArrayBufferUtil.readArrayBuffer(TWO_BYTE_INPUT_FILENAME);\n    const outputArrayBuffer = await ArrayBufferUtil.readArrayBuffer(TWO_BYTE_OUTPUT_FILENAME);\n\n    const endianSwappedArrayBuffer = EndianUtil.swap(inputArrayBuffer, 2);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(endianSwappedArrayBuffer, outputArrayBuffer)).to.equal(true);\n  });\n\n  it('should endian swap a 4 byte word size', async () => {\n    const inputArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FOUR_BYTE_INPUT_FILENAME);\n    const outputArrayBuffer = await ArrayBufferUtil.readArrayBuffer(FOUR_BYTE_OUTPUT_FILENAME);\n\n    const endianSwappedArrayBuffer = EndianUtil.swap(inputArrayBuffer, 4);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(endianSwappedArrayBuffer, outputArrayBuffer)).to.equal(true);\n  });\n\n  it('should endian swap an 8 byte word size', async () => {\n    const inputArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EIGHT_BYTE_INPUT_FILENAME);\n    const outputArrayBuffer = await ArrayBufferUtil.readArrayBuffer(EIGHT_BYTE_OUTPUT_FILENAME);\n\n    const endianSwappedArrayBuffer = EndianUtil.swap(inputArrayBuffer, 8);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(endianSwappedArrayBuffer, outputArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/Math.spec.js",
    "content": "import { expect } from 'chai';\nimport MathUtil from '@/util/Math';\n\ndescribe('MathUtil', () => {\n  it('should find the next largest power of 2', () => {\n    expect(MathUtil.getNextLargestPowerOf2(-1)).to.equal(0);\n    expect(MathUtil.getNextLargestPowerOf2(0)).to.equal(0);\n\n    expect(MathUtil.getNextLargestPowerOf2(1)).to.equal(1);\n\n    expect(MathUtil.getNextLargestPowerOf2(2)).to.equal(2);\n\n    expect(MathUtil.getNextLargestPowerOf2(3)).to.equal(4);\n    expect(MathUtil.getNextLargestPowerOf2(4)).to.equal(4);\n\n    expect(MathUtil.getNextLargestPowerOf2(5)).to.equal(8);\n    expect(MathUtil.getNextLargestPowerOf2(6)).to.equal(8);\n    expect(MathUtil.getNextLargestPowerOf2(7)).to.equal(8);\n    expect(MathUtil.getNextLargestPowerOf2(8)).to.equal(8);\n\n    expect(MathUtil.getNextLargestPowerOf2(9)).to.equal(16);\n    expect(MathUtil.getNextLargestPowerOf2(15)).to.equal(16);\n    expect(MathUtil.getNextLargestPowerOf2(16)).to.equal(16);\n\n    expect(MathUtil.getNextLargestPowerOf2(17)).to.equal(32);\n    expect(MathUtil.getNextLargestPowerOf2(31)).to.equal(32);\n    expect(MathUtil.getNextLargestPowerOf2(32)).to.equal(32);\n\n    expect(MathUtil.getNextLargestPowerOf2(33)).to.equal(64);\n    expect(MathUtil.getNextLargestPowerOf2(63)).to.equal(64);\n    expect(MathUtil.getNextLargestPowerOf2(64)).to.equal(64);\n\n    expect(MathUtil.getNextLargestPowerOf2(65)).to.equal(128);\n    expect(MathUtil.getNextLargestPowerOf2(127)).to.equal(128);\n    expect(MathUtil.getNextLargestPowerOf2(128)).to.equal(128);\n\n    expect(MathUtil.getNextLargestPowerOf2(129)).to.equal(256);\n    expect(MathUtil.getNextLargestPowerOf2(255)).to.equal(256);\n    expect(MathUtil.getNextLargestPowerOf2(256)).to.equal(256);\n\n    expect(MathUtil.getNextLargestPowerOf2(257)).to.equal(512);\n    expect(MathUtil.getNextLargestPowerOf2(511)).to.equal(512);\n    expect(MathUtil.getNextLargestPowerOf2(512)).to.equal(512);\n\n    expect(MathUtil.getNextLargestPowerOf2(513)).to.equal(1024);\n    expect(MathUtil.getNextLargestPowerOf2(1023)).to.equal(1024);\n    expect(MathUtil.getNextLargestPowerOf2(1024)).to.equal(1024);\n\n    expect(MathUtil.getNextLargestPowerOf2(1025)).to.equal(2048);\n    expect(MathUtil.getNextLargestPowerOf2(2047)).to.equal(2048);\n    expect(MathUtil.getNextLargestPowerOf2(2048)).to.equal(2048);\n\n    expect(MathUtil.getNextLargestPowerOf2(2049)).to.equal(4096);\n    expect(MathUtil.getNextLargestPowerOf2(4095)).to.equal(4096);\n    expect(MathUtil.getNextLargestPowerOf2(4096)).to.equal(4096);\n\n    expect(MathUtil.getNextLargestPowerOf2(4097)).to.equal(8192);\n    expect(MathUtil.getNextLargestPowerOf2(8191)).to.equal(8192);\n    expect(MathUtil.getNextLargestPowerOf2(8192)).to.equal(8192);\n\n    expect(MathUtil.getNextLargestPowerOf2(8193)).to.equal(16384);\n    expect(MathUtil.getNextLargestPowerOf2(16383)).to.equal(16384);\n    expect(MathUtil.getNextLargestPowerOf2(16384)).to.equal(16384);\n\n    expect(MathUtil.getNextLargestPowerOf2(16385)).to.equal(32768);\n    expect(MathUtil.getNextLargestPowerOf2(32767)).to.equal(32768);\n    expect(MathUtil.getNextLargestPowerOf2(32768)).to.equal(32768);\n\n    expect(MathUtil.getNextLargestPowerOf2(32769)).to.equal(65536);\n    expect(MathUtil.getNextLargestPowerOf2(65535)).to.equal(65536);\n    expect(MathUtil.getNextLargestPowerOf2(65536)).to.equal(65536);\n\n    expect(MathUtil.getNextLargestPowerOf2(65537)).to.equal(131072);\n    expect(MathUtil.getNextLargestPowerOf2(131071)).to.equal(131072);\n    expect(MathUtil.getNextLargestPowerOf2(131072)).to.equal(131072);\n\n    expect(MathUtil.getNextLargestPowerOf2(131073)).to.equal(262144);\n    expect(MathUtil.getNextLargestPowerOf2(262143)).to.equal(262144);\n    expect(MathUtil.getNextLargestPowerOf2(262144)).to.equal(262144);\n  });\n\n  it('should find the next smallest power of 2', () => {\n    expect(MathUtil.getNextSmallestPowerOf2(-1)).to.equal(0);\n    expect(MathUtil.getNextSmallestPowerOf2(0)).to.equal(0);\n\n    expect(MathUtil.getNextSmallestPowerOf2(1)).to.equal(1);\n\n    expect(MathUtil.getNextSmallestPowerOf2(2)).to.equal(2);\n    expect(MathUtil.getNextSmallestPowerOf2(3)).to.equal(2);\n\n    expect(MathUtil.getNextSmallestPowerOf2(4)).to.equal(4);\n    expect(MathUtil.getNextSmallestPowerOf2(5)).to.equal(4);\n    expect(MathUtil.getNextSmallestPowerOf2(6)).to.equal(4);\n    expect(MathUtil.getNextSmallestPowerOf2(7)).to.equal(4);\n\n    expect(MathUtil.getNextSmallestPowerOf2(8)).to.equal(8);\n    expect(MathUtil.getNextSmallestPowerOf2(9)).to.equal(8);\n    expect(MathUtil.getNextSmallestPowerOf2(15)).to.equal(8);\n\n    expect(MathUtil.getNextSmallestPowerOf2(16)).to.equal(16);\n    expect(MathUtil.getNextSmallestPowerOf2(17)).to.equal(16);\n    expect(MathUtil.getNextSmallestPowerOf2(31)).to.equal(16);\n\n    expect(MathUtil.getNextSmallestPowerOf2(32)).to.equal(32);\n    expect(MathUtil.getNextSmallestPowerOf2(33)).to.equal(32);\n    expect(MathUtil.getNextSmallestPowerOf2(63)).to.equal(32);\n\n    expect(MathUtil.getNextSmallestPowerOf2(64)).to.equal(64);\n    expect(MathUtil.getNextSmallestPowerOf2(65)).to.equal(64);\n    expect(MathUtil.getNextSmallestPowerOf2(127)).to.equal(64);\n\n    expect(MathUtil.getNextSmallestPowerOf2(128)).to.equal(128);\n    expect(MathUtil.getNextSmallestPowerOf2(129)).to.equal(128);\n    expect(MathUtil.getNextSmallestPowerOf2(255)).to.equal(128);\n\n    expect(MathUtil.getNextSmallestPowerOf2(256)).to.equal(256);\n    expect(MathUtil.getNextSmallestPowerOf2(257)).to.equal(256);\n    expect(MathUtil.getNextSmallestPowerOf2(511)).to.equal(256);\n\n    expect(MathUtil.getNextSmallestPowerOf2(512)).to.equal(512);\n    expect(MathUtil.getNextSmallestPowerOf2(513)).to.equal(512);\n    expect(MathUtil.getNextSmallestPowerOf2(1023)).to.equal(512);\n\n    expect(MathUtil.getNextSmallestPowerOf2(1024)).to.equal(1024);\n    expect(MathUtil.getNextSmallestPowerOf2(1025)).to.equal(1024);\n    expect(MathUtil.getNextSmallestPowerOf2(2047)).to.equal(1024);\n\n    expect(MathUtil.getNextSmallestPowerOf2(2048)).to.equal(2048);\n    expect(MathUtil.getNextSmallestPowerOf2(2049)).to.equal(2048);\n    expect(MathUtil.getNextSmallestPowerOf2(4095)).to.equal(2048);\n\n    expect(MathUtil.getNextSmallestPowerOf2(4096)).to.equal(4096);\n    expect(MathUtil.getNextSmallestPowerOf2(4097)).to.equal(4096);\n    expect(MathUtil.getNextSmallestPowerOf2(8191)).to.equal(4096);\n\n    expect(MathUtil.getNextSmallestPowerOf2(8192)).to.equal(8192);\n    expect(MathUtil.getNextSmallestPowerOf2(8193)).to.equal(8192);\n    expect(MathUtil.getNextSmallestPowerOf2(16383)).to.equal(8192);\n\n    expect(MathUtil.getNextSmallestPowerOf2(16384)).to.equal(16384);\n    expect(MathUtil.getNextSmallestPowerOf2(16385)).to.equal(16384);\n    expect(MathUtil.getNextSmallestPowerOf2(32767)).to.equal(16384);\n\n    expect(MathUtil.getNextSmallestPowerOf2(32768)).to.equal(32768);\n    expect(MathUtil.getNextSmallestPowerOf2(32769)).to.equal(32768);\n    expect(MathUtil.getNextSmallestPowerOf2(65535)).to.equal(32768);\n\n    expect(MathUtil.getNextSmallestPowerOf2(65536)).to.equal(65536);\n    expect(MathUtil.getNextSmallestPowerOf2(65537)).to.equal(65536);\n    expect(MathUtil.getNextSmallestPowerOf2(131071)).to.equal(65536);\n\n    expect(MathUtil.getNextSmallestPowerOf2(131072)).to.equal(131072);\n    expect(MathUtil.getNextSmallestPowerOf2(131073)).to.equal(131072);\n    expect(MathUtil.getNextSmallestPowerOf2(262143)).to.equal(131072);\n\n    expect(MathUtil.getNextSmallestPowerOf2(262144)).to.equal(262144);\n  });\n\n  it('should determine whether a number is a power of 2', () => {\n    expect(MathUtil.isPowerOf2(-1)).to.equal(false);\n    expect(MathUtil.isPowerOf2(0)).to.equal(false);\n\n    expect(MathUtil.isPowerOf2(1)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(2)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(3)).to.equal(false);\n    expect(MathUtil.isPowerOf2(4)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(5)).to.equal(false);\n    expect(MathUtil.isPowerOf2(6)).to.equal(false);\n    expect(MathUtil.isPowerOf2(7)).to.equal(false);\n    expect(MathUtil.isPowerOf2(8)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(9)).to.equal(false);\n    expect(MathUtil.isPowerOf2(15)).to.equal(false);\n    expect(MathUtil.isPowerOf2(16)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(17)).to.equal(false);\n    expect(MathUtil.isPowerOf2(31)).to.equal(false);\n    expect(MathUtil.isPowerOf2(32)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(33)).to.equal(false);\n    expect(MathUtil.isPowerOf2(63)).to.equal(false);\n    expect(MathUtil.isPowerOf2(64)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(65)).to.equal(false);\n    expect(MathUtil.isPowerOf2(127)).to.equal(false);\n    expect(MathUtil.isPowerOf2(128)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(129)).to.equal(false);\n    expect(MathUtil.isPowerOf2(255)).to.equal(false);\n    expect(MathUtil.isPowerOf2(256)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(257)).to.equal(false);\n    expect(MathUtil.isPowerOf2(511)).to.equal(false);\n    expect(MathUtil.isPowerOf2(512)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(513)).to.equal(false);\n    expect(MathUtil.isPowerOf2(1023)).to.equal(false);\n    expect(MathUtil.isPowerOf2(1024)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(1025)).to.equal(false);\n    expect(MathUtil.isPowerOf2(2047)).to.equal(false);\n    expect(MathUtil.isPowerOf2(2048)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(2049)).to.equal(false);\n    expect(MathUtil.isPowerOf2(4095)).to.equal(false);\n    expect(MathUtil.isPowerOf2(4096)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(4097)).to.equal(false);\n    expect(MathUtil.isPowerOf2(8191)).to.equal(false);\n    expect(MathUtil.isPowerOf2(8192)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(8193)).to.equal(false);\n    expect(MathUtil.isPowerOf2(16383)).to.equal(false);\n    expect(MathUtil.isPowerOf2(16384)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(16385)).to.equal(false);\n    expect(MathUtil.isPowerOf2(32767)).to.equal(false);\n    expect(MathUtil.isPowerOf2(32768)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(32769)).to.equal(false);\n    expect(MathUtil.isPowerOf2(65535)).to.equal(false);\n    expect(MathUtil.isPowerOf2(65536)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(65537)).to.equal(false);\n    expect(MathUtil.isPowerOf2(131071)).to.equal(false);\n    expect(MathUtil.isPowerOf2(131072)).to.equal(true);\n\n    expect(MathUtil.isPowerOf2(131073)).to.equal(false);\n    expect(MathUtil.isPowerOf2(262143)).to.equal(false);\n    expect(MathUtil.isPowerOf2(262144)).to.equal(true);\n  });\n\n  it('should correctly round up to the nearest 64 bytes', () => {\n    expect(MathUtil.roundUpToNearest64Bytes(-1)).to.equal(0);\n    expect(MathUtil.roundUpToNearest64Bytes(0)).to.equal(0);\n\n    expect(MathUtil.roundUpToNearest64Bytes(1)).to.equal(64);\n    expect(MathUtil.roundUpToNearest64Bytes(2)).to.equal(64);\n    expect(MathUtil.roundUpToNearest64Bytes(63)).to.equal(64);\n    expect(MathUtil.roundUpToNearest64Bytes(64)).to.equal(64);\n\n    expect(MathUtil.roundUpToNearest64Bytes(65)).to.equal(128);\n    expect(MathUtil.roundUpToNearest64Bytes(127)).to.equal(128);\n    expect(MathUtil.roundUpToNearest64Bytes(128)).to.equal(128);\n\n    expect(MathUtil.roundUpToNearest64Bytes(129)).to.equal(192);\n    expect(MathUtil.roundUpToNearest64Bytes(191)).to.equal(192);\n    expect(MathUtil.roundUpToNearest64Bytes(192)).to.equal(192);\n\n    expect(MathUtil.roundUpToNearest64Bytes(193)).to.equal(256);\n    expect(MathUtil.roundUpToNearest64Bytes(255)).to.equal(256);\n    expect(MathUtil.roundUpToNearest64Bytes(256)).to.equal(256);\n\n    expect(MathUtil.roundUpToNearest64Bytes(257)).to.equal(320);\n    expect(MathUtil.roundUpToNearest64Bytes(319)).to.equal(320);\n    expect(MathUtil.roundUpToNearest64Bytes(320)).to.equal(320);\n\n    expect(MathUtil.roundUpToNearest64Bytes(321)).to.equal(384);\n    expect(MathUtil.roundUpToNearest64Bytes(383)).to.equal(384);\n    expect(MathUtil.roundUpToNearest64Bytes(384)).to.equal(384);\n\n    expect(MathUtil.roundUpToNearest64Bytes(385)).to.equal(448);\n    expect(MathUtil.roundUpToNearest64Bytes(447)).to.equal(448);\n    expect(MathUtil.roundUpToNearest64Bytes(448)).to.equal(448);\n\n    expect(MathUtil.roundUpToNearest64Bytes(449)).to.equal(512);\n    expect(MathUtil.roundUpToNearest64Bytes(511)).to.equal(512);\n    expect(MathUtil.roundUpToNearest64Bytes(512)).to.equal(512);\n  });\n\n  it('should find the next multiple of 16', () => {\n    expect(MathUtil.getNextMultipleOf16(-1)).to.equal(0);\n    expect(MathUtil.getNextMultipleOf16(0)).to.equal(0);\n\n    expect(MathUtil.getNextMultipleOf16(1)).to.equal(16);\n    expect(MathUtil.getNextMultipleOf16(15)).to.equal(16);\n    expect(MathUtil.getNextMultipleOf16(16)).to.equal(16);\n\n    expect(MathUtil.getNextMultipleOf16(17)).to.equal(32);\n    expect(MathUtil.getNextMultipleOf16(31)).to.equal(32);\n    expect(MathUtil.getNextMultipleOf16(32)).to.equal(32);\n\n    expect(MathUtil.getNextMultipleOf16(33)).to.equal(48);\n    expect(MathUtil.getNextMultipleOf16(47)).to.equal(48);\n    expect(MathUtil.getNextMultipleOf16(48)).to.equal(48);\n\n    expect(MathUtil.getNextMultipleOf16(49)).to.equal(64);\n    expect(MathUtil.getNextMultipleOf16(63)).to.equal(64);\n    expect(MathUtil.getNextMultipleOf16(64)).to.equal(64);\n\n    expect(MathUtil.getNextMultipleOf16(65)).to.equal(80);\n    expect(MathUtil.getNextMultipleOf16(79)).to.equal(80);\n    expect(MathUtil.getNextMultipleOf16(80)).to.equal(80);\n\n    expect(MathUtil.getNextMultipleOf16(81)).to.equal(96);\n    expect(MathUtil.getNextMultipleOf16(95)).to.equal(96);\n    expect(MathUtil.getNextMultipleOf16(96)).to.equal(96);\n\n    expect(MathUtil.getNextMultipleOf16(97)).to.equal(112);\n    expect(MathUtil.getNextMultipleOf16(111)).to.equal(112);\n    expect(MathUtil.getNextMultipleOf16(112)).to.equal(112);\n\n    expect(MathUtil.getNextMultipleOf16(113)).to.equal(128);\n    expect(MathUtil.getNextMultipleOf16(127)).to.equal(128);\n    expect(MathUtil.getNextMultipleOf16(128)).to.equal(128);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/Padding.spec.js",
    "content": "/* eslint-disable no-param-reassign */\n\nimport { expect } from 'chai';\nimport PaddingUtil from '@/util/Padding';\nimport MathUtil from '@/util/Math';\n\nconst ARRAY_BUFFER_SIZE = 32;\nconst DATA_VALUE = 0x01; // Represents actual data in our ArrayBuffer\nconst PADDING_VALUE_A = 0x00; // Two common values for padding used by various emulators\nconst PADDING_VALUE_B = 0xFF;\nconst EXTRA_PADDING_COUNT = 16;\n\ndescribe('PaddingUtil', () => {\n  it('should get the pad value and count from the start of the array', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      if (i < EXTRA_PADDING_COUNT) {\n        a[i] = PADDING_VALUE_A;\n      } else {\n        a[i] = DATA_VALUE;\n      }\n    });\n\n    const padding = PaddingUtil.getPadFromStartValueAndCount(arrayBuffer);\n\n    expect(padding.value).to.equal(PADDING_VALUE_A);\n    expect(padding.count).to.equal(EXTRA_PADDING_COUNT);\n  });\n\n  it('should get the other pad value and count from the start of the array', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      if (i < EXTRA_PADDING_COUNT) {\n        a[i] = PADDING_VALUE_B;\n      } else {\n        a[i] = DATA_VALUE;\n      }\n    });\n\n    const padding = PaddingUtil.getPadFromStartValueAndCount(arrayBuffer);\n\n    expect(padding.value).to.equal(PADDING_VALUE_B);\n    expect(padding.count).to.equal(EXTRA_PADDING_COUNT);\n  });\n\n  it('should maintain data size being a power of 2 when finding padding from the start of the array', () => {\n    expect(MathUtil.getNextLargestPowerOf2(ARRAY_BUFFER_SIZE)).to.equal(ARRAY_BUFFER_SIZE);\n\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      if (i < (EXTRA_PADDING_COUNT + 1)) { // One extra byte of padding\n        a[i] = PADDING_VALUE_B;\n      } else {\n        a[i] = DATA_VALUE;\n      }\n    });\n\n    const padding = PaddingUtil.getPadFromStartValueAndCount(arrayBuffer);\n\n    expect(padding.value).to.equal(PADDING_VALUE_B);\n    expect(padding.count).to.equal(EXTRA_PADDING_COUNT); // The extra byte of padding isn't counted\n  });\n\n  it('should get the pad count from the start when there\\'s no padding', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      a[i] = DATA_VALUE;\n    });\n\n    const padding = PaddingUtil.getPadFromStartValueAndCount(arrayBuffer);\n\n    expect(padding.count).to.equal(0);\n  });\n\n  it('should get the pad count from the start when it\\'s al padding', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      a[i] = PADDING_VALUE_B;\n    });\n\n    const padding = PaddingUtil.getPadFromStartValueAndCount(arrayBuffer);\n\n    expect(padding.count).to.equal(0);\n  });\n\n  it('should get the pad value and count from the end of the array', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      if (i >= ARRAY_BUFFER_SIZE) {\n        a[i] = PADDING_VALUE_A;\n      } else {\n        a[i] = DATA_VALUE;\n      }\n    });\n\n    const padding = PaddingUtil.getPadFromEndValueAndCount(arrayBuffer);\n\n    expect(padding.value).to.equal(PADDING_VALUE_A);\n    expect(padding.count).to.equal(EXTRA_PADDING_COUNT);\n  });\n\n  it('should get the other pad value and count from the end of the array', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      if (i >= ARRAY_BUFFER_SIZE) {\n        a[i] = PADDING_VALUE_B;\n      } else {\n        a[i] = DATA_VALUE;\n      }\n    });\n\n    const padding = PaddingUtil.getPadFromEndValueAndCount(arrayBuffer);\n\n    expect(padding.value).to.equal(PADDING_VALUE_B);\n    expect(padding.count).to.equal(EXTRA_PADDING_COUNT);\n  });\n\n  it('should maintain data size being a power of 2 when finding padding from the end of the array', () => {\n    expect(MathUtil.getNextLargestPowerOf2(ARRAY_BUFFER_SIZE)).to.equal(ARRAY_BUFFER_SIZE);\n\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      if (i >= (ARRAY_BUFFER_SIZE - 1)) { // One extra byte of padding\n        a[i] = PADDING_VALUE_B;\n      } else {\n        a[i] = DATA_VALUE;\n      }\n    });\n\n    const padding = PaddingUtil.getPadFromEndValueAndCount(arrayBuffer);\n\n    expect(padding.value).to.equal(PADDING_VALUE_B);\n    expect(padding.count).to.equal(EXTRA_PADDING_COUNT); // The extra byte of padding isn't counted\n  });\n\n  it('should get the pad count from the end when there\\'s no padding', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      a[i] = DATA_VALUE;\n    });\n\n    const padding = PaddingUtil.getPadFromEndValueAndCount(arrayBuffer);\n\n    expect(padding.count).to.equal(0);\n  });\n\n  it('should get the pad count from the end when it\\'s al padding', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      a[i] = PADDING_VALUE_B;\n    });\n\n    const padding = PaddingUtil.getPadFromEndValueAndCount(arrayBuffer);\n\n    expect(padding.count).to.equal(0);\n  });\n\n  it('should remove padding from the start', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      if (i < EXTRA_PADDING_COUNT) {\n        a[i] = PADDING_VALUE_B;\n      } else {\n        a[i] = DATA_VALUE;\n      }\n    });\n\n    const unpaddedArrayBuffer = PaddingUtil.removePaddingFromStart(arrayBuffer, EXTRA_PADDING_COUNT);\n\n    const unpaddedUint8Array = new Uint8Array(unpaddedArrayBuffer);\n\n    expect(unpaddedUint8Array.length).to.equal(ARRAY_BUFFER_SIZE);\n    unpaddedUint8Array.forEach((e, i, a) => {\n      expect(a[i]).to.equal(DATA_VALUE, `index ${i}`);\n    });\n  });\n\n  it('should remove zero bytes of padding from the start', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      a[i] = DATA_VALUE;\n    });\n\n    const unpaddedArrayBuffer = PaddingUtil.removePaddingFromStart(arrayBuffer, 0);\n\n    const unpaddedUint8Array = new Uint8Array(unpaddedArrayBuffer);\n\n    expect(unpaddedUint8Array.length).to.equal(ARRAY_BUFFER_SIZE);\n    unpaddedUint8Array.forEach((e, i, a) => {\n      expect(a[i]).to.equal(DATA_VALUE, `index ${i}`);\n    });\n  });\n\n  it('should remove padding from the end', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      if (i < ARRAY_BUFFER_SIZE) {\n        a[i] = DATA_VALUE;\n      } else {\n        a[i] = PADDING_VALUE_B;\n      }\n    });\n\n    const unpaddedArrayBuffer = PaddingUtil.removePaddingFromEnd(arrayBuffer, EXTRA_PADDING_COUNT);\n\n    const unpaddedUint8Array = new Uint8Array(unpaddedArrayBuffer);\n\n    expect(unpaddedUint8Array.length).to.equal(ARRAY_BUFFER_SIZE);\n    unpaddedUint8Array.forEach((e, i, a) => {\n      expect(a[i]).to.equal(DATA_VALUE, `index ${i}`);\n    });\n  });\n\n  it('should remove zero bytes of padding from the end', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => {\n      a[i] = DATA_VALUE;\n    });\n\n    const unpaddedArrayBuffer = PaddingUtil.removePaddingFromEnd(arrayBuffer, 0);\n\n    const unpaddedUint8Array = new Uint8Array(unpaddedArrayBuffer);\n\n    expect(unpaddedUint8Array.length).to.equal(ARRAY_BUFFER_SIZE);\n    unpaddedUint8Array.forEach((e, i, a) => {\n      expect(a[i]).to.equal(DATA_VALUE, `index ${i}`);\n    });\n  });\n\n  it('should add padding to start', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = DATA_VALUE; });\n\n    const padding = {\n      value: PADDING_VALUE_B,\n      count: EXTRA_PADDING_COUNT,\n    };\n\n    const paddedArrayBuffer = PaddingUtil.addPaddingToStart(arrayBuffer, padding);\n    expect(paddedArrayBuffer.byteLength).to.equal(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n\n    const paddedUint8Array = new Uint8Array(paddedArrayBuffer);\n\n    paddedUint8Array.forEach((e, i, a) => {\n      if (i < EXTRA_PADDING_COUNT) {\n        expect(a[i]).to.equal(PADDING_VALUE_B, `index ${i}`);\n      } else {\n        expect(a[i]).to.equal(DATA_VALUE, `index ${i}`);\n      }\n    });\n  });\n\n  it('should add zero bytes of padding to start', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = DATA_VALUE; });\n\n    const padding = {\n      value: PADDING_VALUE_B,\n      count: 0,\n    };\n\n    const paddedArrayBuffer = PaddingUtil.addPaddingToStart(arrayBuffer, padding);\n    expect(paddedArrayBuffer.byteLength).to.equal(ARRAY_BUFFER_SIZE);\n\n    const paddedUint8Array = new Uint8Array(paddedArrayBuffer);\n\n    paddedUint8Array.forEach((e, i, a) => { expect(a[i]).to.equal(DATA_VALUE, `index ${i}`); });\n  });\n\n  it('should add padding to end', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = DATA_VALUE; });\n\n    const padding = {\n      value: PADDING_VALUE_B,\n      count: EXTRA_PADDING_COUNT,\n    };\n\n    const paddedArrayBuffer = PaddingUtil.addPaddingToEnd(arrayBuffer, padding);\n    expect(paddedArrayBuffer.byteLength).to.equal(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n\n    const paddedUint8Array = new Uint8Array(paddedArrayBuffer);\n\n    paddedUint8Array.forEach((e, i, a) => {\n      if (i < ARRAY_BUFFER_SIZE) {\n        expect(a[i]).to.equal(DATA_VALUE, `index ${i}`);\n      } else {\n        expect(a[i]).to.equal(PADDING_VALUE_B, `index ${i}`);\n      }\n    });\n  });\n\n  it('should add zero bytes of padding to end', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = DATA_VALUE; });\n\n    const padding = {\n      value: PADDING_VALUE_B,\n      count: 0,\n    };\n\n    const paddedArrayBuffer = PaddingUtil.addPaddingToEnd(arrayBuffer, padding);\n    expect(paddedArrayBuffer.byteLength).to.equal(ARRAY_BUFFER_SIZE);\n\n    const paddedUint8Array = new Uint8Array(paddedArrayBuffer);\n\n    paddedUint8Array.forEach((e, i, a) => { expect(a[i]).to.equal(DATA_VALUE, `index ${i}`); });\n  });\n\n  it('should count padding from start when there\\'s none', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = DATA_VALUE; });\n\n    expect(PaddingUtil.countPaddingFromStart(arrayBuffer, PADDING_VALUE_A)).to.equal(0);\n  });\n\n  it('should count padding from start when it\\'s all padding', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = PADDING_VALUE_A; });\n\n    expect(PaddingUtil.countPaddingFromStart(arrayBuffer, PADDING_VALUE_A)).to.equal(0);\n  });\n\n  it('should count padding from start', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = ((i < EXTRA_PADDING_COUNT) ? PADDING_VALUE_A : DATA_VALUE); });\n\n    expect(PaddingUtil.countPaddingFromStart(arrayBuffer, PADDING_VALUE_A)).to.equal(EXTRA_PADDING_COUNT);\n  });\n\n  it('should count different values of padding from the start', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = ((i < EXTRA_PADDING_COUNT) ? PADDING_VALUE_B : DATA_VALUE); });\n\n    expect(PaddingUtil.countPaddingFromStart(arrayBuffer, PADDING_VALUE_B)).to.equal(EXTRA_PADDING_COUNT);\n  });\n\n  it('should count padding from end when there\\'s none', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = DATA_VALUE; });\n\n    expect(PaddingUtil.countPaddingFromEnd(arrayBuffer, PADDING_VALUE_A)).to.equal(0);\n  });\n\n  it('should count padding from end when it\\'s all padding', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = PADDING_VALUE_A; });\n\n    expect(PaddingUtil.countPaddingFromEnd(arrayBuffer, PADDING_VALUE_A)).to.equal(0);\n  });\n\n  it('should count padding from end', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = ((i >= ARRAY_BUFFER_SIZE) ? PADDING_VALUE_A : DATA_VALUE); });\n\n    expect(PaddingUtil.countPaddingFromEnd(arrayBuffer, PADDING_VALUE_A)).to.equal(EXTRA_PADDING_COUNT);\n  });\n\n  it('should count different values of padding from the end', () => {\n    const arrayBuffer = new ArrayBuffer(ARRAY_BUFFER_SIZE + EXTRA_PADDING_COUNT);\n    const uint8Array = new Uint8Array(arrayBuffer);\n    uint8Array.forEach((e, i, a) => { a[i] = ((i >= ARRAY_BUFFER_SIZE) ? PADDING_VALUE_B : DATA_VALUE); });\n\n    expect(PaddingUtil.countPaddingFromEnd(arrayBuffer, PADDING_VALUE_B)).to.equal(EXTRA_PADDING_COUNT);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/SaveFiles.spec.js",
    "content": "import { expect } from 'chai';\nimport SaveFilesUtil from '@/util/SaveFiles';\n\nconst SAVE_FILE_SIZE = 8192;\n\ndescribe('SaveFilesUtil', () => {\n  it('should create a save file that erases a save from a cartridge', () => {\n    const saveFile = new ArrayBuffer(SAVE_FILE_SIZE);\n    const saveFileArray = new Uint8Array(saveFile);\n\n    for (let i = 0; i < SAVE_FILE_SIZE; i += 1) {\n      saveFileArray[i] = (i % 255) + 1; // All non-zero\n    }\n\n    const eraseSaveFile = SaveFilesUtil.getEraseCartridgeSave(saveFile);\n    const eraseSaveFileArray = new Uint8Array(eraseSaveFile);\n\n    expect(eraseSaveFile.byteLength).to.equal(saveFile.byteLength);\n\n    for (let i = 0; i < saveFile.byteLength; i += 1) {\n      expect(saveFileArray[i]).to.not.equal(0);\n      expect(eraseSaveFileArray[i]).to.equal(0);\n    }\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/SegaCdUtil.spec.js",
    "content": "import { expect } from 'chai';\nimport SegaCdUtil from '@/util/SegaCd';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\nconst DIR = './tests/data/util';\n\nconst INTERNAL_FILENAME = `${DIR}/Popful Mail (USA) (RE)-internal.sav`;\nconst RAM_CART_FILENAME = `${DIR}/Popful Mail (USA) (RE)-internal-to-ram-cart.brm`;\n\nconst EMULATOR_RAM_CART_SIZE = 524288; // Genesis Plus uses this size for its virtual RAM cart\n\nconst INTERNAL_MANY_FILES_FILENAME = `${DIR}/Multiple titles.brm`;\nconst RAM_CART_MANY_FILES_FILENAME = `${DIR}/Multiple titles-to-ram-cart.brm`;\n\ndescribe('SegaCdUtil', () => {\n  it('should resize an internal RAM save to emulator RAM cart size', async () => {\n    const internalArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_FILENAME);\n    const ramCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAM_CART_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(SegaCdUtil.resize(internalArrayBuffer, EMULATOR_RAM_CART_SIZE), ramCartArrayBuffer)).to.equal(true);\n  });\n\n  it('should resize a RAM cart save to internal size', async () => {\n    const internalArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_FILENAME);\n    const ramCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAM_CART_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(SegaCdUtil.resize(ramCartArrayBuffer, SegaCdUtil.INTERNAL_SAVE_SIZE), internalArrayBuffer)).to.equal(true);\n  });\n\n  it('should resize an internal RAM save that contains many files', async () => {\n    const internalArrayBuffer = await ArrayBufferUtil.readArrayBuffer(INTERNAL_MANY_FILES_FILENAME);\n    const ramCartArrayBuffer = await ArrayBufferUtil.readArrayBuffer(RAM_CART_MANY_FILES_FILENAME);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(SegaCdUtil.resize(internalArrayBuffer, EMULATOR_RAM_CART_SIZE), ramCartArrayBuffer)).to.equal(true);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/Troubleshooting test files.spec.js",
    "content": "import { expect } from 'chai';\nimport PaddingUtil from '@/util/Padding';\n\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\n\n/*\n  Files:\n\n  - Tomato Adventure (Japan).srm: Original broken file from a user, which has 128k of padding then 8k of data\n  - Tomato Adventure (Japan) fixed.srm: Corrected version of the above file: the padding is removed and 8k of data remains\n  - Tomato Adventure (Japan) test save all padding.srm: Test save for this game from an emulator, but game wasn't saved yet so file is all padding but is correct size (8k)\n  - Tomato Adventure (Japan) extra padding at end.srm: The original file but with an extra 8k of padding added to the end\n  - Tomato Adventure (Japan) extra padding at start.srm: The original file but with an extra 8k of padding added to the start\n  - Tomato Adventure (Japan) fixed extra padding at end.srm: Corrected version of the original file, but with 8k of padding added to the end\n*/\n\ndescribe('Troubleshooting example files', () => {\n  it('should remove padding from the start', async () => {\n    const brokenSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan).srm');\n    const testSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed.srm');\n    const correctSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed.srm');\n\n    const fixedData = PaddingUtil.attemptFix(testSaveData, brokenSaveData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(fixedData, correctSaveData)).to.equal(true);\n  });\n\n  it('should add padding to the start', async () => {\n    const brokenSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed.srm');\n    const testSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan).srm');\n    const correctSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan).srm');\n\n    const fixedData = PaddingUtil.attemptFix(testSaveData, brokenSaveData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(fixedData, correctSaveData)).to.equal(true);\n  });\n\n  it('should remove padding at the the start and end', async () => {\n    const brokenSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) extra padding at end.srm');\n    const testSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed.srm');\n    const correctSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed.srm');\n\n    const fixedData = PaddingUtil.attemptFix(testSaveData, brokenSaveData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(fixedData, correctSaveData)).to.equal(true);\n  });\n\n  it('should add padding to the end', async () => {\n    const brokenSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan).srm');\n    const testSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed extra padding at end.srm');\n    const correctSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed extra padding at end.srm');\n\n    const fixedData = PaddingUtil.attemptFix(testSaveData, brokenSaveData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(fixedData, correctSaveData)).to.equal(true);\n  });\n\n  it('should be able to use a test save that\\'s all padding', async () => {\n    const brokenSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan).srm');\n    const testSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) test save all padding.srm');\n    const correctSaveData = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed.srm');\n\n    const fixedData = PaddingUtil.attemptFix(testSaveData, brokenSaveData);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(fixedData, correctSaveData)).to.equal(true);\n  });\n\n  it('should notice when 2 files have the same size and padding', async () => {\n    const arrayBuffer1 = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan).srm');\n    const arrayBuffer2 = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed.srm');\n\n    expect(PaddingUtil.fileSizeAndPaddingFromStartIsSame(arrayBuffer1, arrayBuffer2)).to.equal(false);\n  });\n\n  it('should notice when 2 files have different sizes', async () => {\n    const arrayBuffer1 = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed.srm');\n    const arrayBuffer2 = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) test save all padding.srm');\n\n    expect(PaddingUtil.fileSizeAndPaddingFromStartIsSame(arrayBuffer1, arrayBuffer2)).to.equal(true);\n  });\n\n  it('should notice when 2 files have the same size but different padding', async () => {\n    const arrayBuffer1 = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed extra padding at end.srm');\n    const arrayBuffer2 = await ArrayBufferUtil.readArrayBuffer('./tests/data/util/Tomato Adventure (Japan) fixed extra padding at start.srm');\n\n    expect(PaddingUtil.fileSizeAndPaddingFromStartIsSame(arrayBuffer1, arrayBuffer2)).to.equal(false);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/crypto-aes.spec.js",
    "content": "import { expect } from 'chai';\nimport CryptoAes from '@/util/crypto-aes';\nimport Util from '@/util/util';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport CryptoUtil from '#/util/Crypto';\n\nconst PLAINTEXT_STRING = 'Gargoyle\\'s Quest > Demon\\'s Crest, Megaman X3 > Megaman X2, Adventure of Link > Link to the Past';\nconst PLAINTEXT_ENCODING = 'utf8';\nconst ENCRYPTION_ALGORITHM = 'aes-128-cbc';\nconst ENCRYPTION_KEY = Buffer.from('abcdef0123456789abcdef0123456789', 'hex');\nconst ENCRYPTION_INITIALIZATION_VECTOR = Buffer.from('9876543210fedcba9876543210fedcba', 'hex');\n\ndescribe('crypto-aes', () => {\n  it('should encrypt then decrypt the same data', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const plaintextArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    const encryptedArrayBuffer = CryptoAes.encrypt(CryptoUtil.addPkcsPadding(plaintextArrayBuffer), ENCRYPTION_ALGORITHM, ENCRYPTION_KEY, ENCRYPTION_INITIALIZATION_VECTOR);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(plaintextArrayBuffer, encryptedArrayBuffer)).to.equal(false);\n\n    const decryptedArrayBuffer = CryptoUtil.removePkcsPadding(CryptoAes.decrypt(encryptedArrayBuffer, ENCRYPTION_ALGORITHM, ENCRYPTION_KEY, ENCRYPTION_INITIALIZATION_VECTOR));\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(decryptedArrayBuffer, plaintextArrayBuffer)).to.equal(true);\n\n    const textDecoder = new TextDecoder(PLAINTEXT_ENCODING);\n    const decryptedBuffer = Buffer.from(decryptedArrayBuffer);\n    const decryptedText = textDecoder.decode(decryptedBuffer);\n\n    expect(decryptedText).to.equal(PLAINTEXT_STRING);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/crypto-des.spec.js",
    "content": "import { expect } from 'chai';\nimport CryptoDes from '@/util/crypto-des';\nimport Util from '@/util/util';\nimport ArrayBufferUtil from '#/util/ArrayBuffer';\nimport CryptoUtil from '#/util/Crypto';\n\nconst PLAINTEXT_STRING = 'Mega Man > Mega Man Powered Up, Mega Man X > Mega Man Maverick Hunter X, Need for Speed: Underground > Need for Speed: Underground Rivals';\nconst PLAINTEXT_ENCODING = 'utf8';\nconst ENCRYPTION_ALGORITHM = 'des-cbc';\nconst ENCRYPTION_KEY = Buffer.from('abcdef0123456789', 'hex');\nconst ENCRYPTION_INITIALIZATION_VECTOR = Buffer.from('9876543210fedcba', 'hex');\n\ndescribe('crypto-des', () => {\n  it('should encrypt then decrypt the same data', () => {\n    const textEncoder = new TextEncoder(PLAINTEXT_ENCODING);\n    const plaintextArrayBuffer = Util.bufferToArrayBuffer(textEncoder.encode(PLAINTEXT_STRING));\n\n    const encryptedArrayBuffer = CryptoDes.encrypt(CryptoUtil.addPkcsPadding(plaintextArrayBuffer), ENCRYPTION_ALGORITHM, ENCRYPTION_KEY, ENCRYPTION_INITIALIZATION_VECTOR);\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(plaintextArrayBuffer, encryptedArrayBuffer)).to.equal(false);\n\n    const decryptedArrayBuffer = CryptoUtil.removePkcsPadding(CryptoDes.decrypt(encryptedArrayBuffer, ENCRYPTION_ALGORITHM, ENCRYPTION_KEY, ENCRYPTION_INITIALIZATION_VECTOR));\n\n    expect(ArrayBufferUtil.arrayBuffersEqual(decryptedArrayBuffer, plaintextArrayBuffer)).to.equal(true);\n\n    const textDecoder = new TextDecoder(PLAINTEXT_ENCODING);\n    const decryptedBuffer = Buffer.from(decryptedArrayBuffer);\n    const decryptedText = textDecoder.decode(decryptedBuffer);\n\n    expect(decryptedText).to.equal(PLAINTEXT_STRING);\n  });\n});\n"
  },
  {
    "path": "frontend/tests/unit/util/util.spec.js",
    "content": "/* eslint-disable no-param-reassign */\n\nimport { expect } from 'chai';\nimport Util from '@/util/util';\n\nconst SOURCE_ARRAY_BUFFER_SIZE = 32;\nconst DESTINATION_ARRAY_BUFFER_SIZE = 64;\nconst SOURCE_DATA_VALUE = 0x12; // Represents actual data in our source ArrayBuffer\nconst DESTINATION_DATA_VALUE = 0xAB; // Represents actual data in our destination ArrayBuffer\nconst HEADER_VALUE = 0xCD; // Represents data in our \"header\"\nconst FOOTER_VALUE = 0xEF; // Represents data in our \"footer\"\nconst HEADER_LENGTH = 16;\nconst FOOTER_LENGTH = 24;\n\ndescribe('Util', () => {\n  it('should convert a description into a filename', () => {\n    // Some simple made-up strings\n    expect(Util.convertDescriptionToFilename('thunderforce 3')).to.equal('thunderforce 3');\n    expect(Util.convertDescriptionToFilename('Thunderforce 3')).to.equal('Thunderforce 3');\n    expect(Util.convertDescriptionToFilename('THUNDERFORCE 3')).to.equal('THUNDERFORCE 3');\n    expect(Util.convertDescriptionToFilename('Thunderforce 3!')).to.equal('Thunderforce 3');\n    expect(Util.convertDescriptionToFilename('***Thunderforce*** 3!')).to.equal('Thunderforce 3');\n\n    // Real descriptions from our test files, which contain special characters\n    expect(Util.convertDescriptionToFilename('T2-WAREHOUSE.P')).to.equal('T2-WAREHOUSEP');\n    expect(Util.convertDescriptionToFilename('T2-\\'.G')).to.equal('T2-G');\n    expect(Util.convertDescriptionToFilename('BK6.SRAM')).to.equal('BK6SRAM');\n    expect(Util.convertDescriptionToFilename('A BUG\\'S LIFE')).to.equal('A BUGS LIFE');\n    expect(Util.convertDescriptionToFilename('CASTLEVANIA-2 PHOENIX 208%')).to.equal('CASTLEVANIA-2 PHOENIX 208');\n    expect(Util.convertDescriptionToFilename('THPS4 CAREERー PHELIPE E RENATO')).to.equal('THPS4 CAREER PHELIPE E RENATO');\n    expect(Util.convertDescriptionToFilename('SUIKODEN2-(1) LV57  31:11:33')).to.equal('SUIKODEN2-1 LV57  311133');\n\n    // If the file is all special characters + whitespace then just return 'output'\n    expect(Util.convertDescriptionToFilename('!@#$ %^&* ()')).to.equal('output');\n  });\n\n  it('should copy a header from one array buffer and prepend it to the other', () => {\n    const sourceArrayBuffer = new ArrayBuffer(SOURCE_ARRAY_BUFFER_SIZE + HEADER_LENGTH);\n    const sourceUint8Array = new Uint8Array(sourceArrayBuffer);\n    sourceUint8Array.forEach((e, i, a) => {\n      if (i < HEADER_LENGTH) {\n        a[i] = HEADER_VALUE;\n      } else {\n        a[i] = SOURCE_DATA_VALUE;\n      }\n    });\n    const destinationArrayBuffer = new ArrayBuffer(DESTINATION_ARRAY_BUFFER_SIZE);\n    const destinationUint8Array = new Uint8Array(destinationArrayBuffer);\n    destinationUint8Array.forEach((e, i, a) => {\n      a[i] = DESTINATION_DATA_VALUE;\n    });\n\n    const outputArrayBuffer = Util.copyHeaderFromArrayBuffer(sourceArrayBuffer, HEADER_LENGTH, destinationArrayBuffer);\n    const outputUint8Array = new Uint8Array(outputArrayBuffer);\n\n    expect(outputUint8Array.length).to.equal(DESTINATION_ARRAY_BUFFER_SIZE + HEADER_LENGTH);\n    outputUint8Array.forEach((e, i, a) => {\n      if (i < HEADER_LENGTH) {\n        expect(a[i]).to.equal(HEADER_VALUE, `header index ${i}`);\n      } else {\n        expect(a[i]).to.equal(DESTINATION_DATA_VALUE, `data index ${i}`);\n      }\n    });\n  });\n\n  it('should copy a footer from one array buffer and append it to the other', () => {\n    const sourceArrayBuffer = new ArrayBuffer(SOURCE_ARRAY_BUFFER_SIZE + FOOTER_LENGTH);\n    const sourceUint8Array = new Uint8Array(sourceArrayBuffer);\n    sourceUint8Array.forEach((e, i, a) => {\n      if (i < SOURCE_ARRAY_BUFFER_SIZE) {\n        a[i] = SOURCE_DATA_VALUE;\n      } else {\n        a[i] = FOOTER_VALUE;\n      }\n    });\n    const destinationArrayBuffer = new ArrayBuffer(DESTINATION_ARRAY_BUFFER_SIZE);\n    const destinationUint8Array = new Uint8Array(destinationArrayBuffer);\n    destinationUint8Array.forEach((e, i, a) => {\n      a[i] = DESTINATION_DATA_VALUE;\n    });\n\n    const outputArrayBuffer = Util.copyFooterFromArrayBuffer(sourceArrayBuffer, FOOTER_LENGTH, destinationArrayBuffer);\n    const outputUint8Array = new Uint8Array(outputArrayBuffer);\n\n    expect(outputUint8Array.length).to.equal(DESTINATION_ARRAY_BUFFER_SIZE + FOOTER_LENGTH);\n    outputUint8Array.forEach((e, i, a) => {\n      if (i < DESTINATION_ARRAY_BUFFER_SIZE) {\n        expect(a[i]).to.equal(DESTINATION_DATA_VALUE, `data index ${i}`);\n      } else {\n        expect(a[i]).to.equal(FOOTER_VALUE, `footer index ${i}`);\n      }\n    });\n  });\n});\n"
  },
  {
    "path": "frontend/tests/util/ArrayBuffer.js",
    "content": "import { readFile, writeFile, stat } from 'fs/promises';\n\nexport default class ArrayBufferUtil {\n  static async fileExists(filename) {\n    try {\n      await stat(filename);\n    } catch (e) {\n      return false;\n    }\n\n    return true;\n  }\n\n  static async readArrayBuffer(filename) {\n    const b = await readFile(filename); // returns a Node Buffer object\n    return b.buffer.slice(b.byteOffset, b.byteOffset + b.byteLength); // https://stackoverflow.com/questions/8609289/convert-a-binary-nodejs-buffer-to-javascript-arraybuffer/31394257#31394257\n  }\n\n  static async writeArrayBuffer(filename, arrayBuffer) {\n    await writeFile(filename, Buffer.from(arrayBuffer));\n  }\n\n  static arrayBuffersEqual(ab1, ab2, ignoreBytes = 0) {\n    if (ab1.byteLength !== ab2.byteLength) {\n      return false;\n    }\n\n    const u81 = new Uint8Array(ab1);\n    const u82 = new Uint8Array(ab2);\n\n    for (let i = 0; i < (ab1.byteLength - ignoreBytes); i += 1) {\n      if (u81[i] !== u82[i]) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  static printArrayBuffer(arrayBuffer) {\n    const u8 = new Uint8Array(arrayBuffer);\n\n    console.log(`Length: ${arrayBuffer.byteLength}`);\n\n    for (let i = 0; i < arrayBuffer.byteLength; i += 1) {\n      console.log(`[${i}]: ${u8[i]}`);\n    }\n  }\n}\n"
  },
  {
    "path": "frontend/tests/util/Crypto.js",
    "content": "import { pad, unpad } from 'pkcs7';\nimport Util from '@/util/util';\n\nexport default class CryptoUtil {\n  static addPkcsPadding(arrayBuffer) {\n    return Util.bufferToArrayBuffer(pad(new Uint8Array(arrayBuffer)));\n  }\n\n  static removePkcsPadding(arrayBuffer) {\n    return Util.bufferToArrayBuffer(unpad(new Uint8Array(arrayBuffer)));\n  }\n}\n"
  },
  {
    "path": "frontend/vue.config.js",
    "content": "const webpack = require('webpack')\nconst path = require('path');\nconst contentBase = path.resolve(__dirname);\n\nconst testsDir = './tests';\n\nmodule.exports = {\n  productionSourceMap: process.env.VUE_APP_ENABLE_SOURCE_MAPS === 'true',\n  pluginOptions: {\n    s3Deploy: {\n      registry: undefined,\n      awsProfile: 'default',\n      overrideEndpoint: false,\n      region: 'us-west-2',\n      bucket: 'save-file-converter-dev',\n      createBucket: false,\n      staticHosting: false,\n      assetPath: 'dist',\n      assetMatch: '**',\n      deployPath: '/',\n      acl: 'public-read',\n      pwa: false,\n      enableCloudfront: false,\n      pluginVersion: '4.0.0-rc3',\n      uploadConcurrency: 5,\n    },\n    s3DeployCleanup: {\n      cleanupTag: {\n        Key: 'DeployLifecycle',\n        Value: 'DeleteMe',\n      },\n    },\n    webpackBundleAnalyzer: {\n      openAnalyzer: false,\n    },\n  },\n  configureWebpack: {\n    plugins: [\n      // Work around for Buffer is undefined:\n      // https://github.com/webpack/changelog-v5/issues/10\n      // https://stackoverflow.com/a/68723223\n      new webpack.ProvidePlugin({\n        Buffer: ['buffer', 'Buffer'],\n      }),\n      // So can use 'process.env.<blah>' in browser code\n      // https://stackoverflow.com/a/72016474 (also has good suggestions for various fallbacks if needed below)\n      new webpack.ProvidePlugin({\n        process: 'process/browser',\n      }),\n    ],\n    resolve: {\n      alias: {\n        \"#\": path.join(__dirname, testsDir)\n      },\n      fallback: {\n        \"fs\": false,\n        \"module\": false,\n        \"stream\": require.resolve(\"stream-browserify\"), // https://github.com/crypto-browserify/cipher-base/issues/11\n        \"buffer\": require.resolve(\"buffer\"), // https://stackoverflow.com/a/68723223\n      }\n    },\n    module: {\n      // WASM integration with webpack 5 based on: https://gist.github.com/surma/b2705b6cca29357ebea1c9e6e15684cc\n      rules: [\n        { \n          test: /\\.wasm$/,\n          type: 'javascript/auto',\n          loader: 'file-loader',\n          options: {\n            name: '[name]-[contenthash].[ext]',\n          }        \n        }\n      ]\n    }\n  }\n};\n"
  },
  {
    "path": "terraform/.gitignore",
    "content": ".terraform/\n.terraform*\nterraform.tfvars\nterraform.*.tfvars\nterraform.tfstate*\naws_credentials\n*.zip\n"
  },
  {
    "path": "terraform/aws_credentials.example",
    "content": "[default]\naws_access_key_id=\naws_secret_access_key="
  },
  {
    "path": "terraform/dev/main.tf",
    "content": "module \"frontend\" {\n  source = \"../modules/frontend\"\n\n  environment           = var.environment\n  environment_long_name = var.environment_long_name\n  region                = var.region\n\n  bucketname_user_string = var.bucketname_user_string\n\n  application_name      = var.application_name\n\n  days_to_keep_old_versions = 1\n\n  frontend_access_logs_bucket               = \"${var.application_name}-frontend-access-logs\"\n  retain_frontend_access_logs_after_destroy = false # For dev, we don't care about retaining these logs after doing a terraform destroy\n  days_to_keep_frontend_access_logs         = 1\n\n  use_custom_domain     = false\n  application_domain    = var.application_domain\n  zone_id               = var.route_53_zone_id\n\n  enable_continuous_deployment = false\n}\n\nmodule \"alarms\" {\n  source = \"../modules/alarms\"\n\n  environment       = var.environment\n  region            = var.region\n\n  topic_name        = var.application_name\n  notifications_email = var.notifications_email\n\n  enable_alarms     = false\n}\n"
  },
  {
    "path": "terraform/dev/provider.tf",
    "content": "provider \"aws\" {\n  region = var.region\n}\n\n"
  },
  {
    "path": "terraform/dev/variables.tf",
    "content": "variable \"region\" {\n  default = \"us-west-2\"\n}\n\nvariable \"environment\" {\n  default = \"dev\"\n}\n\nvariable \"environment_long_name\" {\n  default = \"development\"\n}\n\nvariable \"application_name\" {\n  default = \"save-file-converter\"\n}\n\nvariable \"bucketname_user_string\" {\n}\n\nvariable \"notifications_email\" {\n}\n\nvariable \"application_domain\" {\n}\n\nvariable \"route_53_zone_id\" {\n}\n\nvariable \"project_github_location\" {\n}\n"
  },
  {
    "path": "terraform/dev/versions.tf",
    "content": "\nterraform {\n  required_version = \">= 0.13\"\n  required_providers {\n    aws = {\n      source = \"hashicorp/aws\"\n      version = \"~> 6.12\"\n    }\n  }\n}\n"
  },
  {
    "path": "terraform/modules/alarms/outputs.tf",
    "content": "output \"sns_topic_arn\" {\n  value       = aws_sns_topic.alarms.arn\n  description = \"ARN alarms SNS topic\"\n}\n"
  },
  {
    "path": "terraform/modules/alarms/sns-topic.tf",
    "content": "# Based on https://stephenmann.io/post/setting-up-monitoring-and-alerting-on-amazon-aws-with-terraform/\n\nresource \"aws_sns_topic\" \"alarms\" {\n  name            = \"${var.topic_name}-${var.environment}\"\n  delivery_policy = <<EOF\n{\n  \"http\": {\n    \"defaultHealthyRetryPolicy\": {\n      \"minDelayTarget\": 20,\n      \"maxDelayTarget\": 20,\n      \"numRetries\": 3,\n      \"numMaxDelayRetries\": 0,\n      \"numNoDelayRetries\": 0,\n      \"numMinDelayRetries\": 0,\n      \"backoffFunction\": \"linear\"\n    },\n    \"disableSubscriptionOverrides\": false,\n    \"defaultThrottlePolicy\": {\n      \"maxReceivesPerSecond\": 1\n    }\n  }\n}\nEOF\n\n  provisioner \"local-exec\" {\n    command = \"aws sns subscribe --topic-arn ${self.arn} --protocol email --notification-endpoint ${var.notifications_email} --region ${var.region}\"\n  }\n}\n"
  },
  {
    "path": "terraform/modules/alarms/variables.tf",
    "content": "variable \"environment\" {\n}\n\nvariable \"region\" {\n}\n\nvariable \"topic_name\" {\n}\n\nvariable \"notifications_email\" {\n}\n\nvariable \"enable_alarms\" {\n  type = bool\n}\n"
  },
  {
    "path": "terraform/modules/alarms/versions.tf",
    "content": "terraform {\n  required_providers {\n    aws = {\n      source = \"hashicorp/aws\"\n    }\n  }\n  required_version = \">= 0.13\"\n}\n"
  },
  {
    "path": "terraform/modules/build-common-infrastructure/logs-bucket.tf",
    "content": "resource \"aws_s3_bucket\" \"build_logs\" {\n  bucket        = \"${var.build_logs_bucket}${var.bucketname_user_string}-${var.environment}\"\n  force_destroy = false == var.retain_build_logs_after_destroy\n}\n\nresource \"aws_s3_bucket_lifecycle_configuration\" \"build_logs\" {\n  bucket = aws_s3_bucket.build_logs.id\n\n  rule {\n    id = \"expire-logs-after-N-days\"\n\n    filter {\n      prefix = \"*\"\n    }\n\n    expiration {\n      days = var.days_to_keep_build_logs\n    }\n\n    status = \"Enabled\"\n  }\n}\n\nresource \"aws_s3_bucket_server_side_encryption_configuration\" \"build_logs\" {\n  bucket = aws_s3_bucket.build_logs.id\n\n  rule {\n    apply_server_side_encryption_by_default {\n      # Keep this as AES for consistency with the load balancer access logs (see note there)\n      sse_algorithm = \"AES256\"\n    }\n  }\n}\n\nresource \"aws_s3_bucket_public_access_block\" \"build_logs\" {\n  bucket = aws_s3_bucket.build_logs.id\n\n  block_public_acls       = true\n  block_public_policy     = true\n  ignore_public_acls      = true\n  restrict_public_buckets = true\n}\n\n# This disables ACLs on the bucket\nresource \"aws_s3_bucket_ownership_controls\" \"build_logs\" {\n  bucket = aws_s3_bucket.build_logs.id\n\n  rule {\n    object_ownership = \"BucketOwnerEnforced\"\n  }\n}\n"
  },
  {
    "path": "terraform/modules/build-common-infrastructure/outputs.tf",
    "content": "output \"build_service_role_arn\" {\n  value       = aws_iam_role.build_common_infrastructure.arn\n  description = \"ARN for the role which is used to run builds\"\n}\n\noutput \"build_logs_bucket_id\" {\n  value       = aws_s3_bucket.build_logs.id\n  description = \"ID of the bucket that will contain our build logs\"\n}\n"
  },
  {
    "path": "terraform/modules/build-common-infrastructure/role.tf",
    "content": "# Copied from https://www.terraform.io/docs/providers/aws/r/codebuild_project.html\n# The policy is also detailed here: https://docs.aws.amazon.com/codebuild/latest/userguide/auth-and-access-control-iam-identity-based-access-control.html#customer-managed-policies-example-create-vpc-network-interface\n\nresource \"aws_iam_role\" \"build_common_infrastructure\" {\n  name = \"${var.application_name}-codebuild-${var.environment}\"\n\n  assume_role_policy = <<EOF\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Principal\": {\n        \"Service\": \"codebuild.amazonaws.com\"\n      },\n      \"Action\": \"sts:AssumeRole\"\n    }\n  ]\n}\nEOF\n\n}\n\nresource \"aws_iam_role_policy\" \"build_common_infrastructure\" {\n  role = aws_iam_role.build_common_infrastructure.name\n\n  policy = <<POLICY\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Effect\": \"Allow\",\n      \"Resource\": [\n        \"*\"\n      ],\n      \"Action\": [\n        \"logs:CreateLogGroup\",\n        \"logs:CreateLogStream\",\n        \"logs:PutLogEvents\"\n      ]\n    },\n    {\n      \"Sid\": \"S3AccessPolicy\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:CreateBucket\",\n        \"s3:GetObject\",\n        \"s3:List*\",\n        \"s3:PutObject\"\n      ],\n      \"Resource\": [\n        \"${aws_s3_bucket.build_logs.arn}\",\n        \"${aws_s3_bucket.build_logs.arn}/*\"\n      ]\n    },\n    {\n      \"Sid\": \"S3BucketIdentity\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:GetBucketAcl\",\n        \"s3:GetBucketLocation\"\n      ],\n      \"Resource\": [\n        \"${aws_s3_bucket.build_logs.arn}\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:ListBucket\",\n        \"s3:PutObject*\",\n        \"s3:PutBucketWebsite\",\n        \"s3:ListObjectsV2\",\n        \"s3:GetObject*\",\n        \"s3:CopyObject\"\n      ],\n      \"Resource\": [\n        \"${var.s3_deployment_bucket_arn}\",\n        \"${var.s3_deployment_bucket_arn}/*\"\n      ]\n    },\n    {\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"cloudfront:CreateInvalidation\"\n      ],\n      \"Resource\": [\n        \"${var.cloudfront_distribution_arn}\"\n      ]\n    },\n    {\n      \"Action\": [\n        \"ecr:BatchCheckLayerAvailability\",\n        \"ecr:CompleteLayerUpload\",\n        \"ecr:GetAuthorizationToken\",\n        \"ecr:InitiateLayerUpload\",\n        \"ecr:PutImage\",\n        \"ecr:UploadLayerPart\"\n      ],\n      \"Resource\": \"*\",\n      \"Effect\": \"Allow\"\n    },\n    {\n      \"Sid\": \"SNSAccessPolicy\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"sns:CreateTopic\",\n        \"sns:GetTopicAttributes\",\n        \"sns:List*\",\n        \"sns:Publish\",\n        \"sns:SetTopicAttributes\",\n        \"sns:Subscribe\"\n      ],\n      \"Resource\": [\n        \"*\"\n      ]\n    },\n    {\n      \"Action\": [\n        \"events:*\",\n        \"iam:PassRole\"\n      ],\n      \"Resource\": \"*\",\n      \"Effect\": \"Allow\"\n    }\n  ]\n}\nPOLICY\n\n}\n\n"
  },
  {
    "path": "terraform/modules/build-common-infrastructure/variables.tf",
    "content": "variable \"environment\" {\n}\n\nvariable \"environment_long_name\" {\n}\n\nvariable \"region\" {\n}\n\nvariable \"project_github_location\" {\n}\n\nvariable \"build_logs_bucket\" {\n}\n\nvariable \"bucketname_user_string\" {\n}\n\nvariable \"retain_build_logs_after_destroy\" {\n  type = bool\n}\n\nvariable \"days_to_keep_build_logs\" {\n}\n\nvariable \"s3_deployment_bucket_arn\" {\n}\n\nvariable \"cloudfront_distribution_arn\" {\n}\n\nvariable \"topic_name\" {\n}\n\nvariable \"notifications_email\" {\n}\n\nvariable \"application_name\" {\n}\n"
  },
  {
    "path": "terraform/modules/build-common-infrastructure/versions.tf",
    "content": "\nterraform {\n  required_version = \">= 0.13\"\n  required_providers {\n    aws = {\n      source = \"hashicorp/aws\"\n    }\n  }\n}\n"
  },
  {
    "path": "terraform/modules/build-pipeline-frontend/alarms.tf",
    "content": "resource \"aws_cloudwatch_metric_alarm\" \"codebuild_eventbridge_failedinvocations\" {\n  alarm_name                = \"${var.application_name} CodeBuild EventBridge FailedInvocations - ${var.environment}\"\n  comparison_operator       = \"GreaterThanOrEqualToThreshold\"\n  evaluation_periods        = \"1\"\n  metric_name               = \"FailedInvocations\"\n  namespace                 = \"AWS/Events\"\n  period                    = \"300\"\n  statistic                 = \"Sum\"\n  threshold                 = \"1\"\n  treat_missing_data        = \"notBreaching\"\n  alarm_description         = \"Alerts if EventBridge fails to publish a codebuild event to lambda\"\n  alarm_actions             = [var.alarms_sns_topic_arn]\n  insufficient_data_actions = [var.alarms_sns_topic_arn]\n  ok_actions                = [var.alarms_sns_topic_arn]\n\n  dimensions = {\n    RuleName = aws_cloudwatch_event_rule.build_complete.name\n  }\n}\n\nresource \"aws_cloudwatch_metric_alarm\" \"build_dead_letter_queue_items\" {\n  alarm_name                = \"${aws_sqs_queue.build_dead_letter_queue.name} items\"\n  comparison_operator       = \"GreaterThanOrEqualToThreshold\"\n  evaluation_periods        = \"1\"\n  metric_name               = \"ApproximateNumberOfMessagesVisible\"\n  namespace                 = \"AWS/SQS\"\n  period                    = \"300\"\n  statistic                 = \"Maximum\"\n  threshold                 = \"1\"\n  treat_missing_data        = \"ignore\" # Maintain alarm state on missing data - sometimes data will just be missing for queues for some reason\n  alarm_description         = \"Alerts if the build dead-letter queue has items in it\"\n  alarm_actions             = [var.alarms_sns_topic_arn]\n  insufficient_data_actions = [var.alarms_sns_topic_arn]\n  ok_actions                = [var.alarms_sns_topic_arn]\n\n  dimensions = {\n    QueueName = aws_sqs_queue.build_dead_letter_queue.name\n  }\n}\n"
  },
  {
    "path": "terraform/modules/build-pipeline-frontend/code-build.tf",
    "content": "variable \"build_logs_directory\" {\n  default = \"/frontend\"\n}\n\nresource \"aws_codebuild_project\" \"frontend\" {\n  name          = \"${var.application_name}-frontend-${var.environment}\"\n  description   = \"Builds the ${var.environment} frontend\"\n  build_timeout = \"5\"\n  service_role  = var.build_service_role_arn\n  badge_enabled = true\n\n  artifacts {\n    type = \"NO_ARTIFACTS\"\n  }\n\n  cache {\n    type  = \"LOCAL\"\n    modes = [\"LOCAL_SOURCE_CACHE\"]\n  }\n\n  environment {\n    compute_type                = \"BUILD_GENERAL1_SMALL\"\n    image                       = \"aws/codebuild/standard:6.0\"\n    type                        = \"LINUX_CONTAINER\"\n    image_pull_credentials_type = \"CODEBUILD\"\n\n    environment_variable {\n      name  = \"ENVIRONMENT\"\n      value = var.environment_long_name\n    }\n  }\n\n  logs_config {\n    cloudwatch_logs {\n      status = \"DISABLED\"\n    }\n\n    s3_logs {\n      status   = \"ENABLED\"\n      location = \"${var.build_logs_bucket_id}${var.build_logs_directory}\"\n    }\n  }\n\n  source {\n    type            = \"GITHUB\"\n    location        = var.project_github_location\n    buildspec       = var.buildspec_location\n    git_clone_depth = 1\n  }\n\n  tags = {\n    Environment = var.environment\n  }\n  # It would be preferable to have these builds happen in our own VPC, but the machines have to\n  # be on a private subnet with access to the Internet, which requires a NAT, which incurs billing charges.\n  # So just have them be in the default VPC instead\n}\n\nresource \"aws_codebuild_webhook\" \"frontend\" {\n  project_name = aws_codebuild_project.frontend.name\n\n  filter_group {\n    filter {\n      type    = \"EVENT\"\n      pattern = \"PUSH\"\n    }\n\n    filter {\n      type    = \"HEAD_REF\"\n      pattern = \"main\"\n    }\n\n    filter {\n      type    = \"FILE_PATH\"\n      pattern = var.file_path\n    }\n  }\n}\n\n"
  },
  {
    "path": "terraform/modules/build-pipeline-frontend/email-logs.tf",
    "content": "# Infra to support our lambda function:\n# Policies for it to assume a role and to be able to trigger events based on success/failure,\n# and also the source file and the lambda function itself\n\nresource \"aws_ses_email_identity\" \"from_email\" {\n  email = var.notifications_email\n}\n\ndata \"aws_iam_policy_document\" \"assume_role\" {\n  statement {\n    effect = \"Allow\"\n\n    principals {\n      type        = \"Service\"\n      identifiers = [\"lambda.amazonaws.com\"]\n    }\n\n    actions = [\"sts:AssumeRole\"]\n  }\n}\n\n# We have the ListBucket premission because otherwise NoSuchKey errors become AccessDenied errors\nresource \"aws_iam_role\" \"iam_for_lambda\" {\n  name               = \"${var.lambda_function_name}-iam_for_lambda\"\n  assume_role_policy = data.aws_iam_policy_document.assume_role.json\n}\n\nresource \"aws_iam_role_policy\" \"iam_for_lambda_policy\" {\n  name = \"email-logs-lambda-policy-${var.environment}\"\n  role = aws_iam_role.iam_for_lambda.id\n\n    policy = <<POLICY\n{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": [\n    {\n      \"Sid\": \"SQSDeadLetterAccessPolicy\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"sqs:SendMessage\"\n      ],\n      \"Resource\": [\n        \"${aws_sqs_queue.build_dead_letter_queue.arn}\"\n      ]\n    },\n    {\n      \"Sid\": \"SESSendPolicy\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"ses:SendEmail\"\n      ],\n      \"Resource\": \"*\"\n    },\n    {\n      \"Sid\": \"S3AccessPolicy\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:GetObject\"\n      ],\n      \"Resource\": [\n        \"arn:aws:s3:::${var.build_logs_bucket_id}${var.build_logs_directory}/\",\n        \"arn:aws:s3:::${var.build_logs_bucket_id}${var.build_logs_directory}/*\"\n      ]\n    },\n    {\n      \"Sid\": \"S3ListBucketPolicy\",\n      \"Effect\": \"Allow\",\n      \"Action\": [\n        \"s3:ListBucket\"\n      ],\n      \"Resource\": [\n        \"arn:aws:s3:::${var.build_logs_bucket_id}\"\n      ]\n    }\n  ]\n}\nPOLICY\n}\n\nresource \"aws_lambda_permission\" \"allow_cloudwatch_events\" {\n  statement_id  = \"AllowExecutionFromCloudWatchEvents\"\n  action        = \"lambda:InvokeFunction\"\n  function_name = aws_lambda_function.email_build_logs.function_name\n  principal     = \"events.amazonaws.com\"\n  source_arn    = aws_cloudwatch_event_rule.build_complete.arn\n}\n\ndata \"archive_file\" \"email_logs_lambda_function\" {\n  type        = \"zip\"\n  source_file = \"${path.module}/python/email-logs.py\"\n  output_path = \"${path.module}/python/email-logs.zip\"\n}\n\nresource \"aws_lambda_function\" \"email_build_logs\" {\n  filename = data.archive_file.email_logs_lambda_function.output_path\n  function_name = var.lambda_function_name\n  role = aws_iam_role.iam_for_lambda.arn\n  handler = \"email-logs.download_logs_and_send_email\"\n  publish = true\n\n  source_code_hash = data.archive_file.email_logs_lambda_function.output_base64sha256\n\n  runtime = \"python3.13\"\n\n  environment {\n    variables = {\n      EMAIL_ADDRESS = var.notifications_email\n    }\n  }\n\n  depends_on = [\n    aws_iam_role_policy_attachment.lambda_logs,\n    aws_cloudwatch_log_group.build_logs,\n  ]\n}\n\n# Infra to respond to our lamdba function:\n# If the invocation fails then the input gets put on a dead-letter queue and an alarm is triggered\n\nresource \"aws_lambda_function_event_invoke_config\" \"email_build_logs\" {\n  function_name = aws_lambda_function.email_build_logs.function_name\n\n  maximum_event_age_in_seconds = 60\n  maximum_retry_attempts       = 2\n\n  destination_config {\n    on_failure {\n      destination = aws_sqs_queue.build_dead_letter_queue.arn\n    }\n  }\n}\n\nresource \"aws_sqs_queue\" \"build_dead_letter_queue\" {\n  name                      = \"${var.lambda_function_name}-dead-letter-${var.environment}\"\n  delay_seconds             = 0\n  max_message_size          = 262144  # 256kB\n  message_retention_seconds = 1209600 # 14 days\n  receive_wait_time_seconds = 0\n}\n\n# Lambda function automatically write to cloudwatch logs if we give them permission\n\nresource \"aws_cloudwatch_log_group\" \"build_logs\" {\n  name              = \"/aws/lambda/${var.lambda_function_name}\"\n  retention_in_days = 14\n}\n\n# See also the following AWS managed policy: AWSLambdaBasicExecutionRole\ndata \"aws_iam_policy_document\" \"lambda_logging\" {\n  statement {\n    effect = \"Allow\"\n\n    actions = [\n      \"logs:CreateLogGroup\",\n      \"logs:CreateLogStream\",\n      \"logs:PutLogEvents\",\n    ]\n\n    resources = [\"arn:aws:logs:*:*:*\"]\n  }\n}\n\nresource \"aws_iam_policy\" \"lambda_logging\" {\n  name        = \"${var.application_name}-${var.environment}-lambda_logging\"\n  path        = \"/\"\n  description = \"IAM policy for logging from a lambda\"\n  policy      = data.aws_iam_policy_document.lambda_logging.json\n}\n\nresource \"aws_iam_role_policy_attachment\" \"lambda_logs\" {\n  role       = aws_iam_role.iam_for_lambda.name\n  policy_arn = aws_iam_policy.lambda_logging.arn\n}"
  },
  {
    "path": "terraform/modules/build-pipeline-frontend/eventbridge.tf",
    "content": "# Based on https://docs.aws.amazon.com/codebuild/latest/userguide/sample-build-notifications.html\n\nresource \"aws_cloudwatch_event_rule\" \"build_complete\" {\n  name        = \"${var.application_name}-frontend-codebuild-${var.environment}\"\n  description = \"Capture each codebuild success or failure event\"\n\n  event_pattern = <<EOF\n{\n  \"source\": [ \n    \"aws.codebuild\"\n  ], \n  \"detail-type\": [\n    \"CodeBuild Build State Change\"\n  ],\n  \"detail\": {\n    \"build-status\": [\n      \"SUCCEEDED\", \n      \"FAILED\",\n      \"STOPPED\" \n    ],\n    \"project-name\": [\n      \"${aws_codebuild_project.frontend.name}\"\n    ]\n  }  \n}\nEOF\n}\n\n# Here is an example output object from CodeBuild, to see the structure:\n# https://github.com/awsdocs/aws-codebuild-user-guide/blob/main/doc_source/sample-build-notifications.md#sample-build-notifications-ref\n\n# Supposedly we can grab the guid for the logs from $.detail.additional-information.logs.stream-name, but it doesn't seem to be populated.\n# We'll just have to parse it out of the build-id instead\n\nresource \"aws_cloudwatch_event_target\" \"lambda\" {\n  rule      = aws_cloudwatch_event_rule.build_complete.name\n  target_id = \"SendToLambda\"\n  arn       = aws_lambda_function.email_build_logs.arn\n\n  input_transformer {\n    input_paths = {\n      build-id = \"$.detail.build-id\",\n      project-name = \"$.detail.project-name\",\n      build-status = \"$.detail.build-status\",\n    }\n    input_template = <<EOF\n{\n  \"ProjectName\": \"<project-name>\",\n  \"BuildStatus\": \"<build-status>\",\n  \"BuildId\": \"<build-id>\",\n  \"LogsBucketId\": \"${var.build_logs_bucket_id}\",\n  \"LogsDirectory\": \"${var.build_logs_directory}\"\n}\nEOF\n  }\n}\n"
  },
  {
    "path": "terraform/modules/build-pipeline-frontend/python/email-logs.py",
    "content": "import boto3\nimport urllib.parse\nimport logging\nimport sys\nimport os\nimport gzip\nfrom botocore.exceptions import ClientError\n\nif logging.getLogger().hasHandlers():\n  # The Lambda environment pre-configures a handler logging to stderr. If a handler is already configured,\n  # `.basicConfig` does not execute. Thus we set the level directly.\n  logging.getLogger().setLevel(logging.INFO)\nelse:\n  logging.basicConfig(level=logging.INFO)\n\nlogger = logging.getLogger()\n\n# AWS SDK Clients\ns3 = boto3.client('s3')\nses = boto3.client('ses')\n\n# Email address to send logs to\nrecipient_email = os.environ.get('EMAIL_ADDRESS')\n\nif recipient_email is None:\n  logger.error('EMAIL_ADDRESS is not set. Exiting')\n  sys.exit(1)\n\ndef send_email(from_email_address, to_email_address, subject_line, body_text):\n  # Object structure described at https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/ses/client/send_email.html#\n  send_args = {\n    'Source': from_email_address,\n    'Destination': {\n      'ToAddresses': [to_email_address],\n    },\n    'Message': {\n      'Subject': {'Data': subject_line},\n      'Body': {'Text': {'Data': body_text}}\n    }\n  }\n    \n  try:\n    response = ses.send_email(**send_args)\n    message_id = response['MessageId']\n    logging.info(f\"Sent email '{message_id}' with subject '{subject_line}' from '{from_email_address}' to '{to_email_address}'\")\n  except ClientError:\n    logging.exception(f\"Could not send mail from '{from_email_address}' to '{to_email_address}'\")\n    raise\n\ndef download_logs_and_send_email(event, context):\n  logger.info(f'Received event: {event}')\n  logger.info(f'Received context: {context}')\n\n  build_status = event['BuildStatus']\n  project_name = event['ProjectName']\n  build_id = event['BuildId']\n  build_guid = build_id.split(':')[-1]\n  bucket = event['LogsBucketId']\n  key_prefix = event['LogsDirectory'].removeprefix('/') # S3 Object keys don't start with \"/\"\n\n  logger.info(f\"Build status: {build_status}\")\n  logger.info(f\"Project name: {project_name}\")\n  logger.info(f\"Build GUID:   {build_guid}\")\n  logger.info(f\"Bucket:       {bucket}\")\n  logger.info(f\"Key prefix:   {key_prefix}\")\n\n  s3_object_key = f\"{key_prefix}/{build_guid}.gz\"\n\n  logger.info(f\"S3 object key: {s3_object_key}\")\n\n  s3_object = s3.get_object(Bucket=bucket, Key=s3_object_key)\n  s3_stream = s3_object['Body']\n\n  logger.info(\"Read build log data from S3\")\n\n  with gzip.GzipFile(fileobj=s3_stream, mode='rb') as f_in:\n    build_logs = f_in.read().decode('utf-8')\n\n  logger.info(\"Decompressed build log data\")\n\n  # Send the build logs via email\n\n  build_status_cased = build_status\n\n  if build_status == 'SUCCEEDED':\n    build_status_cased = build_status.lower() # Keep FAILED and STOPPED as all-caps\n\n  subject_line = f\"{project_name} Build {build_status_cased}\"\n  body_text = f\"Build logs:\\n\\n{build_logs}\"\n        \n  send_email(recipient_email, recipient_email, subject_line, body_text)\n  \n  # And we're all done!\n\n  logger.info(f'Successfully finished execution for build {build_id}')\n"
  },
  {
    "path": "terraform/modules/build-pipeline-frontend/variables.tf",
    "content": "variable \"environment\" {\n}\n\nvariable \"environment_long_name\" {\n}\n\nvariable \"region\" {\n}\n\nvariable \"application_name\" {\n}\n\nvariable \"project_github_location\" {\n}\n\nvariable \"build_logs_bucket_id\" {\n}\n\nvariable \"s3_deployment_bucket_arn\" {\n}\n\nvariable \"buildspec_location\" {\n}\n\nvariable \"file_path\" {\n}\n\nvariable \"build_service_role_arn\" {\n}\n\nvariable \"notifications_email\" {\n}\n\nvariable \"alarms_sns_topic_arn\" {\n}\n\nvariable \"lambda_function_name\" {\n}\n"
  },
  {
    "path": "terraform/modules/build-pipeline-frontend/versions.tf",
    "content": "terraform {\n  required_version = \">= 0.13\"\n  required_providers {\n    aws = {\n      source = \"hashicorp/aws\"\n    }\n  }\n}\n"
  },
  {
    "path": "terraform/modules/frontend/build.tf",
    "content": "module \"build\" {\n  source = \"../build-pipeline-frontend\"\n\n  count = var.enable_continuous_deployment ? 1 : 0\n\n  environment              = var.environment\n  environment_long_name    = var.environment_long_name\n  region                   = var.region\n  application_name         = var.application_name\n  lambda_function_name     = var.lambda_function_name\n  project_github_location  = var.project_github_location\n  build_logs_bucket_id     = var.build_logs_bucket_id\n  s3_deployment_bucket_arn = aws_s3_bucket.frontend.arn\n  buildspec_location       = var.buildspec_location\n  file_path                = var.file_path\n  build_service_role_arn   = var.build_service_role_arn\n  alarms_sns_topic_arn     = var.alarms_sns_topic_arn\n  notifications_email      = var.notifications_email\n}\n"
  },
  {
    "path": "terraform/modules/frontend/cloudfront.tf",
    "content": "# This is a special user that Cloudfront assumes when reading from the bucket. We set our bucket\n# permissions such that only this user has access, rather than making it publicly readable,\n# so that people can't directly access the bucket contents.\n# https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html\n\nresource \"aws_cloudfront_origin_access_identity\" \"origin_access_identity\" {\n  comment = \"Cloudfront user allowed to read from our S3 bucket\"\n}\n\nlocals {\n  s3_origin_id            = \"static_files_origin\"\n  application_domains     = [var.application_domain]\n}\n\nresource \"aws_cloudfront_distribution\" \"application\" {\n  count               = var.use_custom_domain ? 1 : 0\n  enabled             = true\n  is_ipv6_enabled     = true\n  default_root_object = \"index.html\"\n  aliases = slice(\n    local.application_domains,\n    0,\n    var.use_custom_domain ? length(local.application_domains) : 0,\n  ) # Needs to optionally be an empty list. Workaround from: https://github.com/hashicorp/terraform/issues/18259\n\n  # Our S3 bucket\n  origin {\n    domain_name = aws_s3_bucket.frontend.bucket_regional_domain_name\n    origin_id   = local.s3_origin_id\n\n    s3_origin_config {\n      origin_access_identity = aws_cloudfront_origin_access_identity.origin_access_identity.cloudfront_access_identity_path\n    }\n  }\n\n  # Forward everything to our S3 bucket\n  default_cache_behavior {\n    allowed_methods  = [\"DELETE\", \"GET\", \"HEAD\", \"OPTIONS\", \"PATCH\", \"POST\", \"PUT\"]\n    cached_methods   = [\"GET\", \"HEAD\", \"OPTIONS\"]\n    target_origin_id = local.s3_origin_id\n\n    forwarded_values {\n      query_string = true\n\n      cookies {\n        forward = \"all\"\n      }\n    }\n\n    viewer_protocol_policy = \"redirect-to-https\"\n    min_ttl                = 0\n    default_ttl            = 3600\n    max_ttl                = 86400\n  }\n\n  logging_config {\n    include_cookies = false\n    bucket          = aws_s3_bucket.frontend_access_logs.bucket_domain_name\n    prefix          = \"cloudfront/\"\n  }\n\n  price_class = \"PriceClass_100\" # Only serve from US/Europe to keep costs down: https://aws.amazon.com/cloudfront/pricing/\n\n  restrictions {\n    geo_restriction {\n      restriction_type = \"none\"\n    }\n  }\n\n  viewer_certificate {\n    cloudfront_default_certificate = var.use_custom_domain == false                           # In dev, for now, we can just visit our site through cloudfront directly rather than through a domain\n    acm_certificate_arn            = element(concat(aws_acm_certificate_validation.cert.*.certificate_arn, [\"\"]), 0) # There's either 1 or 0 certs, so the 0th element is either the cert or empty string\n    ssl_support_method             = var.use_custom_domain ? \"sni-only\" : \"\"                  # If cloudfront_default_certificate is set then this won't be set. But terraform will try to set it everytime it runs, which takes a good 15 minutes each time\n  }\n}\n"
  },
  {
    "path": "terraform/modules/frontend/dns.tf",
    "content": "provider \"aws\" {\n  # Certificates need to be in us-east-1\n  # https://github.com/hashicorp/terraform/issues/10957\n  region = \"us-east-1\"\n  alias  = \"use1\"\n}\n\nresource \"aws_acm_certificate\" \"cert\" {\n  provider          = aws.use1\n  count             = var.use_custom_domain ? 1 : 0\n  domain_name       = var.application_domain\n  validation_method = \"DNS\"\n\n  options {\n    certificate_transparency_logging_preference = \"ENABLED\"\n  }\n}\n\n# FIXME: Need to revisit this to use newer syntax and clean it up\n# https://registry.terraform.io/providers/hashicorp/aws/latest/docs/guides/version-3-upgrade#domain_validation_options-changed-from-list-to-set\nresource \"aws_route53_record\" \"cert_validation\" {\n  count   = var.use_custom_domain ? 1 : 0\n  zone_id = var.zone_id\n  name    = tolist(aws_acm_certificate.cert[count.index].domain_validation_options)[0].resource_record_name\n  type    = tolist(aws_acm_certificate.cert[count.index].domain_validation_options)[0].resource_record_type\n  records = [tolist(aws_acm_certificate.cert[count.index].domain_validation_options)[0].resource_record_value]\n  ttl     = 60\n}\n\nresource \"aws_acm_certificate_validation\" \"cert\" {\n  provider                = aws.use1\n  count                   = var.use_custom_domain ? 1 : 0\n  certificate_arn         = aws_acm_certificate.cert[count.index].arn\n  validation_record_fqdns = [aws_route53_record.cert_validation[count.index].fqdn]\n\n  timeouts {\n    create = \"24h\" # Validation can take hours: https://aws.amazon.com/blogs/security/easier-certificate-validation-using-dns-with-aws-certificate-manager/\n  }\n}\n\nresource \"aws_route53_record\" \"cloudfront-ipv4\" {\n  count   = var.use_custom_domain ? 1 : 0\n  name    = \"\" # This is the subdomain, so we'll leave this blank\n  zone_id = var.zone_id\n  type    = \"A\"\n\n  alias {\n    zone_id = element(concat(aws_cloudfront_distribution.application.*.hosted_zone_id, [\"\"]), 0)\n    name = element(concat(aws_cloudfront_distribution.application.*.domain_name, [\"\"]), 0)\n    evaluate_target_health = false\n  }\n}\n\nresource \"aws_route53_record\" \"cloudfront-ipv6\" {\n  count   = var.use_custom_domain ? 1 : 0\n  name    = \"\" # This is the subdomain, so we'll leave this blank\n  zone_id = var.zone_id\n  type    = \"AAAA\"\n\n  alias {\n    zone_id = element(concat(aws_cloudfront_distribution.application.*.hosted_zone_id, [\"\"]), 0)\n    name = element(concat(aws_cloudfront_distribution.application.*.domain_name, [\"\"]), 0)\n    evaluate_target_health = false\n  }\n}"
  },
  {
    "path": "terraform/modules/frontend/outputs.tf",
    "content": "output \"bucket_name\" {\n  value       = aws_s3_bucket.frontend.bucket\n  description = \"Name of the bucket that was created to serve frontend files from\"\n}\n\noutput \"bucket_metrics_filter_id\" {\n  value       = aws_s3_bucket_metric.frontend.name\n  description = \"FilterId of the filter used on the bucket metrics\"\n}\n\noutput \"s3_deployment_bucket_arn\" {\n  value       = aws_s3_bucket.frontend.arn\n  description = \"The ARN of the bucket that hosts our deployment\"\n}\n\noutput \"cloudfront_distribution_arn\" {\n  value       = element(concat(aws_cloudfront_distribution.application.*.arn, [\"\"]), 0)\n  description = \"The ARN of the Cloudfront distribution that fronts our deployment\"\n}\n"
  },
  {
    "path": "terraform/modules/frontend/s3.tf",
    "content": "resource \"aws_s3_bucket\" \"frontend\" {\n  bucket        = \"${var.application_name}${var.bucketname_user_string}-${var.environment}\"\n  force_destroy = true\n}\n\nresource \"aws_s3_bucket_logging\" \"frontend\" {\n  bucket = aws_s3_bucket.frontend.bucket\n\n  target_bucket = aws_s3_bucket.frontend_access_logs.bucket\n  target_prefix = \"access-log/\"\n}\n\nresource \"aws_s3_bucket_lifecycle_configuration\" \"frontend\" {\n  bucket = aws_s3_bucket.frontend.id\n\n  rule {\n    id = \"expire-old-versions-after-N-days\"\n\n    filter {}\n\n    noncurrent_version_expiration {\n      noncurrent_days = var.days_to_keep_old_versions\n    }\n\n    status = \"Enabled\"\n  }\n\n  rule {\n    id = \"expire-tagged-files-after-N-days\"\n\n    filter {\n      tag {\n        key = \"DeployLifecycle\"\n        value = \"DeleteMe\"\n      }\n    }\n\n    expiration {\n      days = var.days_to_keep_old_versions\n    }\n\n    status = \"Enabled\"\n  }\n}\n\nresource \"aws_s3_bucket_metric\" \"frontend\" {\n  bucket = aws_s3_bucket.frontend.bucket\n  name   = \"GetRequests\"\n\n  filter {\n    prefix = \"index.html\"\n  }\n}\n\nresource \"aws_s3_bucket_versioning\" \"frontend\" {\n  bucket = aws_s3_bucket.frontend.id\n\n  versioning_configuration {\n    status = \"Enabled\"\n  }\n}\n\nresource \"aws_s3_bucket_website_configuration\" \"frontend\" {\n  bucket = aws_s3_bucket.frontend.id\n\n  index_document {\n    suffix = \"index.html\"\n  }\n\n  error_document {\n    key = \"index.html\"\n  }\n}\n\nresource \"aws_s3_bucket_acl\" \"frontend\" {\n  bucket = aws_s3_bucket.frontend.id\n  acl    = \"public-read\"\n}\n\nresource \"aws_s3_bucket_public_access_block\" \"frontend\" {\n  bucket = aws_s3_bucket.frontend.id\n\n  block_public_acls = false # Needed to allow deployment into this bucket. I don't understand why.\n\n  # Giving explicit permission to the IAM user doing the deployment doesn't help.\n  # The console still says \"bucket and objects not public\" (as desired),\n  # and trying to go to the website link for this bucket gives a 403 forbidden (as desired)\n  # I wrote up an issue here: https://github.com/multiplegeorges/vue-cli-plugin-s3-deploy/issues/79\n  block_public_policy     = true\n  ignore_public_acls      = var.use_custom_domain # Need to be able to access this bucket publicly in dev if there's no CloudFront in front of it\n  restrict_public_buckets = true\n}\n\n# We need to give the cloudfront user the ability to read from this bucket, and our current\n# user the ability to write to it\n\n# Setting the acl to \"bucket-owner-full-control\" gives the *account* owner full control, but no control\n# to the IAM user who created the bucket. That's the same IAM user who will be deploying files\n# into this bucket, so it needs an individual permission\n\ndata \"aws_caller_identity\" \"current\" {\n}\n\ndata \"aws_iam_policy_document\" \"allow_cloudfront_and_current_user\" {\n  statement {\n    actions   = [\"s3:GetObject\"]\n    resources = [\"${aws_s3_bucket.frontend.arn}/*\"]\n\n    principals {\n      type        = \"AWS\"\n      identifiers = [aws_cloudfront_origin_access_identity.origin_access_identity.iam_arn]\n    }\n  }\n\n  statement {\n    actions   = [\"s3:ListBucket\"]\n    resources = [aws_s3_bucket.frontend.arn]\n\n    principals {\n      type        = \"AWS\"\n      identifiers = [aws_cloudfront_origin_access_identity.origin_access_identity.iam_arn]\n    }\n  }\n}\n\nresource \"aws_s3_bucket_policy\" \"frontend_cloudfront_current_user\" {\n  bucket = aws_s3_bucket.frontend.id\n  policy = data.aws_iam_policy_document.allow_cloudfront_and_current_user.json\n}\n\nresource \"aws_s3_bucket\" \"frontend_access_logs\" {\n  bucket        = \"${var.frontend_access_logs_bucket}${var.bucketname_user_string}-${var.environment}\"\n  force_destroy = false == var.retain_frontend_access_logs_after_destroy\n}\n\nresource \"aws_s3_bucket_lifecycle_configuration\" \"frontend_access_logs\" {\n  bucket = aws_s3_bucket.frontend_access_logs.id\n\n  rule {\n    id = \"expire-logs-after-N-days\"\n\n    filter {}\n\n    expiration {\n      days = var.days_to_keep_frontend_access_logs\n    }\n\n    status = \"Enabled\"\n  }\n}\n\nresource \"aws_s3_bucket_acl\" \"frontend_access_logs\" {\n  bucket = aws_s3_bucket.frontend_access_logs.id\n  acl    = \"log-delivery-write\"\n}\n\n# It looks like service side encryption has become the default, and this is no long needed: https://docs.aws.amazon.com/AmazonS3/latest/userguide/default-encryption-faq.html\nresource \"aws_s3_bucket_server_side_encryption_configuration\" \"frontend_access_logs\" {\n  bucket = aws_s3_bucket.frontend_access_logs.id\n\n  rule {\n    apply_server_side_encryption_by_default {\n      # Keep this as AES for consistency with the load balancer access logs (see note there)\n      sse_algorithm = \"AES256\"\n    }\n  }\n}\n\nresource \"aws_s3_bucket_public_access_block\" \"frontend_access_logs\" {\n  bucket = aws_s3_bucket.frontend_access_logs.id\n\n  block_public_acls       = true\n  block_public_policy     = true\n  ignore_public_acls      = true\n  restrict_public_buckets = true\n}\n"
  },
  {
    "path": "terraform/modules/frontend/variables.tf",
    "content": "variable \"environment\" {\n}\n\nvariable \"environment_long_name\" {\n}\n\nvariable \"region\" {\n}\n\nvariable \"days_to_keep_old_versions\" {\n}\n\nvariable \"application_name\" {\n}\n\nvariable \"frontend_access_logs_bucket\" {\n}\n\nvariable \"retain_frontend_access_logs_after_destroy\" {\n  type = bool\n}\n\nvariable \"days_to_keep_frontend_access_logs\" {\n}\n\nvariable \"bucketname_user_string\" {\n}\n\nvariable \"use_custom_domain\" {\n  type = bool\n}\n\nvariable \"application_domain\" {\n}\n\nvariable \"zone_id\" {\n}\n\nvariable \"enable_continuous_deployment\" {\n  type = bool\n}\n\nvariable \"project_github_location\" {\n  default = \"\"\n}\n\nvariable \"build_logs_bucket_id\" {\n  default = \"\"\n}\n\nvariable \"buildspec_location\" {\n  default = \"\"\n}\n\nvariable \"file_path\" {\n  default = \"\"\n}\n\nvariable \"build_service_role_arn\" {\n  default = \"\"\n}\n\nvariable \"notifications_email\" {\n  default = \"\"\n}\n\nvariable \"alarms_sns_topic_arn\" {\n  default = \"\"\n}\n\nvariable \"lambda_function_name\" {\n  default = \"\"\n}\n"
  },
  {
    "path": "terraform/modules/frontend/versions.tf",
    "content": "\nterraform {\n  required_version = \">= 0.13\"\n  required_providers {\n    aws = {\n      source = \"hashicorp/aws\"\n    }\n  }\n}\n"
  },
  {
    "path": "terraform/prod/main.tf",
    "content": "module \"frontend\" {\n  source = \"../modules/frontend\"\n\n  environment           = var.environment\n  environment_long_name = var.environment_long_name\n  region                = var.region\n\n  bucketname_user_string = var.bucketname_user_string\n\n  application_name   = var.application_name\n\n  days_to_keep_old_versions = 1\n\n  frontend_access_logs_bucket               = \"${var.application_name}-frontend-access-logs\"\n  retain_frontend_access_logs_after_destroy = true # For prod we don't want to lose logs after doing a terraform destroy\n  days_to_keep_frontend_access_logs         = 90\n\n  use_custom_domain     = true\n  application_domain    = var.application_domain\n  zone_id               = var.route_53_zone_id\n\n  enable_continuous_deployment = true\n  project_github_location = var.project_github_location\n  build_logs_bucket_id    = module.build-common-infrastructure.build_logs_bucket_id\n  buildspec_location      = \"frontend/buildspec.yml\"\n  file_path               = \"frontend/*\"\n  build_service_role_arn  = module.build-common-infrastructure.build_service_role_arn\n  alarms_sns_topic_arn    = module.alarms.sns_topic_arn\n  notifications_email     = var.notifications_email\n  lambda_function_name    = \"email_build_logs-${var.application_name}-${var.environment}\"\n}\n\nmodule \"build-common-infrastructure\" {\n  source = \"../modules/build-common-infrastructure\"\n\n  application_name      = var.application_name\n  environment           = var.environment\n  environment_long_name = var.environment_long_name\n  region                = var.region\n\n  project_github_location  = var.project_github_location\n  s3_deployment_bucket_arn = module.frontend.s3_deployment_bucket_arn\n\n  cloudfront_distribution_arn = module.frontend.cloudfront_distribution_arn\n\n  build_logs_bucket               = \"${var.application_name}-build-logs\"\n  bucketname_user_string          = var.bucketname_user_string\n  retain_build_logs_after_destroy = true # For prod we don't want to lose logs, even after a terraform destroy\n  days_to_keep_build_logs         = 90\n\n  topic_name          = \"${var.application_name}-builds\"\n  notifications_email = var.notifications_email\n}\n\nmodule \"alarms\" {\n  source = \"../modules/alarms\"\n\n  environment       = var.environment\n  region            = var.region\n\n  topic_name          = \"${var.application_name}-alarms\"\n  notifications_email = var.notifications_email\n\n  enable_alarms     = false\n}\n"
  },
  {
    "path": "terraform/prod/provider.tf",
    "content": "provider \"aws\" {\n  region = var.region\n}\n\n"
  },
  {
    "path": "terraform/prod/variables.tf",
    "content": "variable \"region\" {\n  default = \"us-west-2\"\n}\n\nvariable \"environment\" {\n  default = \"prod\"\n}\n\nvariable \"environment_long_name\" {\n  default = \"production\"\n}\n\nvariable \"application_name\" {\n  default = \"save-file-converter\"\n}\n\nvariable \"bucketname_user_string\" {\n}\n\nvariable \"notifications_email\" {\n}\n\nvariable \"application_domain\" {\n}\n\nvariable \"route_53_zone_id\" {\n}\n\nvariable \"project_github_location\" {\n}\n"
  },
  {
    "path": "terraform/prod/versions.tf",
    "content": "\nterraform {\n  required_version = \">= 0.13\"\n  required_providers {\n    aws = {\n      source = \"hashicorp/aws\"\n      version = \"~> 6.12\"\n    }\n  }\n}\n"
  },
  {
    "path": "terraform/terraform.tfvars.example",
    "content": "# This is added to the various bucket names so that they don't conflict with other instances of this project\n# e.g. if it's set to \"-dave-\" then the bucket \"sample-project-dev\" will become \"sample-project-dave-dev\"\nbucketname_user_string = \"\"\nnotifications_email = \"\"\napplication_domain = \"\"\nroute_53_zone_id = \"\" # Zone created by Route 53 for our application domain\nproject_github_location = \"https://github.com/euan-forrester/save-file-converter\"\n"
  }
]